var foo = {};
foo.bar = undefined;
console.log("bar" in foo);
console.log(typeof foo["bar"] !== "undefined");
var Con = function() {};
Con.prototype.bar = undefined;
var foo = new Con;
console.log("bar" in foo);
console.log(typeof foo["bar"] !== "undefined");
in
检查与使用for in
循环并在for in
循环中有key
时返回true是相同的。
[编辑]没有看到您的“不明确将其设置为undefined
”条件。
var foo = {}
Object.defineProperty(foo, "bar", {
"value": 42,
"enumerable": false
});
console.log("bar" in foo);
console.log(typeof foo["bar"] !== 'undefined');
我其实预期如果将in
测试设置为非枚举,它会失败。看起来它们是相同的。
var foo = {}
Object.defineProperty(foo, "bar", {
"value": 42,
"writable": false
});
console.log("bar" in foo);
console.log(typeof foo["bar"] !== 'undefined');
如果属性是“只读”,那么这两个测试仍然有效。
var foz = {}
Object.defineProperty(foz, "bar", {
"value": 42
});
var foo = Object.freeze(foz);
console.log("bar" in foo);
console.log(typeof foo["bar"] !== 'undefined');
冻结对象也不会破坏测试。
foo.hasOwnProperty('bar')
怎么样? - gen_Ericin
操作符,是吧? - Šime Vidas[[HasProperty]]
是基于[[GetProperty]]
而非[[GetOwnProperty]]
定义的。 - Pointynull
,但不是“未定义”。 - Pointy