概述
javascript对象可以看做属性的集合,我们经常会检测集合中成员的所属关系----判断某个对象是否存在某属性(成员变量或方法)。我们可以通过in运算符,hasOwnPreperty和propertyIsEnumerable()方法来检测。
in运算符
书写格式为:属性(字符串) in 对象。该检测会检测对象自由属性,以及继承属性。
var a={x:''}; var x='x' in a; //x=>true var y='y' in a; //y=>false var t='toString' in a; t=>true
a继承自object类并存在自有属性x,所以x=true,y=false。因为所有类继承自object所以a会存在object中的toString方法,所以t=true.
hasOwnProperty方法
书写格式为对象.hasOwnProperty(属性名),其中该方法为in运算符不同,他会将继承属性刨除在外
a继承自object类并存在自有属性x,所以x=true,y=false。因为toString为父类方法,则t返回falsevar a={x:''}; var x=a.hasOwnProperty("x"); //x=>true var y=a.hasOwnProperty("y"); //y=>false var t=a.hasOwnProperty("toString"); //t=>false
!==undefined
书写可是为 对象.属性!==undefined,但其中也会存在一些局限性,该方法无法区分存在属性但属性值为undefined和不存该属性。
var a={x:undefined}; var x1=a.x!==undefined; //x1=>false 属性存在但值为undefined var x2="x" in a; //x2=>true 属性存在 delete a.x; var x3= 'x' in a;//x3=>false 属性不存在 var y1=a.y!==undefined; //y1=>fasle 属性不存在 var y2='y' in a; //y2=>false 属性不存在