1. in 运算符
如果指定的属性在指定的对象或其原型链中,则in 运算符返回true。
let obj = {
a: 1
}
console.log('a' in obj) // true 自身属性
console.log('valueOf' in obj) // true 继承方法
2. hasOwnProperty() 方法
hasOwnProperty() 方法会返回一个布尔值,指示对象自身属性中是否具有指定的属性(也就是,是否有指定的键)。
let obj = {
a: 1
}
console.log(obj.hasOwnProperty('a')) // true 自身属性
因为 javascript 没有将hasOwnProperty作为一个敏感词,所以我们很有可能将对象的一个属性命名为hasOwnProperty,这样一来就无法再使用对象原型的 hasOwnProperty 方法来判断属性是否是来自原型链。
var foo = {
hasOwnProperty: function() {
return false;
},
bar: 'Hello'
};
foo.hasOwnProperty('bar'); // 始终返回 false
不能使用 该对象.hasOwnProperty 这种方法,怎么来解决这个问题呢?我们需要使用原型链上真正的 hasOwnProperty 方法:
({}).hasOwnProperty.call(obj, 'a'); // true
// 或者:
Object.prototype.hasOwnProperty.call(obj, 'a'); // true
3. . 、[] 判断
let obj = {
a: 1
}
console.log(obj.a) // true
console.log(obj['a']) // true