javascript - [] 前没有分号导致 JavaScript 出错

标签 javascript arrays syntax automatic-semicolon-insertion

var a = [1, 2, 3, 4];
var b = [10, 20, 30, 40];
console.log([a, b].length)
[a, b].some(function(x) {
  x.push(x.shift())
});

今天当这段代码导致我非常惊讶

[a,b].some(function(x){ x.push(x.shift()) });
      ^
TypeError: Cannot call method 'some' of undefined

显然,JavaScript 的“自动分号插入”在这里没有按预期工作。但是为什么?

我知道你可能会建议在任何地方都使用 ; 来避免类似的事情,但问题不在于使用 ; 是否更好。我很想知道这里究竟发生了什么?

最佳答案

当我担心分号插入时,我会考虑所讨论的行之间没有任何空格的情况。在您的情况下,这将是:

console.log([a,b].length)[a,b].some(function(x){ etc });

在这里,您告诉 Javascript 引擎调用长度为 [a,b]console.log,然后查看索引 [a ,b] 该调用的结果。

console.log 返回一个字符串,因此您的代码将尝试查找未定义的该字符串的属性 b,以及对 undefined 的调用。 some() 失败。

有趣的是,假设 str 是一个字符串,str[a,b] 将解析为 str[b]。正如 Kamil 指出的那样,a,b 是一个有效的 Javascript 表达式,该表达式的结果就是 b

关于javascript - [] 前没有分号导致 JavaScript 出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16664824/

相关文章:

c++ - C++中*&类型的函数参数是什么意思?

java - '+i'在Java中是什么意思?

Javascript facebook 登录 - 安全登录的最佳方式是什么?

JavaScript 匹配数组和拼接但失败

javascript - 写入时更改输入字段值

c - 如何将十六进制字符串转换为无符号字符数组?

Javascript 到 Perl 数组/哈希转换

javascript - 覆盖 div 不会阻止在特定时间窗口中触发的下一个事件

javascript - 在 Javascript 中,如何合并对象数组?

Javascript初学者语法问题