foo 是定义的变量,为什么会出现以下代码:
var array = [].push(foo);
输出时,等于 1 ?
从我的测试中,输出数组将只输出数组的长度
所以代码:
var array = [10,20].push(foo);
会给出 3 的值。
作为一个相关的问题(并澄清我的代码打算做什么),为什么这不直观地做它看起来做的事情,即:
var array = [];
array.push(foo);
输出数组给出 [foo] 的预期结果?
答案 0 :(得分:2)
使用push方法时,它返回数组的长度。所以当你这样做时:
var array = [10,20].push(foo);
你得到[10,20,foo]这个数组的长度是3。但正如你所说的var数组,它存储了此变量中push方法返回的长度。
答案 1 :(得分:0)
因为push的返回值是数组Documentation and examples的新长度。
在您的第二个示例中,您引用了输出数组,这将在两种情况下为您提供新数组。但是,第二种情况的返回结果也是新的数组长度
var array = [];
array.push(foo); //If you do this in the console, you'll see that 1 gets returned.
console.log(array); //While this will print out the actual contents of array, ie. foo
答案 2 :(得分:0)
Array.prototype.push()
始终返回数组中新的元素数。它不返回this
实例或新的Array实例。 push()
是一个mutator实际上改变了数组的内容。
答案 3 :(得分:0)
相反,你可以尝试
var array, foo = 30;
(array = [10,20]).push(foo);
console.log(array)
答案 4 :(得分:0)
push
是一个函数,它返回一个表示数组长度的整数。
想象一下这个函数的定义为
int push(object obj);
执行此操作时:
var array = [].push(foo);
您实际上正在运行该函数并返回该值。