function foo() {
return 1,2,3;
}
console.log(foo()); // prints 3
console.log([].push(foo())); // prints 1
为什么会这样?
function foo() {
return 1,2,3;
}
console.log(foo()); // prints 3
console.log([].push(foo())); // prints 1
为什么会这样?
这并不奇怪。您正在返回3
,它被推送到数组中,因此该.push()
方法返回新长度,即1
.
如果您不记录.push()
通话,而只记录foo()
通话,那么您只会看到返回的3
.
需要明确的是,当你这样做时:
return 1,2,3;
您将返回最后一个逗号运算符的结果,即最终表达式,即3
.
如果您希望将所有值推送到数组中,则需要返回一个值数组,因为 JavaScript 只允许一个返回值。
function foo(){ return [1,2,3]; }
console.log(foo()); // prints [1,2,3]
console.log([].push.apply([], foo())); // prints 3
因为我曾经.apply()
调用.push()
,所以它将返回的 Array 的成员作为单独的参数传递。
function foo(){ return 1,2,3; }
相当于
function foo(){ return 3; }
至于为什么会[].push(foo())
返回3
,只要阅读一些Array.push()
文档,应该很明显:push
返回数组的新长度。
问题 1 返回“1,2,3”不是在 javascript 中返回多个值的正确语法。您的语法似乎最终将最后一个数字“3”作为返回值传递。
var test = foo()
typeof test
"number"
有关传递多条数据的正确方法,请参阅此:在 JavaScript 中返回多个值?
问题2
console.log([].push(foo())); // prints 1
这是正确的,因为 push 返回新数组“1”的长度,因为原始函数输出单个数字“3”。