5 votes

Pourquoi javascript produit-il des erreurs différentes pour les chaînes de caractères et les littéraux avec ++ ?

Je viens de découvrir un bug dans un plugin wordpress tiers qui semble avoir été causé par un mineur de code javascript.

Le code original, je crois, était censé être le suivant :

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

Au lieu de cela, elle a été réduite à :

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

Cela entraîne l'erreur suivante dans Chrome :

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

Et une erreur similaire dans Firefox. Curieusement, dans Chrome, les fonctions Javascript de mes propres plugins ont été créées avec succès, mais dans Firefox, cette erreur a empêché la création de mes fonctions et fait échouer mon plugin.

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

Je ne suis pas vraiment sûr de la question à poser ici -

  1. Pourquoi +++ est toujours interprété comme ++ + ?
  2. Quels minifieurs provoquent ce bogue ?
  3. Pourquoi firefox traite-t-il cette erreur plus sérieusement que Chrome et provoque-t-il l'échec de la création de mes propres fonctions javascript dans Wordpress ?
  4. Pourquoi bar++ obtient-il une soft error (NaN) mais "ID-"++ une hard error ?

1voto

Je vois la question 4. comme la seule intéressante, donc je réponds seulement que (1. est triviale : "c'est que par définition du langage", 2. je ne sais pas, 3. je ne comprends pas) :

La réponse se trouve dans l'erreur que vous citez :

Uncaught Référence Erreur : Invalide expression du côté gauche dans l'opération postfix

++ est une opération de modification, elle nécessite une "expression du côté gauche". bar est variable, il s'agit donc de la LHS, "ID-" est un littéral, ce n'est donc pas un LHS.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X