首页 > 解决方案 > 使用变量访问对象属性,如果不存在则回退到默认属性

问题描述

我是switchJavascript 语句的新手。很酷的一点是,如果所有 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();

标签: javascriptobjectpropertiesswitch-statementkey

解决方案


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

推荐阅读