Javascript:缺少属性的默认值

问题描述

考虑以下事项:

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...