在[]导致Javascript错误之前没有分号?

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 [a,b]将解析为str [b],假设str是一个字符串.正如卡米尔指出的那样,a,b是一个有效的Javascript表达式,该表达式的结果就是b.

翻译自:https://stackoverflow.com/questions/16664824/no-semicolon-before-is-causing-error-in-javascript

转载注明原文:在[]导致Javascript错误之前没有分号?