我想创建现有数组的数组,副本,但不是它的实例。我怎么能在一行中做到这一点?
array1 = new Array('orange', 'red', 'blue', 'green');
array2 = new Array.apply(this, array1);
// Uncaught TypeError: function apply() is not a constructor
答案 0 :(得分:3)
Array.prototype.slice
是您正在寻找的方法。在定义数组时,您可能还想使用文字。
var array1, array2;
array1 = ['orange', 'red', 'blue', 'green'];
array2 = array1.slice();
现在有
array1.join() === array2.join(); // true
array1 === array2; // false
答案 1 :(得分:2)
忽略new
使apply
有效(否则会被解释为new (Array.apply)(…)
)。由于Array
构造函数不需要new
并且也可以作为函数调用,因此它将如下所示:
array1 = new Array('orange', 'red', 'blue', 'green');
array2 = Array.apply(this, array1);
相关问题:Use of .apply() with 'new' operator. Is this possible?
但是,您根本不需要使用Array构造函数,尤其是因为它不适用于单数字元素数组。更好:
var array1 = ['orange', 'red', 'blue', 'green'];
var array2 = array1.slice();
答案 2 :(得分:1)
array2 = array1.slice(0);
返回一个新数组,其中包含源数组中从参数中给出的索引开始的所有项,在本例中为零,因此整个数组都是。
请注意,如果您的任何数组项本身就是对象(例如多维数组),那么新数组仍将指向这些数组的相同实例:
array1 = [1,[2,3]];
array2 = array1.slice(0);
array2[0] = 4;
array2[1][0] = 5;
// array1 is now [1,[5,3]]!
答案 3 :(得分:0)
答案 4 :(得分:0)