判断一个对象是否包含某个属性
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
网友评论