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

时间:2018-02-23 13:47:24

标签: javascript jquery arrays

我想知道javascript数组如何在内部工作,我的意思是例如你创建一个新数组。

array = [1,2,3];

它在内部创建了一个新数组:array = new Array();

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

感谢。

3 个答案:

答案 0 :(得分:2)

了解javascript内部工作方式的最佳资源是ECMAScript specification本身。

为了了解执行array = [1, 2, 3]时内部发生的情况,您需要阅读7.3.16 CreateArrayFromList (elements)部分。大致发生的事情是创建第一个Array对象,然后使用CreateDataProperty(7.3.4 CreateDataProperty section)(DefineOwnProperty)内部方法将每个元素设置为此对象。

然后,您想了解将元素推送到数组时究竟发生了什么。为此,请检查22.1.3.17 Array.prototype.push ( ...items )部分。在那里你会发现它使用了完全不同的算法,即它设置了一个对象的特定属性(7.3.3 Set (O, P, V, Throw)部分)。

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

答案 1 :(得分:0)

  

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

即可。正如您在下面的示例中所看到的那样,array初始化时push重写)方法未被调用。

Array.prototype.push = function(){ console.log("adding") };

var array = [1,2,3];

//console.log(array);

但是,在执行console语句时(在对其进行取消注释之后)调用它。

答案 2 :(得分:0)

var array = [1,2,3]; 

它不会调用push,但是当你事先知道元素时,这是一种初始化数组的简单方法。

如果您想添加其他元素,可以通过多种方式执行此操作,例如:

1)array.push(22); //将整数22添加到数组

2)数组[4] = 22; //在索引4

处向数组添加整数22

你甚至可以这样做:

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

如果您想以简单的方式了解有关数组的所有详细信息,我建议您阅读本书:JavaScript Ninja的秘密。它有一整章关于数组。

https://www.amazon.com/Secrets-JavaScript-Ninja-John-Resig/dp/1617292850/ref=sr_1_1?ie=UTF8&qid=1519484868&sr=8-1&keywords=javascript+ninja