2013-07-11 7 views
5

Właśnie odkryłem błąd w pluginowej wtyczce 3rd party, która wygląda na to, że została spowodowana przez minifier kodu javascript.Dlaczego javascript generuje różne błędy dla łańcuchów i literałów z ++?

Oryginalny kod, moim zdaniem, miało być to:

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

Zamiast tego został minified do:

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

Wynika to w następujący błąd w Chrome:

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

Podobny błąd w Firefoksie. Irytująco, w Chrome moje własne wtyczki funkcje JavaScript wciąż były tworzone poprawnie, ale w Firefoksie ten błąd spowodował, że moje funkcje nie zostały utworzone, a moja wtyczka zawiedzie.

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 

Nie jestem pewien, jakie pytanie zadać tutaj -

  1. Dlaczego +++ zawsze się interpretować jako ++ +?
  2. Jakie minifiery powodują ten błąd?
  3. Dlaczego Firefox traktuje ten błąd bardziej poważnie niż Chrome i powoduje, że moje własne funkcje javascript w Wordpress nie zostaną utworzone?
  4. Dlaczego bar ++ otrzymuje miękki błąd (NaN), ale "ID -" ++ dostaje poważny błąd?

Odpowiedz

1

Widzę pytanie 4. jedyne interesujące, więc odpowiadam tylko na to (1. jest banalne: "to z definicji języka", 2. nie wiem, 3. robię nie rozumiem):

odpowiedź tkwi w błędzie przytoczyć:

Uncaught referencyjny błąd: Nieprawidłowa ekspresja strona lewa w pracy postfix

++ modyfikuje działanie, to n "wyrażenie po lewej stronie". bar jest zmienna, więc jest LHS, "ID-" jest dosłownym, więc nie jest LHS.

Powiązane problemy