function foo() {
return 1,2,3;
}
console.log(foo()); // prints 3
console.log([].push(foo())); // prints 1
为什么会这样?
答案 0 :(得分:6)
这并不奇怪。您将返回3
,它将被推送到数组中,因此.push()
方法返回新的长度,即1
。
如果您不记录.push()
来电,只记录foo()
来电,那么您只是看到了返回的3
。
要清楚,当你这样做时:
return 1,2,3;
你要返回最后一个逗号运算符的结果,这是最后一个表达式,3
。
如果您希望将所有值都推送到Array中,则需要返回一个值数组,因为JavaScript只允许一个返回值。
function foo(){ return [1,2,3]; }
console.log(foo()); // prints [1,2,3]
console.log([].push.apply([], foo())); // prints 3
因为我使用.apply()
来调用.push()
,所以它将返回的数组的成员作为单独的参数传递。
答案 1 :(得分:3)
The value of a list of expressions separated by ,
is the value of the last expression.因此,
function foo(){ return 1,2,3; }
相当于
function foo(){ return 3; }
至于为什么[].push(foo())
会返回3
,只需阅读some Array.push()
documentation,这应该是显而易见的:push
会返回数组的新长度。
答案 2 :(得分:1)
问题1 返回“1,2,3”不是在javascript中返回多个值的正确语法。您的语法似乎最终将最后一个数字“3”作为返回值。
var test = foo()
typeof test
"number"
请参阅此处了解传递多个数据的正确方法:Return multiple values in JavaScript?
问题2
console.log([].push(foo())); // prints 1
这是正确的,因为push返回新数组“1”的长度,原因是原始函数输出单个数字“3”。