"1"- -"1";
以上的運算結果是2,少掉中間的空格就會報錯,有空格,結果就為2,求大神分析下為何?
感謝~~
光阴似箭催人老,日月如移越少年。
進行減法運算的時候,js會試圖把兩邊的表達式都轉成數字,讓運算得以進行(算是小小的糾錯行為),變成1-(-1),得2。 至於沒有空格報錯呢,完全就是文法錯誤。 。 而且這是錯誤不是什麼常數不常量的問題, 就算換成變數, a--b也是錯誤的語法啊, 解析器連糾錯都不知道怎麼糾, 如果給你弄成a-(-b)嗎? 那等於是直接會破壞掉--, 破壞邏輯了啊.除非你a---b, 解析器能給你弄成(a--)-b, 但這樣的寫法也很搞笑啊,沒準你想表達的是a-(--b)呢?
解析器只會在意義(它認為)比較明確的時候,給你做一點糾正, 就像''-'' js裡只有數字支持減法運算, 所以你不是數字它會給你轉成數字, 但''+''和0+'', 這種情況它就需要根據你第一個表達式來做糾正了, 不然它哪知道你是要做拼串還是加法. 至於把--弄成- - , 那可就太惡劣了, 完全就是破壞性的糾錯, 它是肯定不能做的.
不要太糾結這種東西,娛樂性質的題目。 。真正擼代碼的時候我相信腦子正常的人都不會這麼做的
兩個-有空格的時候,被認為是減號,如 @死胖子 回答的一樣。兩邊字串會被轉成數字處理,1減-1得2;
-
兩個-没有空格,就变成了--沒有空格,就變成了--運算符,這是自減運算,只能針對變數。對一個數字應用這個符號肯定會報錯。不信可以試試
--
1-- //Uncaught ReferenceError: Invalid left-hand side expression in postfix operation --1 //Uncaught ReferenceError: Invalid left-hand side expression in postfix operation
1- -1 等價於 1-(-1)
-"1"就是一元運算,把字串轉換成-1,相對於1-(-1),得2。
如果沒有空格,解析器會報語法錯誤。
首先有空格兩個運算子減號運算子和取負值運算,後者的運算優先權比前者高。 -「1」會發生隱式轉換成-1再說沒有空格,那就是自減運算啊,正如@deepgoing所說「常數」是不能進行自增自減操作的
進行減法運算的時候,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所說「常數」是不能進行自增自減操作的