搜索

首页  >  问答  >  正文

javascript - js一道运算题,求解~~

"1"- -"1";

以上的运算结果是2,少掉中间的空格就会报错,有空格,结果就为2,求大神分析下为什么?

感谢~~

大家讲道理大家讲道理2752 天前485

全部回复(5)我来回复

  • 某草草

    某草草2017-05-19 10:39:30

    进行减法运算的时候,js会试图把两边的表达式都转成数字,让运算得以进行(算是小小的纠错行为),变成1-(-1),得2。
    至于没有空格报错呢,完全就是语法错误。。
    而且这是错误不是什么常量不常量的问题, 哪怕换成变量, a--b也是错误的语法啊, 解析器连纠错都不知道怎么纠, 如果给你弄成 a-(-b) 吗? 那等于是直接会破坏掉--, 破坏逻辑了啊.
    除非你 a---b, 解析器能给你弄成 (a--)-b, 但这样的写法也很搞笑啊, 没准你想表达的是 a-(--b)呢?

    解析器只会在意义(它认为)比较明确的时候,给你做一点纠正, 就像 ''-'' js里只有数字支持减法运算, 所以你不是数字它会给你转成数字, 但 ''+''和 0+'', 这种情况它就需要根据你第一个表达式来做纠正了, 不然它哪知道你是要做拼串还是加法. 至于 把--弄成 - -, 那可就太恶劣了, 完全就是破坏性的纠错, 它是肯定不能做的.

    不要太纠结这种东西,娱乐性质的题目。。真正撸代码的时候我相信脑子正常的人都不会这么做的

    回复
    0
  • 仅有的幸福

    仅有的幸福2017-05-19 10:39:30

    1. 两个-有空格的时候,被认为是减号,如 @死胖子 回答的一样。两边字符串会被转成数字处理, 1减-1得2;

    2. 两个-没有空格,就变成了--没有空格,就变成了--运算符,这是自减运算,只能针对变量。对一个数字应用这个符号肯定会报错。不信可以试试

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

    回复
    0
  • PHP中文网

    PHP中文网2017-05-19 10:39:30

    1- -1 等价于 1-(-1)

    回复
    0
  • 为情所困

    为情所困2017-05-19 10:39:30

    -"1"就是一元运算,把字符串转换成-1,相对于1-(-1),得2。

    如果没有空格,解析器会报语法错误。

    回复
    0
  • 怪我咯

    怪我咯2017-05-19 10:39:30

    首先有空格两个运算符减号运算符和取负值运算,后者的运算优先级比前者高。-“1”会发生隐式转换成-1
    再说没有空格,那就是自减运算啊,正如@deepgoing所说“常量”是不能进行自增自减操作的

    回复
    0
  • 取消回复