给定这个对象:
var myObject = {
...
};
这个方法是:
var hasProp = Object.keys(myObject).indexOf('myProp') !== -1;
等同于:
var hasProp = myObject.hasOwnProperty('myProp')
也就是说,它们总是会导致 hasProp
产生相同的值吗?
我在面试中被问到这个问题,面试官说他们会产生不同的结果,但没有给我举例。
谢谢!
最佳答案
任何不可枚举属性都会破坏这种对称性。例如,启动 Node.js 控制台或使用兼容的浏览器控制台来执行这两项操作:
Object.keys([]); // yields []
[].hasOwnProperty('length'); // yields true.
因为对于数组来说,神奇的 length
属性被标记为不可枚举。还有另一个函数可以完成所有这些操作,甚至是不可枚举的操作:
Object.getOwnPropertyNames([]) // yields [ 'length' ]
这是完全等价的。
关于javascript - JavaScript 中判断对象是否具有属性的两种方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25981728/