javascript - JavaScript 中判断对象是否具有属性的两种方法

标签 javascript

给定这个对象:

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/

相关文章:

javascript - 将滚动条的宽度添加到窗口宽度

javascript - jQuery .html() 参数

Javascript GetElementsByClassName 变量位置

javascript - 如何访问 Collection View (或布局)的 templateHelper 中的特定模型?

javascript - 无法访问 aspx 页面中 javascript 中的代码隐藏变量

javascript - 保留时间但转换到另一个时区

javascript - 使用正则表达式在 JavaScript 中的每一行的开头添加一个字符

javascript - 如何将屏幕位置转换为等距位置

javascript - CSS 旋转和平移变换给出意想不到的结果

javascript - 使用复选框更新每个动态行的状态