首页 > 其他分享 >判断对象是否包含某个属性的几种方法

判断对象是否包含某个属性的几种方法

时间:2023-11-25 10:56:16浏览次数:21  
标签:obj undefined 几种 let hasOwnProperty 某个 true 属性

1、最简单的方法,就是使用“!==”进行判断,这种方法在工作中很常见,可以看出该方法可以判断继承来的属性。

let obj = { x: 1 };
obj.x !== undefined;             // true 有x属性
obj.y !== undefined;             // false 无y属性
obj.toString !== undefined;      // true 从Object继承toString属性

2、使用 in 运算符,in 的语法是: attr in obj , 同样,该表达式也返回一个布尔值。

let obj = { x: 1 };
'x' in obj;             // true
'y' in obj;             // false
'toString' in obj;      // true

in运算符语法很简单,效果跟undefined是相同的,与undefined不同的是,in可以区分存在但值为undefined的属性。话不多说,看代码:

let obj = { x: undefined };
obj.x !== undefined;            // false
'x' in obj;                     // true

可以看出如果属性的值为undefined的时候,使用 !== 的方法就不奏效了,所以在工作中需要注意一下这一块。

3、对象的 hasOwnProperty() 方法也可以检测指定属性名是否在对象内,同样返回是布尔值, 当检测属性为自有属性(非继承)的时候返回true。

let obj = { x: 1, abc: 2 };
let a = 'a';
let b = 'bc';
obj.hasOwnProperty('x');               // true 包含
obj.hasOwnProperty('y');               // false 不包含
obj.hasOwnProperty('toString');        // false 继承属性
obj.hasOwnProperty(a + b);             // true 判断的是属性abc

in 运算符和 hasOwnProperty() 的区别就在于 in 运算符可以判断来自继承的属性,而hasOwnProperty() 不能。针对这一点在工作中加以运用还是很有帮助的。

4、propertyIsEnumerable() 是hasOwnProperty() 的增强版,这个方法的用法与hasOwnProperty()相同,但当检测属性是自有属性(非继承)且这个属性是可枚举的,才会返回true。

那么什么是可枚举属性?通俗的讲就是可以通过for...in遍历出来的属性就是可枚举属性。通常由JS代码创建出来的属性都是可枚举的。看一下代码也许更方便理解:

let obj = Object.create({x: 1});                   // 通过create()创建一个继承了X属性的对象obj
obj.propertyIsEnumerable('x');                     // false x是继承属性
obj.y = 1;                                         // 给obj添加一个自有可枚举属性y
obj.propertyIsEnumerable('y');                     // true
Object.prototype.propertyIsEnumerable('toString'); // false 不可枚举

以上四种方法,都可以判断出对象是否包含某个属性,工作中可以根据不同情况采用不同的方法。

标签:obj,undefined,几种,let,hasOwnProperty,某个,true,属性
From: https://www.cnblogs.com/HatcherBlogs/p/17855282.html

相关文章

  • python 类直接调用属性和方法
    classMyClass:class_variable="Thisisaclassvariable"@staticmethoddefstatic_method():print("Thisisastaticmethod")@classmethoddefclass_method(cls):print("Thisisaclassmethod......
  • Java Web实现文件下载的几种方式
    文件下载可以说是网站的基础功能,要实现最下载功能,有一种最基本的方法,那就是将超链接的href属性指向对应的资源文件。如下面连接指向了百度首页的图片:​ ​I'mtheindexofBaidu​​但这种方式的缺陷也是很明显的,目录信息被获取,不利于信息安全。其实信息安全还是其次,主要还是......
  • [SpringBoot][Maven]关于maven pom文件的packaging属性
    关于mavenpom文件的packaging属性前几天在调试源码运行程序的时候,因为将项目中pom文件的packaging属性用错导致源码包无法引入使用而报Bean注入错误,在此进行总结整理记录。packaging是maven的pom.xml中的一个标签,用于指定maven项目的输出格式,也就是打包类型,使用方式为:<packagi......
  • SQL提高查询性能的几种方式
    ##创建索引,提高性能索引可以极大地提高查询性能,其背后的原理:1.索引是的数据库引擎能够快速的找到表中的数据,它们类似于书籍的目录,使得你不需要逐页查找所需要的信息2.索引能够帮助数据库引擎直接定位到所需的数据,从而大大减少磁盘I/O操作,如果没有索引,SQLSERSER可能需要执行全......
  • 如何把某一列中包含某个值的所在行给删除
    大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据处理的问题,一起来看看吧。大佬们,如何把某一列中包含某个值的所在行给删除?比方说把包含电力这两个字的行给删除。这里【FANG.J】指出:数据不多的话,可以在excel里直接ctrlf,查找“电力”查找......
  • 运行python的几种方式
    通过cmd终端去运行按住win+r打开命令提示符,然后输入python,就可以进入python环境,输入你需要指定的python代码即可。#注意:这种方法只是建议临时使用一下,因为午饭保存数据。通过记事本新建一个记事本文档(后缀是否修改为.py不影响)里面输入python代码,一样通过cmd窗口去执行。......
  • # yyds干货盘点 # 大佬们,如何把某一列中包含某个值的所在行给删除
    大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据处理的问题,一起来看看吧。大佬们,如何把某一列中包含某个值的所在行给删除?比方说把包含电力这两个字的行给删除。这里【FANG.J】指出:数据不多的话,可以在excel里直接ctrlf,查找“电力”查找全部,然......
  • C#如何以“引用”传递对象的属性
    recordPerson{publicintAge;publicintHeight{get;set;}}一、声明一个Person类,它有一个字段Age和一个属性Height.二、针对字段,我们可以通过ref传递引用代码如下staticvoidModifyValue<T>(refTfield,Tvalue){field=value;}varp......
  • pgsql获取数据所有的表的字段和字段属性
    selectDISTINCTORDINAL_POSITIONasrn,table_nameas"tb_name",column_nameas"en_name",(caseudt_nameWHEN'numeric'THEN'number'WHEN'decimal'THEN'number'WHEN'int4'THEN......
  • lombok的@Data注解不想为某个字段生成getter/setter方法
    在不想添加getter的实体类字段上添加@Getter(AccessLevel.NONE),setter同理/***通话时长*/@Getter(AccessLevel.NONE)@TableField(exist=false)privateStringduration;publicStringgetDuration(){try{Longdura......