我认为有类似的东西会很有用:
let data = { item : { subItem: { text: 'Nested thing' } } }
if(data.?item.?subItem.?text){
//do something
}
这将是
的简写if( data && data.item && data.item.subItem && data.item.subItem.text )
可以这样做吗?这会被称为什么?
答案 0 :(得分:2)
目前你做这件事的方式是最好的(演讲,代码清晰度和可调试性),通常对象不会更深入嵌套。
更糟糕的选择是简单地访问该成员并使用try / catch构造继续。
然而,对于未来,有一个名为optional chaining计划的功能,它将直接提供您所谈论的功能。正如userqwert所述babel-plugin-transform-optional-chaining
(目前处于alpha版),可以在短期内/现在使用该功能。
答案 1 :(得分:0)
这是我使用的功能
getValue(element,path) {
"use strict";
if (!Array.isArray(path)) {
throw new Error("The first parameter must be an array");
}
for (var i = 0; i < path.length; i++) {
if (typeof element == "object" && typeof element[path[i]] != "undefined") {
element = element[path[i]];
} else {
return undefined;
}
}
return element;
}
对于你的例子,应该这样调用
getValue(data,['item','subItem','text']);
虽然有一些退缩......但是这样做了。
如果您需要,可以使用它并找到一种方法使其直接在Object原型上工作。