2013-07-11 4 views
5

私は、サードパーティ製のwordpressプラグインで、javascriptコードマイナーに起因すると思われるバグを発見しました。javascriptで++の文字列とリテラルで異なるエラーが発生するのはなぜですか?

:これは、Chromeで、次のエラーになり

this.id="ui-id-"+++n; 

this.id = "ui-id-" + ++n; 

代わりに縮小されていた:

元のコードは、私は信じている、このことになりました。

Uncaught ReferenceError: Invalid left-hand side expression in postfix operation 

Firefoxでも同様のエラーが発生します。うんざりすると、Chromeでは自分のプラグインJavascriptの機能は正常に作成されましたが、Firefoxではこのエラーが原因で機能が作成されず、プラグインが失敗しました。

var n = 1; 
var foo = 10; 
var bar = "ID-"; 
console.log(foo+++n); // results in 11 
console.log(foo); // also results in 11 
console.log(bar+++n); // results in NaN soft error/warning 
console.log ("ID-"+ ++n); // results in ID-2 
console.log ("ID-"+++n); // hard error 

私はここで聞いてどのような質問は本当にわからないんだけど -

  1. なぜ+++常に+ ++として解釈されますでしょうか?
  2. このバグの原因となっているのはどのマイナーですか?
  3. FirefoxがこのエラーをChromeよりも深刻に扱うのはなぜですか、Wordpressの独自のJavaScript機能が作成されないのはなぜですか?
  4. なぜbar ++はソフトエラー(NaN)を取得しますが、 "ID - " ++はハードエラーを起こしますか?

答えて

1

質問4が唯一の興味深いものですから、私はそれに答えるだけです(1.は些細なことです:「それは言語の定義によるものです」、2.私はわかりません、 )理解していない:

答えはあなたが引用エラーである:

キャッチされないリファレンスエラー:無効な左辺式 postfixの操作で

++それは、n、操作を変更しています「左手側の表情」を消す。 barは可変なので、LHSです。"ID-"はリテラルなので、LHSではありません。

関連する問題