问题描述
考虑以下事项:
var obj =
{
something: "blabla",otherthing: "mehmeh"
}
let a = obj["something"];
// blabla
let a = obj["doesnotexist"];
// undefined
let a = obj["doesnotexist"] ?? "sorry";
// sorry
let a = obj["something"]["level2"];
let a = obj["something"]["level2"] ?? "sorry";
// Uncaught TypeError
我必须处理很多情况,我不知道某个对象的结构是否“完整”,可以这么说,但我仍然想访问深度嵌套的属性并获得默认返回值,以防结构是在某种程度上坏了。
所以我使用了这个丑陋的函数:
function Safe_Traverse(object,fields,saferesult)
{
if(typeof object != "array" && typeof object != "object") return saferesult;
var value = saferesult;
var check = object;
var i = 0;
var l = fields.length;
while(typeof check[fields[i]] != "undefined" && check[fields[i]]!=null)
{
check = check[fields[i]];
if(i == l-1) value = check; else i = i + 1;
}
return value;
}
let a = Safe_Traverse(obj,["something","level2"],"sorry");
// sorry
由于我迷失在 ECMAScript 的许多持续更新中,我想知道现在是否有一种内置方法可以实现上述目标。
谢谢
解决方法
使用 for (var dataJson in datasJson['data']) {
datas.add(DataClass.fromJson(dataJson));
}
将 'nullish' 元素返回为 ?.
。
undefined