首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >JavaScript如何测试是否存在嵌套的对象键?

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

提问于 2017-12-20 08:40:56
回答 2关注 0查看 641

如果我有一个对象的引用 -

代码语言:txt
AI代码解释
复制
var test = {};

这可能(但不是立即)嵌套对象,就像 -

代码语言:txt
AI代码解释
复制
{ level1:{level2:{level3:'level3'}} };

测试最深层嵌套对象中键的存在的最好方法是什么?

这个 -

代码语言:txt
AI代码解释
复制
alert(test.level1);

返回“未定义”,但是这个 -

代码语言:txt
AI代码解释
复制
alert(test.level1.level2.level3);

失败。

我目前正在做这样的事情 -

代码语言:txt
复制
代码语言:txt
AI代码解释
复制
if(test.level1 && test.level1.level2 && test.level1.level2.level3) {
代码语言:txt
AI代码解释
复制
    alert(test.level1.level2.level3);
代码语言:txt
AI代码解释
复制
}

但我想知道是否有更好的方法。

回答 2

人生的旅途

发布于 2017-12-20 09:13:24

如果你像字符串一样处理这个名字,你可以在任何深度读取一个对象属性't.level1.level2.level3'。

代码语言:txt
AI代码解释
复制
window.t={level1:{level2:{level3: 'level3'}}};
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
function deeptest(s){
代码语言:txt
AI代码解释
复制
    s= s.split('.')
代码语言:txt
AI代码解释
复制
    var obj= window[s.shift()];
代码语言:txt
AI代码解释
复制
    while(obj && s.length) obj= obj[s.shift()];
代码语言:txt
AI代码解释
复制
    return obj;
代码语言:txt
AI代码解释
复制
}
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
alert(deeptest('t.level1.level2.level3') || 'Undefined');

undefined如果有任何分段,则返回undefined。

最爱开车啦

发布于 2017-12-20 09:12:59

如果你不想要a TypeError,你必须一步一步地做,因为如果其中一个成员是nullor undefined,并且你试图访问一个成员,则会抛出一个异常。

你可以简单catch的例外,或者做一个函数来测试多个层次的存在,像这样:

