Array instanceof Object
为什么是 true 呢,MDN 上说
instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。
[] instanceof Object
为 true
我能理解
Array 算是一个实例对象么? 有点没搞懂
1
nikandaoleshenme 2020-12-04 10:31:09 +08:00
万物皆对象?
|
2
VDimos 2020-12-04 10:35:52 +08:00 via Android
js 啥都是 Object,不信你看它 prototype
|
3
wunonglin 2020-12-04 10:37:20 +08:00 1
Array 本质也是个对象。。。,你可以通俗理解为
``` class Array { constructor(){} } ``` 然后根据 mdn 的解释是:JavaScript 的 Array 对象是用于构造数组的全局对象,数组是类似于列表的高阶对象。 参考: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array |
4
vision1900 2020-12-04 10:39:40 +08:00 1
JavaScript 分 2 种类型:简单类型和对象。
简单类型包括:number, string, boolean, null, undefined, 还有最近的 BigInt, Symbol 。 其他类型都是对象。Array 特殊一点,他是个构造函数又是个对象,而且是内置的。 证明是函数: typeof Array === "function" 证明是对象:其实不用证明,函数就是对象。非得证明的话,呃,你自己已经证明了:Array instanceof Object 。 建议深入了解下原型链 |
5
Reapper 2020-12-04 10:40:48 +08:00 1
Object instanceof Function, Array instanceof Function, Function instanceof Object 对象分为普通对象和函数对象
|
6
rodrick OP @nikandaoleshenme
@VDimos @wunonglin @vision1900 想起来了。。Object.prototype.toString.call(Array) => [object Function] 确实是对象,自己给自己整晕乎了。。 |
7
tabris17 2020-12-04 10:41:19 +08:00
因为 Array.__proto__.__proto__ == Object.prototype 是 true
|
8
iidear2015 2020-12-04 10:46:13 +08:00
// Object 的 prototype 属性出现在了 Array 的原型链上
Object.prototype === Array.__proto__.__proto__ // true |
9
morethansean 2020-12-04 10:54:21 +08:00 1
你自己都回答了……
Array.__proto__.__proto__ === Object.prototype 另外,MDN 中文这个实例对象是中文翻译自己加的描述,其实没有实例对象这个概念,或者说实例对象的定义就是 instanceof 的定义,那就是要么 Symbol.hasInstance 返回 true 了要么就是 constructor 的 prototype 出现在了 object 的原型链上: object instance of constructor |
10
auroraccc 2020-12-04 11:04:17 +08:00
Array 是一个函数哇,函数本身就是一个对象
|
11
rodrick OP @morethansean 对,主要是看到 MDN 的翻译说“实例对象”,个人觉得对象和实例不是一个概念,一下没反应过来,看了下英文的原文就是 object
|
12
ConnJiang 2020-12-08 20:25:29 +08:00
Array 是构造函数 函数源于对象
|