搜尋

首頁  >  問答  >  主體

javascript - js一道運算題,求解~~

"1"- -"1";

以上的運算結果是2,少掉中間的空格就會報錯,有空格,結果就為2,求大神分析下為何?

感謝~~

大家讲道理大家讲道理2788 天前518

全部回覆(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
  • 取消回覆