es6怎么判断对象有没有某属性

es6怎么判断对象有没有某属性

浏览次数:3151次
信息来源: 银河系资源网
更新日期: 2022-05-13
文章简介

判断方法:1、用“对象.属性名 !== undefined”语句判断,如果返回值为true,则对象上有某属性;2、用“'属性名' in 对象”语句,如果返回true则有某属性;3、用“对象.hasOwnProperty('属性名')”语...

判断方法:1、用“对象.属性名 !== undefined”语句判断,如果返回值为true,则对象上有某属性;2、用“'属性名' in 对象”语句,如果返回true则有某属性;3、用“对象.hasOwnProperty('属性名')”语句。

本教程操作环境:windows7系统、ECMAScript 6版、Dell G3电脑。

es6判断对象有没有某属性

方法1:点( . )+ undefined判断

我们知道,通过点或者方括号可以获取对象的属性值,如果对象上不存在该属性,则会返回 undefined。这种方式可以判断指定对象的自有属性和继承属性,如果对象自身没有检测的属性,而原型链上有该属性,则会返回原型链上的属性值。

// 创建对象
let obj = {
    name: 'Scarlett',
    age: 37
}
console.log(obj.name !== undefined)  // true 自身属性存在
console.log(obj.gender !== undefined)  // false gender属性不存在

// 在原型上添加一个可枚举属性
Object.prototype.nationality = 'America'

// 在obj对象上添加一个不可枚举属性
Object.defineProperty(obj, 'occupation', {
    value: 'actress',
    enumerable: false
})

简单的,我们可以通过 Object.propertyName !== undefined 的返回值来判断对象上是否含有某属性。但有一种情况,即:属性名存在,属性值为 undefined 的情况下,就不能返回想要的结果。

// 新增一个值为undefined的属性
obj.birthday = undefined

console.log(obj.birthday !== undefined)  // false

那么,我们可以使用 in 运算符来解决这个问题。

方法2:in 运算符

该方法可以判断指定对象的自有属性和继承属性中是否存在某属性,如果存在则返回 true。 in 运算符也能检测到原型链上的属性。

'name' in obj  // true 自身属性存在
'occupation' in obj  // true 不可枚举属性存在
'nationality' in obj  // true 继承属性
'birthday' in obj  // true 值为undefined的属性

in 运算符的语法也很简单,作用范围和效果与点( . )或方括号( [ ] )相同,不同的是值为 undefined 的属性也可以正常判断。

  • 以上这两种方法的局限性就是:不能准确区分是自有属性还是原型链上的属性。如果检测自身属性是否存在时,就需要 Object.hasOwnProperty() 了。

方法3:Object.hasOwnProperty()

Object.hasOwnProperty() 用来判断指定对象自身是否含有某个属性(非继承),返回布尔值。

obj.hasOwnProperty('name')  // true 自身属性
obj.hasOwnProperty('occupation')  // true 不可枚举属性
obj.hasOwnProperty('birthday')  // true
obj.hasOwnProperty('nationality')  // false 原型链上继承的属性

该方法会过滤掉那些继承来的属性,当检测属性为自有属性时返回 true。

【:javascript教程、web前端】

以上就是es6怎么判断对象有没有某属性的详细内容

标签: 暂无标签
es6能用var声明变量吗
« 上一篇
JavaScript有命名函数吗
下一篇 »
  • jquery怎么在元素内部增加元素
    594710阅读
    方法:1、用“$(指定元素).prepend(新元素)”或“$(新元素).prependTo(指定元素)”,可在开头增加元素;2、用“$(指定元素).append(新元素)”或“$(新元素).appendTo(指定元素)”,在末尾增加元素。本教程操作环境:...
  • css怎么去除a标签鼠标样式
    296035阅读
    在css中,可用cursor属性去除a标签的鼠标样式,该属性用于定义鼠标指针在一个元素边界范围内所用的鼠标样式,属性值设置为none时,会去除元素的鼠标样式,设置为default时,显示默认箭头样式,语法为“a{cursor:none...
  • react的脚手架是什么意思
    39954阅读
    在react中,脚手架是快速生成项目工程化结构工具的意思;React脚手架能够快速开始一个React的项目,生成一个通用的目录结构,并配置所需环境,其中包含基础的依赖库,只需要利用“npm install”就能够安装,节省了项...
  • 浅析Bootstrap中列表组、分页和进度条组件的用法
    39545阅读
    Bootstrap中怎么实现列表组、分页和进度条?下面本篇文章给大家介绍一下Bootstrap中列表组、分页和进度条组件的用法,希望对大家有所帮助!列表组使用.list-group选择列表组添加.active到 a.list-group-item以指示当...
  • JavaScript有没有stl库
    10026阅读
    JavaScript没有stl库。stl库是标准模板库,是一个具有工业强度的高效的“C++”程序库,用于提供基本的语言本身的数据结构等扩展支持,stl库被容纳与“C++”标准程序库中,因此在JavaScript中没有stl库。本教程操作环...
  • es6的模块导出使用什么方法
    5519阅读
    es6的模块导出使用的方法:1、导出默认模块,一个模块文件只能有一个默认模块,语法为“export default 需要导出的成员”;2、导出普通模块,一个模块文件可以有多个普通模块,语法为“export 按需导出的成员”。本教...
  • css3新增长度单位的使用方法是什么
    4261阅读
    使用方法:1、em表示相对于当前对象内文本的字体大小;2、rem表示相对于根元素的字体大小;3、ch表示数字0的大小;4、vh表示百分比视口的高度;5、vw表示百分比视口的宽度;6、ex表示当前字体的小写x字母的的高度或者...
  • 在css3中可实现缩放效果的是什么属性
    4224阅读
    在css3中可实现缩放效果的是transform属性。transform属性可以和scaleX()函数实现水平方向的缩放效果、可以和scaleY()函数实现垂直方向的缩放效果、可和“scale(x,y)”函数实现水平方向和垂直方向同时缩放。本教程操...
  • 使用javascript:void(0)的原因是什么
    4171阅读
    使用“javascript:void(0)”的原因是:可以防止链接跳转到其他页面,保留链接的样式,并且不让链接执行实际操作。void关键字用于指定要计算一个表达式但是不返回值,“void(0)”也就表示不进行任何操作。本教程操作环...
  • jquery怎么设置文本框只读
    4071阅读
    方法:1、利用“$(input元素)”语句获取文本框元素对象;2、利用attr()方法设置文本框只读,将readonly属性值设置为readonly即可,语法为“文本框元素对象.attr("readonly","readonly")”。本教程操作环境:windows1...

如本文对您有帮助,随意赞赏一下!