我想知道javascript数组如何在内部工作,我的意思是例如你创建一个新数组。
array = [1,2,3];
它在内部创建了一个新数组:array = new Array();
然后调用Array.push()
或类似的?
感谢。
答案 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的秘密。它有一整章关于数组。