我在javascript中玩instanceof
,我偶然发现了以下内容。
Array instanceof Object
returns true
Object instanceof Array
returns false
这里Array和Object之间有什么关系?
答案 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
为假。
这里的关键事项
Array
是对构造函数的引用,而不是实际的数组。构造函数是函数,所有函数都是对象。
实际数组是一个数组,表示它是一个对象,但不是一个函数。
在封面instanceof
下面查找对象“原型链”以查找它继承的任何构造函数。
答案 2 :(得分:0)
数组是一个对象,但对象不是数组。 Object是Javascript中的基类,如果它不是原语,那么它就是一个对象,因此数组就属于它。但当然,一个对象不一定是一个数组。
答案 3 :(得分:0)
Array(第一个大写字母)是JavaScript中所有数组的“类对象”的名称。
该“类对象”是一个对象,因此instanceof Object
为true
。
但是Object“类对象”不是数组 - Object
在其继承链中没有Array
类。