为什么将元素推入concat()返回的新数组会返回数组的大小而不是数组本身?

时间:2015-01-11 04:09:30

标签: javascript arrays concat chain

<!DOCTYPE html>
<html>
<body>

<p id="demo"></p>

<script>
var a = ['a','b'];
var b = ['c','d'];
var c = a.concat(b).push('e');
document.getElementById("demo").innerHTML = c;
</script>

</body>
</html>

这将导致数字&#39; 5&#39;而不是[&#39; a&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39; 39; d&#39;&#39; E&#39]

1 个答案:

答案 0 :(得分:1)

根据定义,push()方法返回调用该方法的对象的新length属性。

  

方法所针对的对象的新长度属性   调用。

下面,

a.concat(b) //returns an `array`. But wait, the statement still has a method chained,
            //and to be evaluated.
(returned array).push('e'); // the chained push() is invoked on the returned array.

反过来返回新形成的数组的length。 所以语句的最终返回值是数组的length,它存储在c变量中。

要通过array操作捕获返回的concat(),您可以修改代码以将链式方法分解为多个语句,如下所示:

var c = a.concat(b);
c.push('e');
console.log(c) // prints the array content.