在Javascript

时间:2015-04-23 20:01:55

标签: javascript

在下面的示例中,根据我发送的第一个应用

的参数,我会得到不同的结果

代码是:

var fruitarray = [];
fruitarray[0] = ['strawberry', 'orange'];
fruitarray[1] = ['lime', 'peach', 'banana'];
fruitarray[2] = ['tangerine', 'apricot'];

var array1= fruitarray.concat.apply([], fruitarray); // in this case array1 is 'tangerine'

var array2= fruitarray.concat.apply('undefined', fruitarray); // in this case array2 is 'banana'

var array3= fruitarray.concat.apply(fruitarray , fruitarray); // in this case array3 is 'lime'

var array4= fruitarray.concat.apply(this, fruitarray); // in this case array3 is 'banana'

为什么?

****编辑:*****

对不起!!!

这是代码:

var fruitarray = [];
fruitarray[0] = ['strawberry', 'orange'];
fruitarray[1] = ['lime', 'peach', 'banana'];
fruitarray[2] = ['tangerine', 'apricot'];

var array1= fruitarray.concat.apply([], fruitarray); 
console.log(array1[5]); // 'tangerine'

var array2= fruitarray.concat.apply('undefined', fruitarray);
console.log(array2[5]); // 'banana'

var array3= fruitarray.concat.apply(fruitarray , fruitarray);
console.log(array3[5]); // 'lime'

var array4= fruitarray.concat.apply(this, fruitarray);
console.log(array4[5]); // 'banana'

我正在使用Firebug 2.0.9进行测试(Firefox)

1 个答案:

答案 0 :(得分:0)

因为不同的参数产生不同的输出!

数组this函数的concat参数不会被忽略,而是表示连接到的数组。你从fruitarray.concat.apply(…得到了这个功能并不重要,你也可以选择Array.prototype.concat.apply(…[].concat.apply(…

那么你现在如何得到这些结果?

fruitarray.concat.apply([], fruitarray);
// is equivalent to
[].concat(['strawberry', 'orange'], ['lime', 'peach', 'banana'], ['tangerine', 'apricot']);
// and gives for array1
['strawberry', 'orange', 'lime', 'peach', 'banana', 'tangerine', 'apricot']

fruitarray.concat.apply(fruitarray, fruitarray);
// is equivalent to
fruitarray.concat(['strawberry', 'orange'], ['lime', 'peach', 'banana'], ['tangerine', 'apricot']);
// and gives for array3
[[…], […], […], 'strawberry', 'orange', 'lime', 'peach', 'banana', 'tangerine', 'apricot']

现在,如果传递的不是数组(例如字符串或Window对象),会发生什么?事物被简单地包装成连接的单个数组,而不是传播。

fruitarray.concat.apply('undefined', fruitarray);
// is equivalent to
['undefined'].concat(['strawberry', 'orange'], ['lime', 'peach', 'banana'], ['tangerine', 'apricot']);
// and gives for array2
['undefined', 'strawberry', 'orange', 'lime', 'peach', 'banana', 'tangerine', 'apricot']

fruitarray.concat.apply(this, fruitarray);
// is equivalent to
[this].concat(['strawberry', 'orange'], ['lime', 'peach', 'banana'], ['tangerine', 'apricot']);
// and gives for array4
[{window}, 'strawberry', 'orange', 'lime', 'peach', 'banana', 'tangerine', 'apricot']