Javascript数组-它们如何在内部工作?

Javascript数组-它们如何在内部工作?,javascript,jquery,arrays,Javascript,Jquery,Arrays,我想知道javascript数组在内部是如何工作的,例如,当您创建一个新数组时 array = [1,2,3]; 它正在内部创建一个新数组:array=newarray() 然后调用Array.push()或类似命令 谢谢 然后调用Array.push()或类似的函数 否。正如您在下面的示例中所看到的,当数组初始化时,推送(覆盖)方法不会被调用 Array.prototype.push=function(){console.log(“adding”)}; var数组=[1,2,3]; //c

我想知道javascript数组在内部是如何工作的,例如,当您创建一个新数组时

array = [1,2,3];
它正在内部创建一个新数组:
array=newarray()

然后调用
Array.push()
或类似命令

谢谢

然后调用Array.push()或类似的函数

。正如您在下面的示例中所看到的,当
数组
初始化时,
推送
(覆盖)方法不会被调用

Array.prototype.push=function(){console.log(“adding”)};
var数组=[1,2,3];

//console.log(数组)了解javascript内部如何工作的最佳资源是它本身

为了理解在执行
array=[1,2,3]
操作时内部发生的情况,您需要阅读第节。大致情况下,首先创建数组对象,然后使用CreateDataProperty(section)(DefineOwnProperty)内部方法将每个元素设置为此对象

然后,您想了解当您将元素推送到数组时到底发生了什么。您可以查看此部分。在这里,您将发现它使用了完全不同的算法,即它设置了对象的特定属性(节)

因此答案是否定的,像
a=[1,2,3]
这样创建数组并不像
push
那样使用相同的机制来插入项。第一种方法大致在(新创建的)数组对象上创建新属性,
push
将属性设置为现有对象

var array = [1,2,3]; 
它不调用push,但当您事先知道元素时,它是初始化数组的一种更简单的方法

如果要添加另一个元素,可以通过多种方式进行,如:

1) 数组。推(22);//将整数22添加到数组中

2) 数组[4]=22;//将整数22添加到索引4处的数组中

您甚至可以这样做:

数组[20]=22;//这将调整数组的大小,并保持所有未初始化的元素返回未定义。因此数组[10]是未定义的,例如

如果你想知道数组的所有细节,我推荐你这本书:JavaScript忍者的秘密。它有一整章是关于数组的


你可以用谷歌搜索这些东西。看看我做的,你能告诉我一个好的来源吗?如果你真的想了解内部力学,这里是最好的资源。从开始,然后比较。您将知道问题的答案。@dfsq感谢您提供此来源!谢谢你的回答,这是我想注意的一点,但我真正想知道的是,我知道内部正在发生什么。如果我设置数组[0]=1;到底发生了什么。@Terry我发表了评论,并对此给出了明确的答案:)@Terry但我真正想知道的是,我在内部检查了这个链接,或者如果你真的想弄脏你的手,->它就在那里的某个地方……)内部发生的情况-取决于浏览器/javascript解析器实现。