代码语言:txt
AI代码解释
复制
function checkNested(obj /*, level1, level2, ... levelN*/) {
代码语言:txt
AI代码解释
复制
  var args = Array.prototype.slice.call(arguments, 1);
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
  for (var i = 0; i < args.length; i++) {
代码语言:txt
AI代码解释
复制
    if (!obj || !obj.hasOwnProperty(args[i])) {
代码语言:txt
AI代码解释
复制
      return false;
代码语言:txt
AI代码解释
复制
    }
代码语言:txt
AI代码解释
复制
    obj = obj[args[i]];
代码语言:txt
AI代码解释
复制
  }
代码语言:txt
AI代码解释
复制
  return true;
代码语言:txt
AI代码解释
复制
}
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
var test = {level1:{level2:{level3:'level3'}} };
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
checkNested(test, 'level1', 'level2', 'level3'); // true
代码语言:txt
AI代码解释
复制
checkNested(test, 'level1', 'level2', 'foo'); // false
和开发者交流更多问题细节吧,去 写回答
相关文章
Javascript中对象如何检查key(键)是否存在
如果要特别测试对象实例的属性(而不是继承的属性),请使用hasOwnProperty:
IT工作者
2022/02/09
26.7K0
如何判断Javascript对象是否存在
Javascript语言的设计不够严谨,很多地方一不小心就会出错。 举例来说,请考虑以下情况。 现在,我们要判断一个全局对象myObj是否存在,如果不存在,就对它进行声明。用自然语言描述的算法如下:   if (myObj不存在){     声明myObj;   } 你可能会觉得,写出这段代码很容易。但是实际上,它涉及的语法问题,远比我们想象的复杂。Juriy Zaytsev指出,判断一个Javascript对象是否存在,有超过50种写法。只有对Javascript语言的实现细节非常清楚,才可能分
ruanyf
2018/04/12
2.8K0
如何在JavaScript中访问暂未存在的嵌套对象
JavaScript 是个很神奇的东西。但是 JavaScript中的一些东西确实很奇怪,让人摸不着头脑。其中之一就是当你试图访问嵌套对象时,会遇到这个错误
前端小智@大迁世界
2019/07/02
8.1K0
在 jQuery 中如何判断对象是否存在
如果是下面的 jQuery 代码判断一个对象是否存在,是不能用的。 if($("#id")){ }else{} 因为 $("#id") 不管对象是否存在都会返回 object 。 正确使用判断对象是否存在应该用: if($("#id").length>0){}else{} 使用 jQuery 对象的属性 length 来判断,如果 > 0 就存在。 或者 if($("#id")[0]){} else {} 或者直接使用原生的 Javascript 代码来判断: if(document.getElement
Denis
2023/04/15
3.2K0
【说站】javascript数组如何判断是否存在指定值
以上就是javascript数组判断是否存在指定值的方法,希望对大家有所帮助。更多Javascript学习指路:Javascript
很酷的站长
2022/11/24
1.3K0
js判断属性是否存在(javascript的特点)
var array = [{‘yaxis’:22,’lines’:true},{‘lines’:true}]
全栈程序员站长
2022/07/28
6.1K0
如何快速准确的验证QQ邮箱是否开通,是否存在?
QQ是国内比较大的公共邮箱之一,做国内邮件营销的企业,无法避免需要做QQ邮件营销。既然是比较大的公共邮箱,那么群发邮件到达收件箱的难度也是比较有挑战性的。
用户2411043
2019/03/03
4.2K0
PHP检查对象或类中是否存在属性
$obj = \app\common\library\Email::instance(); $obj->p=889; if(isset($obj->p)){ echo 66; }else{ echo 99; } die; isset既可以判断对象的属性是否存在,也可以判断数组的键名是否存在 未经允许不得转载:肥猫博客 » PHP检查对象或类中是否存在属性
超级小可爱
2023/02/20
4.2K0
JavaScript如何判断是否为数字?
isNaN()函数是js自带的全局函数,isNaN() 函数用于检查其参数是否是非数字值。
全栈程序员站长
2022/09/07
2.5K0
存在外键关联的主表truncate如何做
我认为需要根据实际情况进行取舍,例如表不复杂,可以由应用实现,若表之间关联较多且复杂,那么交由数据库处理,至少保证不会错。
bisal
2019/01/30
8600
如何判断Python字典中是否存在某个key
在Python中有各种数据结构,而字典是我们生产中经常会用到的数据结构,这里记录一下如果判断某个key是否存在于字典中的二种方法。
后场技术
2020/09/03
20.4K0
如何检测node中是否存在内存泄露的隐患
虽然是在节假日期间,但是果然自己还是闲不住,不折腾点东西感觉生活就失去了趣味,闲话不多说,直接开始这次的记录和分享吧。
凌虚
2020/07/17
4.2K0
嵌套对象转map
嵌套对象转map,当对象嵌套层次太深,获取子对象的值及其不便,为解决这一问题,于是对象转map,有key就能得到相应的value。
全栈程序员站长
2022/08/30
1.6K0
Elasticsearch使用:嵌套对象
官网地址:https://www.elastic.co/guide/cn/elasticsearch/guide/current/nested-objects.html
HLee
2021/04/23
6.3K0
Elasticsearch使用:嵌套对象
JavaScript 中如何打印对象
我们一般通过使用 console.log 把变量或者对象输出到浏览器的控制台(console)的方法调试 JavaScript 程序,但是在移动端开发 JS 程序的时候,就没有那么好方便,可以使用 console.log 的方式来调试,对于变量我们可以使用 alert 函数来输出进行调试,如果变量,使用 alert 函数的话,浏览器只会告诉你这个只是一个变量,而不能打印出里面的内容,非常不方便,于是整理总结如下的函数,能够将数组或者对象这类的结果一一打印出来,具体代码如下:
Denis
2023/04/15
2K0
面向对象之类的成员,嵌套
类的成员可分为三大类:字段丶方法和属性 一丶字段   字段包括:普通字段和静态字段,他们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同.   普通字段属于对象   静态字段属于类 class Foo: #类变量(静态字段) country = "你好" def __init__(self,name): # 实例变量(普通字段) self.name = name def too(self): print("====
py3study
2020/01/19
1.5K0
面向对象之类的成员,嵌套
(九)定义嵌套的对象类型
# 定义嵌套的对象类型 说明 在 TypeSctipr 里面定义嵌套类型,和定义它的外层类型是一样的 第一种方式是写死在里面的 interface product { title: string price: number categroy: { name: string } } 第二种方式在外面定义 interface product { title: string price: number categroy: Categroy
老怪兽
2023/02/22
1.9K0
javascript当中嵌套函数
3)嵌套函数 例 3.3.1 <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"/> </head> <script> function outerFun(){ var i = 0; function innerFun(){ document.write(i); } innerFun(); } outerFun(); /*here you can not call innerFun(), because it is inside another function outerFun, so it will cause error.*/ innerFun(); document.write("马克-to-win"); </script>
马克java社区
2019/10/05
4780
javascript当中嵌套函数
python 判断属性是否存在
hasattr(object, name)    说明:判断对象object是否包含名为name的特性(hasattr是通过调用getattr(ojbect, name)是否抛出异常来实现的)。    参数object:对象。    参数name:特性名称。    返回为True或者为False 不过自己也可以定义一个方法 def getattribute(self, name): try:
py3study
2020/01/06
5.3K0
如何判断对象是否为垃圾
我们都Java会自动进行内存管理,JVM会进行垃圾回收,哪它是怎么判定哪些是“垃圾”并决定“垃圾”的生死呢?
索码理
2022/12/28
1.2K0
如何判断对象是否为垃圾

相似问题

在javascript中,如何动态地获得对象的嵌套属性?

2259

如何检查变量是否存在?

2292

如何实现INotifyPropertyChanged - 是否存在更好的方法?

2843

如何列出JavaScript对象的属性?

2334

如何查找Python中是否存在目录?

2450
相关问答用户
腾讯云TDP | TDP会员擅长3个领域
擅长5个领域
到家集团 | 技术VP擅长5个领域
腾讯云TDP | KOL擅长5个领域
擅长3个领域
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文