JavaScript学习笔记

JavaScript学习笔记7_对象_2对象属性

2019-11-13  本文已影响0人  菜出意料

属性检测

JavaScript对象是属性的集合,我们经常需要判断某个属性是否存在于某个对象中。JavaScript提供了in运算符、hasOwnProperty()和propertyIsEnumerable()方法来完成属性的检测。

in运算符

in运算符可以检测对象的自由属性或继承属性中是否包含某个属性,如果包含该属性返回true,否则返回false。

语法

in运算符的左侧是属性字符串 ,右侧是对象

var p = {x: 1, y: 2}
'x' in p // true
'toString' in p // true继承自Object
'z' in p // false 自有属性中没有z属性

hasOwnProperty方法

对象的hasOwnProperty()用来检测指定属性名是否为对象的自有属性。是自有属性返回true,否则返回false。

语法

方法参数为属性名字符串,返回值为boolean。

var p = {x: 1, y: 2}
var p1 = Object.create(p)
p1.z = 3
p1.hasOwnProperty('x') // false,x为继承来的属性,不是自有属性
p1.hasOwnProperty('z') // true

和propertyIsEnumerable方法

对象的propertyIsEnumerable()用来检测指定自有属性是否是可枚举的。 PS:继承的属性都是不可枚举的。

语法

p1.propertyIsEnumerable('x') // false,x为继承来的属性,不是自有属性
p1.propertyIsEnumerable('z') // true

属性遍历

除了检测属性是否存在之外,我们还会经常遍历对象的属性。常用的属性遍历方式有for/in循环遍历、Object.keys()和Object.getOwnPropertyNames()。es6增加的另外两种遍历方法Object.getOwnPropertySymbols()、Reflect.ownKeys()不做讲解。

for/in循环遍历

for/in可以在循环体中遍历对象的所有(包括自有属性和继承属性)可枚举的属性,并把属性赋值给循环变量。

语法

var o = {x: 1, y: 2, f: function(){}}
for (var k in o) {
    console.log(k) // 循环输出x, y, f
}

Object.keys()

Object.keys返回一个数组,包括对象自身的(不含继承的)所有可枚举属性的属性名。

语法

var o = {x: 1, y: 2, f: function(){}}
console.log(Object.keys(o)) // 输出 [ 'x', 'y', 'f' ]

Object.getOwnPropertyNames()

返回一个数组,包含对象自身的所有属性的属性名。

语法

var o = {x: 1, y: 2, f: function(){}}
console.log(Object.getOwnPropertyNames(o)) // 输出 [ 'x', 'y', 'f' ]
上一篇 下一篇

猜你喜欢

热点阅读