11

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 の「自動セミコロン挿入」が期待どおりに機能していません。しかし、なぜ?

そのようなことを避けるためにどこでも使用することをお勧めするかもしれません;が、問題は使用する方が良いかどうかではあり;ません。ここで正確に何が起こっているのか知りたいですか?

4

4 に答える 4

7

JavaScript は、すべての改行をセミコロンとして扱いません。通常、セミコロンなしでコードを解析できない場合にのみ、改行をセミコロンとして扱います。基本的に、JavaScript は、次の非スペース文字が現在のステートメントの継続として解釈できない場合、改行をセミコロンとして扱います。JavaScript - 決定版ガイド: 第 6 版。セクション 2.4

したがって、あなたの場合、行を次のように解釈しています

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

そして、それがエラーの理由です。JavaScript は の結果に対して配列アクセスを実行しようとしていますconsole.log([a,b].length)。JavaScript エンジンと の戻り値によってはconsole.log、異なるエラーが発生する場合があります。

于 2013-05-21T08:06:47.917 に答える