【问题标题】:Unexpected behavior shown by the function concat and push函数 concat 和 push 显示的意外行为
【发布时间】:2014-03-24 16:54:14
【问题描述】:

我在 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) thiscontact 函数是否仅用于标称?

【问题讨论】:

  • .concat() 不会改变原始文件。它创建了一个新数组。当您对本机方法有疑问时,请阅读文档。 MDN .concat()
  • 你想要 push(),而不是 concat()
  • 介意选择答案吗? :)
  • 也感谢你@Montagist

标签: javascript arrays push concat


【解决方案1】:

这是正确的。 Concat 不会像您期望的那样修改数组。

当你:

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

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

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

一些信息from the MDN:

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-07-30
  • 2022-01-05
  • 1970-01-01
  • 2017-11-18
  • 1970-01-01
  • 1970-01-01
  • 2017-08-16
相关资源
最近更新 更多