繁体   English   中英

访问带有变量的对象属性,如果不存在则回退到默认属性

[英]Access object property with variable and fallback to default property if non-existing

我是 Javascript 中switch语句的新手。 很酷的一点是,它结合了多个 if 语句和一个默认结果,如果所有 if 都失败了。

我是一个好奇的人,想知道如果所有其他方法都失败了,如何使用带有变量的对象属性选择来实现这个“默认值”。

例子:

const action.type = "non-existing-property";

const runF = {
  CREATE_PROJECT_SUCCESS: () => {
    console.log("created project");
    return state;
  },
  CREATE_PROJECT_ERROR: () => {
    console.log("create project error");
    return state;
  },
  default: ()=>{
    console.log("Do default stuff if all else failed");
    return state;
  }
}[action.type];
runF();

通常 action.type 值是 CREATE_PROJECT_SUCCESS 或 CREATE_PROJECT_ERROR。 但是,如果该属性不存在会发生什么? 然后我想运行默认属性。

任何人都知道如何做到这一点?


更新:

我找到了一个可能的解决方案,但这需要另一个 if 语句。 我希望看到一个更小、更快速的解决方案。 const action.type = "不存在的属性";

let runF = {
  CREATE_PROJECT_SUCCESS: () => {
    console.log("created project");
    return state;
  },
  CREATE_PROJECT_ERROR: () => {
    console.log("create project error");
    return state;
  }
}[action.type];

if (!runF) {
  //runF not defined/valid -> run default function
  runF = () => {
    console.log("Do default stuff if all else failed");
    return state;
  };
}

runF();

您可以在属性访问器中使用逻辑 OR 运算符 ( || ) 来实现回退到默认属性名称。 像这样的东西:

const runF = {
  CREATE_PROJECT_SUCCESS: () => {
    console.log("created project");
    return state;
  },
  CREATE_PROJECT_ERROR: () => {
    console.log("create project error");
    return state;
  },
  default: ()=>{
    console.log("Do default stuff if all else failed");
    return state;
  }
}[action.type || 'default'];
runF();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM