奇怪的JavaScript行为

Mer*_*ith -3 javascript function return-value

function foo() { 
   return 1,2,3; 
}

console.log(foo()); // prints 3
console.log([].push(foo())); // prints 1
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

Blu*_*ies 6

这并不奇怪.你正在返回3,它被推入数组,所以该.push()方法返回新的长度,即1.

如果您不记录.push()呼叫,只记录foo()呼叫,那么您只是看到返回的呼叫3.

要清楚,当你这样做:

return 1,2,3;
Run Code Online (Sandbox Code Playgroud)

你将返回最后一个逗号运算符的结果,这是最后一个表达式,即3.


如果您希望将所有值都推送到Array中,则需要返回一个值数组,因为JavaScript只允许一个返回值.

function foo(){ return [1,2,3]; }

console.log(foo()); // prints [1,2,3]
console.log([].push.apply([], foo())); // prints 3
Run Code Online (Sandbox Code Playgroud)

因为我曾经.apply()调用过.push(),所以它将返回的Array的成员作为单独的参数传递.

  • @Meredith:不,数字"3"被推入数组.但`.push()`方法返回新的长度. (4认同)