2017-09-12 3 views
2

私はNode(V8.5.0)は、このコードをどのように解釈するかの本当に驚いています:なぜNode.jsのconsole.logが変数の順列を妨げることができるのですか?

var a = 5; 
var b = 10; 

console.log('a = ' + a) 
console.log('b = ' + b) 

[a, b] = [b, a]; 

console.log(a); 
console.log(b); 

応答が

[a, b] = [b, a]; 
^

TypeError: Cannot set property '10' of undefined 
    at Object.<anonymous> (/Users/pom/lab/ES6-tests/destructuring.js:25:8) 
    at Module._compile (module.js:624:30) 
    at Object.Module._extensions..js (module.js:635:10) 
    at Module.load (module.js:545:32) 
    at tryModuleLoad (module.js:508:12) 
    at Function.Module._load (module.js:500:3) 
    at Function.Module.runMain (module.js:665:10) 
    at startup (bootstrap_node.js:201:16) 
    at bootstrap_node.js:626:3 

私はにconsole.logでのみVARを続ける場合は、表示されています正しい

console.log(a) 
console.log(b) 

[a, b] = [b, a]; 

これはどのようなことですか?

+3

それは 'キャッチされない例外TypeErrorを言う:7::で未定義 のプロパティ '10' を設定することはできません8'グーグルで私のためにクロム。 – lilezek

+0

すべてのコードをコンソールに貼り付けて全体として実行すると、TypeErrorが発生します。しかし、一度に2行ずつまとめて実行すると、エラーなしでコンパイルされます。 –

+4

すべてのセミコロンを入れても問題ありません。これは 'console.log( 'b =' + b)[a、b] = [b、a];として扱われています。 – skirtle

答えて

5

これは、おそらく解析の問題が原因で、左手側の引数が無効になった結果です。

console.logの呼び出しの後にセミコロンがないため、インタープリタが混乱し、2行のコードが連結されているように見えます。あなたはセミコロンでそれが動作していることを確認できます。

console.log("works"); 
 
var a = 5; 
 
var b = 10; 
 

 
console.log('a = ' + a); 
 
console.log('b = ' + b); 
 

 
[a, b] = [b, a]; 
 

 
console.log(a); 
 
console.log(b);

console.log("fails (with no semi-colon)"); 
 
var a = 5; 
 
var b = 10; 
 

 
console.log('a = ' + a) 
 
console.log('b = ' + b) 
 

 
[a, b] = [b, a]; 
 

 
console.log(a); 
 
console.log(b);

関連する問題