为什么hasOwnProperty(o,“dummy”)在defineProperty(o,“dummy”)之后为'false'

时间:2015-08-24 18:13:43

标签: javascript

有人能告诉我为什么'hasOwnProperty'在下面的例子中是假的,而getOwnPropertyDescriptor不是null?。

根据MDN:

http://jsfiddle.net/rr55tukb/

var _g = {};

Object.defineProperty(_g, "dummy", {
    get: function () {
        return 1
    },
    set: function () {},
    enumerable: true
});

var hasOwnProperty = Object.hasOwnProperty(_g, "dummy");
var getOwnPropertyDescriptor = JSON.stringify(Object.getOwnPropertyDescriptor(_g, "dummy"));

输出是:

hasOwnProperty=false
getOwnPropertyDescriptor={"enumerable":true,"configurable":false}

2 个答案:

答案 0 :(得分:2)

hasOwnProperty是对象本身的属性。您正在检查Object对象是否具有该属性,而不是_g对象是否具有该属性:

var hasOwnProperty = _g.hasOwnProperty("dummy");

或者:

Object.prototype.hasOwnProperty.call(_g, 'dummy')

以后更安全,因为_g在技术上可以覆盖hasOwnProperty属性。

答案 1 :(得分:0)

hasOwnProperty的语法错误。您在Object上调用它并使用两个参数调用它,因此它基本上将_g视为Object上的属性。

试试这样:

var hasOwnProperty = _g.hasOwnProperty("dummy");