在JavaScript中,“在哪里?”;建造商;来自
下面的代码片段取自雄辩的JavaScript在JavaScript中,“在哪里?”;建造商;来自,javascript,Javascript,下面的代码片段取自雄辩的JavaScript var noCatsAtAll = {}; if ("constructor" in noCatsAtAll) console.log("Yes, there definitely is a cat called 'constructor'."); 我觉得这很让人迷惑。为什么“if”返回true?它是对象的构造函数。对函数的引用直接在对象的属性(“构造函数”)上可用(它也适用于您编写的构造函数) 反过来,出现的属性名称是对象。对象的所有实例都有
var noCatsAtAll = {};
if ("constructor" in noCatsAtAll)
console.log("Yes, there definitely is a cat called 'constructor'.");
我觉得这很让人迷惑。为什么“if”返回true?它是
对象的构造函数。对函数的引用直接在对象的属性(“构造函数”)上可用(它也适用于您编写的构造函数)
反过来,出现的属性名称是对象。对象的所有实例都有一个构造函数
属性,该属性指定构造对象原型的函数
中的操作符查看所有属性,包括继承的属性。如果只想查看对象本身的属性,可以使用hasOwnProperty
:
var a = {};
"constructor" in a; // true
a.hasOwnProperty("constructor"); // false
请注意,当
中的操作符看到“constructor”
时,for(输入a)
循环不会看到。这是因为“constructor”
属性是不可枚举的。JavaScript对象有一个名为constructor
的函数,它是创建对象实例的函数。它内置于所有对象中。
操作符中的测试字典实例中是否存在所谓的“构造函数”,因此它返回true。例如,如果测试长度
,也会发生同样的情况。构造函数
是对象
的一种方法。您可以在所有对象中找到构造函数
方法,除非您修改它。中的操作员将通过原型链找到方法。这就是为什么建议使用hasOwnProperty
测试您自己对象中的属性
var noCatsAtAll = {};
if ("constructor" in noCatsAtAll)
console.log("Yes, there definitely is a cat called 'constructor'.");
if ('constructor' in Object)
console.log("Yes, there is also a method called constructor");
var noCon = Object.create(null); // create a completetly empty object
console.log('constructor' in noCon); // false
function hasConstructorToo() {}
console.log('constructor' in hasConstructorToo) // true
console.log('constructor' in []); // true
`