奇怪的JavaScript行为

Odd javascript behavior

本文关键字:行为 JavaScript      更新时间:2023-09-26
function foo() { 
   return 1,2,3; 
}
console.log(foo()); // prints 3
console.log([].push(foo())); // prints 1

为什么会这样?

这并不奇怪。您返回的 3 被推送到 Array 中,因此 .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(),所以它将返回的数组的成员作为单独的参数传递。

,分隔的表达式列表的值是最后一个表达式的值。因此

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"。