javascript - js一道運算題,求解~~
大家讲道理
大家讲道理 2017-05-19 10:37:30
0
5
476

"1"- -"1";

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

感謝~~

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回覆(5)
某草草

進行減法運算的時候,js會試圖把兩邊的表達式都轉成數字,讓運算得以進行(算是小小的糾錯行為),變成1-(-1),得2。
至於沒有空格報錯呢,完全就是文法錯誤。 。
而且這是錯誤不是什麼常數不常量的問題, 就算換成變數, a--b也是錯誤的語法啊, 解析器連糾錯都不知道怎麼糾, 如果給你弄成a-(-b)嗎? 那等於是直接會破壞掉--, 破壞邏輯了啊.
除非你a---b, 解析器能給你弄成(a--)-b, 但這樣的寫法也很搞笑啊,沒準你想表達的是a-(--b)呢?

解析器只會在意義(它認為)比較明確的時候,給你做一點糾正, 就像''-'' js裡只有數字支持減法運算, 所以你不是數字它會給你轉成數字, 但''+''和0+'', 這種情況它就需要根據你第一個表達式來做糾正了, 不然它哪知道你是要做拼串還是加法. 至於把--弄成- - , 那可就太惡劣了, 完全就是破壞性的糾錯, 它是肯定不能做的.

不要太糾結這種東西,娛樂性質的題目。 。真正擼代碼的時候我相信腦子正常的人都不會這麼做的

仅有的幸福
  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
Ty80

1- -1 等價於 1-(-1)

为情所困

-"1"就是一元運算,把字串轉換成-1,相對於1-(-1),得2。

如果沒有空格,解析器會報語法錯誤。

刘奇

首先有空格兩個運算子減號運算子和取負值運算,後者的運算優先權比前者高。 -「1」會發生隱式轉換成-1
再說沒有空格,那就是自減運算啊,正如@deepgoing所說「常數」是不能進行自增自減操作的

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板