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

时间:2018-11-13 09:36:45

标签: javascript object properties switch-statement key

我是Java语言switch语句的新手。有趣的是,如果所有if都失败,它将多个if语句与默认结果结合在一起。

我是一个好奇的人,想知道如果所有其他失败的“默认”值可以通过使用带有变量的select属性来实现。

示例:

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();

1 个答案:

答案 0 :(得分:1)

您可以在属性访问器中使用逻辑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();