字符串上的JavaScript增量一元运算符(+;+;)

字符串上的JavaScript增量一元运算符(+;+;),javascript,specifications,Javascript,Specifications,我使用的是基于Ubuntu的Chromium版本53.0.2785.143,运行于Ubuntu 16.04(64位) 根据前缀,前缀增量运算符的计算如下: 考虑到这一点,我无法解释这一结果: ++'1'; > Uncaught ReferenceError: Invalid left-hand side expression in prefix operation 当以下代码像符咒一样工作时: var x = '1'; ++x; > 2 据我所知,在这两种情况下,第二步的前3

我使用的是基于Ubuntu的Chromium版本53.0.2785.143,运行于Ubuntu 16.04(64位)

根据前缀,前缀增量运算符的计算如下:

考虑到这一点,我无法解释这一结果:

++'1';
> Uncaught ReferenceError: Invalid left-hand side expression in prefix operation
当以下代码像符咒一样工作时:

var x = '1'; 
++x;
> 2
据我所知,在这两种情况下,第二步的前3个要点都是正确的,而对于
++'1'
情况,第四个要点也是正确的(但为什么?),对于
++x
情况,它是错误的,不会产生错误。我说得对吗


PS:Firefox抛出了一个
语法错误:无效的增量操作数
而不是
引用错误

问题是
++
操作符隐式地包含了一个赋值,并且不能为字符串常量赋值。注意

++2;

由于同样的原因,它也是错误的。

在我的理解中,
++
类似于
+=1


因此,它将适用于
++x
,因为它将被计算为
x++=1
x=x+1
,但是
++'1'
是一个字符串文字,并且没有可分配的左侧值,因此它将失败

如果您执行++1,顺便说一句
PutValue('1',2),则会得到相同的错误
引发错误,因为它无法分配给字符串文字。您需要一个变量或其他类型的
引用
…这可能发生在
5中。调用PutValue(expr,newValue)
?噢。。我错过了。谢谢你的回答!您甚至可以直接执行
'1'=Number('1')+1
,并将得到相同的错误,因为左侧的值无效。不能将
'1'
作为变量名Oh。。我错过了。谢谢你的回答!