Difference between using X.push(?) or X[index] =?



我想在javascript中创建一个已知长度的array (X)。 使用X.push(??)X[index] = ??填充数组有什么区别?结果似乎是一样的,但有什么区别吗?

编辑:感谢您的回复。我可能应该更具体地查询差异。 当使用 X.push 函数(添加到数组的末尾(时,与为非常大的数组分配空间并仅将索引设置为值相比,使用非常大的数组执行此操作时,内存/时间方面是否存在任何问题?

在 X.push(( 中,你不必担心索引。push(( 函数将自动将元素从索引 0-n 位置串行推送。 但是在 X[index] 中,您需要专门定义需要将值放入数组中哪个索引的索引。

通过使用X[index]= ??

每次需要分配仓位索引值时

在此作业中X.push(??)

无需担心索引的位置。 我们可以直接分配数据元素

99% 的时间用于将新元素添加到您使用 push 的数组中。

通常你不会用 x[index] 添加元素,这会弄乱数组上的自然序列。

大多数时候,当您编辑或获取数组的特定元素时使用 x[index],例如在函数上传递索引

function doSomethingWithSpecificElement(index){
//x[index] usage (edit or anything)
}

当我们编写X[index]=时,意味着我们为特定索引设置了一个值。 当我们写X.push(??)意味着我们放置没有已知位置的值

这里有很多东西。让我们在这里谈谈第一种情况,即X[index] = 'something';

在这里,您可以提及index,它将在数组的特定索引中分配值。但这里有一个问题。例如,考虑以下代码

var t = ['hello'];
t[21] = ['world'];

虽然你会假设数组中只有两个元素,但它只会返回你2作为长度,相反,这将返回22因为它在 0 到 20 之间创建空数组元素。

此外,如果您传递了错误的索引,如果该索引中有任何索引,它将覆盖该值。


如果使用.push()则如果要将元素推送到数组的末尾,则无需指定任何索引。它知道长度,并将新元素附加到数组的末尾。但是你在这里无能为力。它将始终将新元素推送到数组的末尾。同样,如果要将元素附加到数组的开头,可以使用.unshift()

这将取决于index的精确值。

使用array.push(value);时,该值将附加到数组的末尾,而不会更改数组中的其他值。结果类似于使用array[array.length] = value;

var X = [ 1 ];
X.push(2);       // `length` becomes 2; 2 appended after 1
console.log(X);  // [ 1, 2 ]
X[X.length] = 3; // `length` becomes 3; 3 appended after 2
console.log(X);  // [ 1, 2, 3 ]

除此之外,array[index] = value;为特定索引(属性(赋值,无论它是否已经具有值:

X[0] = 99;      // `length` still 3; 1 replaced
console.log(X); // [ 99, 2, 3 ]
X[4] = 77;      // `length` becomes 5; gap created at 4th
console.log(X); // [ 99, 2, 3, undefined, 77]

无论哪种情况,数组的length都将根据需要增加,以在最大索引上保持 1。

相关内容

最新更新