有人能告诉我为什么'hasOwnProperty'在下面的例子中是假的,而getOwnPropertyDescriptor不是null?。
根据MDN:
defineProperty() - ...直接在对象上定义新属性...
hasOwnProperty() - ...此方法可用于确定对象是否具有指定属性作为该对象的直接属性...
getOwnPropertyDescriptor() - ...返回自己属性的属性描述符...
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}
答案 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");