前言: 检测对象是否具有某个属性分为两种情况.
1. 如果要检测从原型链上继承的属性, 则使用: in 关键字;
2. 如果不检测继承的属性, 则使用: Object.hasOwnProperty() 方法;
第一步: 使用 in 关键字
var obj = {}; // obj.name没有声明, 且原型链上也没有找到, 因此返回false "name" in obj; // false // obj没有声明 toString 方法, 但在原型链上找到了, 因此返回true "toString" in obj; // true // 为obj新增一个属性和方法 obj.name = "Lilei"; obj.sayHi = function(){console.log("Hi.")}; "name" in obj; // true; "sayHi" in obj; // true;
第二步: 使用 Object.prototype.hasOwnProperty() 方法
var obj = {}; // obj.name没有声明, 故返回false obj.hasOwnProperty("name"); // false // obj没有声明 toString 方法, 尽管在原型链上有, 但不是定义在obj上的, 因此返回false obj.hasOwnProperty("toString"); // false // 为obj新增一个属性和方法 obj.name = "Lilei"; obj.sayHi = function(){console.log("Hi.")}; obj.hasOwnProperty("name"); // true obj.hasOwnProperty("sayHi"); // true