为什么javascript会为++生成不同的字符串和文字错误?

时间:2013-07-11 10:34:03

标签: javascript

我刚刚在第三方wordpress插件中发现了一个错误,该插件看起来是由javascript代码缩小器引起的。

我相信原始代码应该是这样的:

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

相反,它被缩小为:

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

这导致Chrome中出现以下错误:

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 个答案:

答案 0 :(得分:1)

我看到问题4.唯一有趣的一个,所以我只回答(1.是微不足道的:“这是根据语言的定义”,2。我不知道,3。我不明白) :

答案在于您引用的错误:

未捕获参考错误:后缀操作中的左侧表达式无效

++正在修改操作,它需要“左手边表达”。 bar是可变的,因此它是LHS,"ID-"是文字,因此它不是LHS。