1樓:Ahonn
字串轉換為數字的方式有:
- 前置 + 操作符
- Number()
- parseInt()
- parseFloat()
排除 parseInt() 和 parseFloat(),原因是這兩個函式會轉換 "123a" 這種字串為 123,而 "123a" == 123 肯定不會返回 true。
我找到 ECMA 中對前置 + 操作符和 Number() 的描述:
- ECMAScript Language Specification - ECMA-262 Edition 5.1
- ECMAScript Language Specification - ECMA-262 Edition 5.1
兩者都會呼叫乙個 toNumber() 的抽象方法進行轉換。
通過搜尋發現 What's the significant use of unary plus and minus operators? 中高票回答中說:
The Unary + is equivalent to the Number() constructor called as a function, as implied by the spec.
所以可以認為前置 + 操作符等價於 Number()。
在瀏覽器中檢視 Number:
function
Number
()而重寫 Number() 函式之後進行字串與數字比較的操作的時候並沒有得到預期的結果。
所以是否可以認為進行字串與數字比較時,字串轉換為數字執行的操作是前置 + 操作符(內部的 toNumber() 方法)?
而其內部的實現實際上與 Number() 相同,但我們無法重寫它。這樣使得字串與數字做比較的時候即使 Number() 被意外重寫也不會發生錯誤?
最後僅為查閱資料後實踐得出的猜測,希望有大牛來解答...
JS中 有關運算的問題?
冴羽 原本以為是道簡單的題目,越想越複雜,嚇得我捧上了規範 根據規範的意思,var a a 其實是先執行加1操作,再執行的賦值操作,只是a 返回的是舊值。這也就是說其實a已經增加到了6,只是a沒有想到又把舊值5賦給了a,所以最終的結果就是a等於5 smallcold 此題考查運算子優先順序和表示式返...
js很奇怪的問題,關於加法運算的問題?
規則是下面這樣的,另外加上 Number 這樣的強制轉換成number就能得到結果了。至於為什麼會這樣你應該深入了解組織。 小炒黃牛肉 1 2 轉成數字2,所以1 2 等於3 2 1 空格 字串 1轉字串所以等於 1 3 1 空字串轉成數字0 所以等於1 貘吃饃香 只是規範規定 乙個個說 1 2 注...
有關進製轉換的問題?
曲晉雲 首先,請問一下你自己,2的四次方是多少?也許你直接就回答16。那麼好,這個回答裡的16,你已經隱含地在使用10進製了。假如用八進位制來表示的話,2的四次方就不是16,而是20。計算機程式語言裡也是如此,表示數字的變數型別,用的是十進位制。以C語言為例,當你定義乙個變數 inta 這時變數a指...