javascript - 使用变量访问对象属性,如果不存在则回退到默认属性
问题描述
我是switch
Javascript 语句的新手。很酷的一点是,如果所有 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();
推荐阅读
- javascript - 从刷新的 JSON 更新 img src
- .net - 在.NET核心中查找2个坐标之间的距离
- c# - ASP.NET C# 对象引用未设置为对象的实例。在 System.Web.Services.Protocols.SoapClientType..ctor
- sql-server - Find Average, MaxValue and MinValue and the Corresponding DateTime that the Values occur
- sql - 使用以下条件将值插入表中:
- javascript - 在 Adonisjs 中循环数据时重复结果
- xpath - 如何在 Google 表格中的表格上进行抓取?
- google-cloud-data-fusion - 谷歌云平台数据融合实例触发
- view - 创建或替换视图配置单元
- sql - sql中一列的多个条件