在JavaScript中,“在哪里?”;建造商;来自

在JavaScript中,“在哪里?”;建造商;来自,javascript,Javascript,下面的代码片段取自雄辩的JavaScript var noCatsAtAll = {}; if ("constructor" in noCatsAtAll) console.log("Yes, there definitely is a cat called 'constructor'."); 我觉得这很让人迷惑。为什么“if”返回true?它是对象的构造函数。对函数的引用直接在对象的属性(“构造函数”)上可用(它也适用于您编写的构造函数) 反过来,出现的属性名称是对象。对象的所有实例都有

下面的代码片段取自雄辩的JavaScript

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
`