Das Ergebnis der obigen Operation ist 2. Wenn Sie das Leerzeichen in der Mitte weglassen, wird ein Fehler gemeldet. Wenn ein Leerzeichen vorhanden ist, lautet das Ergebnis 2. Kann jemand bitte analysieren, warum?
1-- //Uncaught ReferenceError: Invalid left-hand side expression in postfix operation
--1 //Uncaught ReferenceError: Invalid left-hand side expression in postfix operation
进行减法运算的时候,js会试图把两边的表达式都转成数字,让运算得以进行(算是小小的纠错行为),变成1-(-1),得2。
至于没有空格报错呢,完全就是语法错误。。
而且这是错误不是什么常量不常量的问题, 哪怕换成变量, a--b也是错误的语法啊, 解析器连纠错都不知道怎么纠, 如果给你弄成 a-(-b) 吗? 那等于是直接会破坏掉--, 破坏逻辑了啊.
除非你 a---b, 解析器能给你弄成 (a--)-b, 但这样的写法也很搞笑啊, 没准你想表达的是 a-(--b)呢?
解析器只会在意义(它认为)比较明确的时候,给你做一点纠正, 就像 ''-'' js里只有数字支持减法运算, 所以你不是数字它会给你转成数字, 但 ''+''和 0+'', 这种情况它就需要根据你第一个表达式来做纠正了, 不然它哪知道你是要做拼串还是加法. 至于 把--弄成 - -, 那可就太恶劣了, 完全就是破坏性的纠错, 它是肯定不能做的.
不要太纠结这种东西,娱乐性质的题目。。真正撸代码的时候我相信脑子正常的人都不会这么做的
两个
-
有空格的时候,被认为是减号,如 @死胖子 回答的一样。两边字符串会被转成数字处理, 1减-1得2;两个
-
没有空格,就变成了--
运算符,这是自减运算,只能针对变量。对一个数字应用这个符号肯定会报错。不信可以试试1- -1 等价于 1-(-1)
-"1"就是一元运算,把字符串转换成-1,相对于1-(-1),得2。
如果没有空格,解析器会报语法错误。
首先有空格两个运算符减号运算符和取负值运算,后者的运算优先级比前者高。-“1”会发生隐式转换成-1
再说没有空格,那就是自减运算啊,正如@deepgoing所说“常量”是不能进行自增自减操作的