javascript - 使用 Object.hasOwnProperty 与测试属性是否未定义的好处

标签 javascript jquery object undefined hasownproperty

由于 hasOwnProperty 有一些注意事项和怪癖(窗口/在 Internet Explorer 8 问题中的广泛使用等):

有什么理由甚至要使用它?如果只是测试一个属性是否未定义,是否更合理、更简单?

例如:

var obj = { a : 'here' };

if (obj.hasOwnProperty('a')) { /* do something */ }

if (obj.a !== undefined) { /* do something */ }
// Or maybe (typeof (obj.a) !== 'undefined')

我更愿意使用对跨浏览器最友好且最新的方法。

我还看到这个原型(prototype)被 hasOwnProperty 覆盖,它可以工作,但我不相信它的用处...

if (!Object.prototype.hasOwnProperty) {
    Object.prototype.hasOwnProperty = function(prop) {
        var proto = this.__proto__ || this.constructor.prototype;
        return (prop in this) && (!(prop in proto) || proto[prop] !== this[prop]);
    };
}

最佳答案

hasOwnProperty 不检查未定义的值。它只检查属性是否已分配给对象,即使未定义也是如此:

var obj = { a : undefined };
obj.hasOwnProperty("a") // true
obj.a === undefined     // true
obj.hasOwnProperty("b") // false
obj.b === undefined     // true

关于javascript - 使用 Object.hasOwnProperty 与测试属性是否未定义的好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17150396/

相关文章:

jquery - CSS3 过渡左不工作

javascript - 使用 javascript 构建整个网页有哪些缺点?

javascript - 数据属性小写和大写搜索

javascript - 删除帖子之间的空间 [bootstrap]

javascript - 评论展开/折叠不适用于评论 View 更多/更少

javascript - 如何始终获取 CSS 而不使用缓存副本?

javascript - 如果对象包含数组中的任何子字符串

javascript - 有什么方法可以模仿通过引用而不是值将数字传递给函数?

c++ - 两个语句 C++ 之间的区别

javascript - 删除几个节点后的 D3 SVG 过渡问题