Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么Array.prototype是数组?_Javascript_Prototype - Fatal编程技术网

Javascript 为什么Array.prototype是数组?

Javascript 为什么Array.prototype是数组?,javascript,prototype,Javascript,Prototype,我认为每一个原型都应该是一个物体 为什么? Array.isArray(Array.prototype)//true 不解释任何内容尝试在javascript控制台中键入以下内容: typeof Array.prototype Array.prototype实际上是一个数组。这在本页上有详细说明 这可能与以下事实有关:[]是数组的缩写 所以Array.prototype指向[]。 Array.prototype.constructor指向函数数组(){[native code]} [].con

我认为每一个原型都应该是一个物体

为什么?

Array.isArray(Array.prototype)//true


不解释任何内容

尝试在javascript控制台中键入以下内容:
typeof Array.prototype

Array.prototype
实际上是一个数组。这在本页上有详细说明

这可能与以下事实有关:
[]
数组
的缩写

所以
Array.prototype
指向
[]
Array.prototype.constructor
指向
函数数组(){[native code]}

[].constructor
还指向
函数数组(){[native code]}

因此,猜测一下,它是这样做的,这样您就可以交互地使用
数组
[]


我不确定这是什么原因,但这是我最好的猜测。

你认为每个原型都是一个
对象的假设是不正确的

console.log(String.prototype)
console.log(Number.prototype)
console.log(Boolean.prototype)
console.log(Array.prototype)
console.log(Object.prototype)
输出:

String {}
Number {}
Boolean {}
[]
Object {}
来自(矿山)

数组原型对象的[[Prototype]]内部属性的值是标准内置对象Prototype对象(15.2.4)

数组原型对象本身就是一个数组;它的[[Class]]是“数组”,它有一个长度属性(其初始值为+0)和15.4.5.1中描述的特殊[[DefineOwnProperty]]内部方法


数组是objects@Quentin然后呢?如果你说“对象是数组”,这是有意义的,否则我会说数组是数组。它的原型是一个数组,问题出在哪里?@VladimirStarkov-所有数组都是对象。并不是所有的对象都是数组。看看你的答案nothing@VladimirStarkov我已经修好了。现在它解释了一些事情。我从一开始就应该这么做。谢谢你打电话给我,让我给出一个真实的答案。我很奇怪“这一页上有详细说明”等于“鲜为人知的事实:”嗯。。这在页面上有详细说明。没有理由感到奇怪。是的,但没有解释为什么如此。这是事实,但为什么呢?@VladimirStarkov,因为这是规范规定的。问你一个问题,为什么不呢?为什么你希望它是
对象
?你能给我一个到这个规范的链接吗?@Stijn因为如果它不是数组,而只是一个对象,那么它就不会那么容易混淆了,这是有原因的。那些家伙不会仅仅因为“为什么他妈的不呢?”,就到处设计东西。不过这不是特定于数组的,函数也是这样。在规范中,原因是:函数原型对象被指定为函数对象,以确保与ECMAScript 2015规范之前创建的ECMAScript代码兼容。(这也适用于数组)这就是原因。然而,这引出了另一个原因,“为什么在ECMAScript 2015规范之前创建的ECMAScript代码将Function.prototype作为空函数?”。真的很令人失望,事情应该更清楚。