为什么Array instanceof Object?

时间:2014-10-06 18:36:51

标签: javascript

我在javascript中玩instanceof,我偶然发现了以下内容。

Array instanceof Object
returns true

Object instanceof Array
returns false

这里Array和Object之间有什么关系?

4 个答案:

答案 0 :(得分:8)

在构造函数之间,关系或prototype chain是:

Array -> Function.prototype -> Object.prototype
Object -> Function.prototype -> Object.prototype

第一个是true,因为构造函数是Function,函数本身就是对象。

Array instanceof Function // true
Object instanceof Function // true

(function () {}) instanceof Object // true

答案 1 :(得分:1)

您正在测试Array构造函数。 Array构造函数是用于创建数组的函数。所以Array instanceof Function为真,Array instanceof Object为真(因为所有JS对象都继承自Object原型。但由于这是构造函数,因此实际数组Array instanceof Array不是假的。

Object是Object构造函数,所有对象都继承自该构造函数。由于它仍然是一个函数Object instanceof Function,因此Object instanceof Object

这些都不是你真正意义上的(我认为)要测试的。我们可以测试一个实际的数组(而不是构造函数)

并将[] instanceof Array[] instanceof Object设为true(而[] instanceof Function为false)。这是因为所有数组都是数组,所有数组都是对象,但数组不是函数。

我们也可以测试一个对象并获得

{} instanceof Object为真,但{} instanceof Array{} instanceof Function为假。

这里的关键事项

  1. Array是对构造函数的引用,而不是实际的数组。构造函数是函数,所有函数都是对象。

  2. 实际数组是一个数组,表示它是一个对象,但不是一个函数。

  3. 在封面instanceof下面查找对象“原型链”以查找它继承的任何构造函数。

答案 2 :(得分:0)

数组是一个对象,但对象不是数组。 Object是Javascript中的基类,如果它不是原语,那么它就是一个对象,因此数组就属于它。但当然,一个对象不一定是一个数组。

答案 3 :(得分:0)

Array(第一个大写字母)是JavaScript中所有数组的“类对象”的名称。 该“类对象”是一个对象,因此instanceof Objecttrue

但是Object“类对象”不是数组 - Object在其继承链中没有Array类。