Javascript学习笔记——6.4 检测属性

判断一个对象是否包含某个属性

in运算符

左侧是属性名(字符串),右侧是对象

var o ={x:1}
'x' in o //true
'y' in o //false
'toString' in o //true o继承了toString

hasOwnPreperty()

判断是否有自有属性

var o ={x:1}
o.hasOwnProperty('x') //true
o.hasOwnProperty('y') //false
o.hasOwnProperty('toString') //false,toString是继承属性

propertyIsEnumerable()

必须是自有属性而且是可以枚举的,才返回true。

Object.prototype.propertyIsEnumerable('toString') //false,不可枚举
var o = Object.create({x:1})
o.propertyIsEnumerable('x') //false 继承属性
o.y = 2
o.propertyIsEnumerable('y') //true

与undefined比较

访问不存在的属性会返回undefined,可以利用这一点来判断属性是否存在,注意要用!==

var o = {x:1}
o.x !== undefined //true o包含属性x
o.y !== undefined //false o不包含属性y
o.toString !== undefined //true o继承toString

但有一个场景无法使用这种方式,就是对象的属性的值本身就是undefined

var o = {x:undefined}
o.x !== undefined //false 但是o包含属性x

你可能感兴趣的:(Javascript学习笔记——6.4 检测属性)