函数concat和push显示的意外行为

时间:2014-03-24 16:54:14

标签: javascript arrays push concat

我在goolge控制台中测试了我的代码,发现concat()无效,如下所示:

var a = ["a"]; //undefined
a.concat("b","c"); // ["a","b","c"] 

现在,当我推送其他字符串时,该字符串将替换“b”和“c”

的索引

那是[续]

 a.push("e","f"); // 3 
 a // ["a", "e","f"]

您是否注意到按下字符串的行中的3。我觉得有趣的是,首先我们联系“b”和“c”,然后,当我尝试获得说1索引的值时,它返回undefined!然后,当我们在同一个数组中推送"e""f"时,这些字符串将替换连接字符串的索引。现在的问题是:

  

1)为什么这些concatpush函数显示出奇怪的行为?

     

2)这是否意味着cancat功能的失败?

     

3)这个contact函数是否只是名义上的?

1 个答案:

答案 0 :(得分:3)

这是对的。 Concat没有像你期望的那样修改数组。

当你:

a.concat("b","c");

它返回一个[“a”,“b”,“c”]的数组,但你没有保存引用(你会这样做)

a = a.concat("b","c");

一些信息from the MDN

  

concat不会改变这个或作为参数提供的任何数组,而是返回一个浅拷贝,其中包含从原始数组组合的相同元素的副本。