栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

测试是否存在嵌套的JavaScript对象键

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

测试是否存在嵌套的JavaScript对象键

如果您不想要a,则必须分步执行,

TypeError
因为如果其中一个成员是
null
undefined
,并且您尝试访问成员,则将引发异常。

您可以简单地

catch
指定异常,也可以创建一个函数来测试是否存在多个级别,如下所示:

function checkNested(obj ) {  var args = Array.prototype.slice.call(arguments, 1);  for (var i = 0; i < args.length; i++) {    if (!obj || !obj.hasOwnProperty(args[i])) {      return false;    }    obj = obj[args[i]];  }  return true;}var test = {level1:{level2:{level3:'level3'}} };checkNested(test, 'level1', 'level2', 'level3'); // truecheckNested(test, 'level1', 'level2', 'foo'); // false

ES6更新:

这是原始功能的简化版本,使用了ES6功能和递归功能(也采用正确的尾调用形式):

function checkNested(obj, level,  ...rest) {  if (obj === undefined) return false  if (rest.length == 0 && obj.hasOwnProperty(level)) return true  return checkNested(obj[level], ...rest)}

但是,如果要获取嵌套属性的值,而不仅要检查其存在,那么这里有一个简单的单行函数:

function getNested(obj, ...args) {  return args.reduce((obj, level) => obj && obj[level], obj)}const test = { level1:{ level2:{ level3:'level3'} } };console.log(getNested(test, 'level1', 'level2', 'level3')); // 'level3'console.log(getNested(test, 'level1', 'level2', 'level3', 'length')); // 6console.log(getNested(test, 'level1', 'level2', 'foo')); // undefinedconsole.log(getNested(test, 'a', 'b')); // undefined

上面的函数允许您获取嵌套属性的值,否则将返回

undefined

更新2019-10-17:

在可选的链接建议对达到第3阶段ECMAscript委员会的过程,这将让你安全地访问深度嵌套的性质,通过使用令牌

?.
,新的 可选链接操作

const value = obj?.level1?.level2?.level3

如果所访问的任何级别是

null
undefined
表达式将
undefined
自行解析为。

该建议还允许您安全地处理方法调用:

obj?.level1?.method();

上面的表达式将产生

undefined
如果
obj
obj.level1
或者
obj.level1.method
null
undefined
,否则会调用该函数。

从Babel 7.8.0开始,默认情况下支持ES2020

更新:2019年12月

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/374583.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号