js中的属性检测,主要就是检测一个属性是否属于某个对象。常用的方式主要有3种:in、hasOwnProperty()、propertyIsEnumerable()。
in运算符
in运算符的左侧为属性名称,右侧为对象。
var obj = {
name:"Nicholas",
age: 12,
job: "Teacher"
};
console.log("name" in obj); //true
console.log("salary" in obj); //false
因为在对象obj中有name属性,所以在"name" in obj语句中的结果为true,而属性"salary"既不在对象obj中,也没有在obj继承的对象中,所以语句"salary" in obj的结果为false。
hasOwnProperty()
hasOwnProperty()是对象的一个方法,可以用来检测一个属性是否是对象的自有属性,如果是自有属性(包括内置属性和可编辑属性)就返回true,否则返回false。
var obj = {
name:"Nicholas",
age: 12,
job: "Teacher"
};
console.log(obj.hasOwnProperty("salary")); //false
console.log(obj.hasOwnProperty("name")); //true
salary不是对象obj的自有属性,所以打印出了false,而name则是obj的自有属性,所以结果就是true。
propertyIsEnumerable()
propertyIsEnumerable()是hasOwnProperty()的增强版,除了是自身属性外,还要求是可枚举属性,即我们创建的属性。
var obj = {
name:"Nicholas",
age: 12,
job: "Teacher"
};
console.log(obj.propertyIsEnumerable("name")); //true
console.log(obj.propertyIsEnumerable("salary")); //false