奇怪的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"。
相关文章:
- jQuery/Javascript.toggleClass/.classList.toggle的特殊行为
- JavaScript匿名函数行为
- 通过JavaScript捕获并更改默认警报()行为
- javascript RegExp的奇怪行为:相同的正则表达式会产生不同的结果
- AJAX Post的奇怪Javascript/PHP行为
- Javascript不需要的关闭行为
- 在类外重写Javascript方法,使用默认行为
- Onenote API,从JavaScript进行PATCH时的奇怪行为
- 使用javascript的Phaser中的一个奇怪行为
- 无法解释的JavaScript行为-错误
- coffescript/javascript函数数组的行为真的很奇怪
- 在文本区域禁用javascript定义的keydown事件并恢复默认行为
- Javascript的行为与PHP包含文件不一致
- Javascript赋值运算符的奇怪行为
- 更改javascript中的tab键行为
- 奇怪的设置超时行为Javascript
- 奇怪的if-else行为Javascript
- 奇怪的行为javascript regexp
- 数组在双循环中的奇怪行为- JavaScript
- 奇怪的返回提交行为JavaScript