2014-02-28 63 views
0

在JavaScript中,變量是鬆散類型的,因此數字5和字符串"5"可能被多個運算符視爲一個數字。然而,是否有一種通用的方式來查找tunrime中的JavaScripts轉換能力,還是僅僅爲幾種類型的操作符重載,使得鬆散的鍵入成爲可能?是否可以檢查JavaScript中可能的轉換?

例如,給定包含類型名稱type_canditate可變a和一個字符串,是否有任何的方式來詢問的JavaScript,如果a可以轉換爲type_candidate在feasable方式,相比於硬打字運營商如instanceof?例如,"5" instanceof Number評估錯誤,而Math.sin("5")是完全可行的。對於數字,可以明確地檢查parseFloat(some_number)的計算結果是否爲NaN,但這是數字的特例。

那麼,是否有任何命名類型的通用方法,並檢查某些變量是否可以以有用的方式轉換爲給定類型?

+0

沒有明確的用於此目的的設施,但您可以隨時*嘗試*轉換爲任何其他類型的類型以查看您獲得的內容。 – Pointy

+0

另外,'parseFloat()'不是檢查可轉換性的好方法。 Number()構造函數更安全。 – Pointy

+0

'Number'比parseFloat'有什麼好處? – dronus

回答

1

JavaScript中有三種基本數據類型:字符串,數字和布爾值。

的東西都可以轉換爲字符串或布爾:

  • 所有對象轉換爲true(除null,成爲false - 我只在這裏提到它,因爲typeof nullobject
  • 所有的對象都有一個內置toString方法,當轉換爲字符串時被調用。
  • 轉換一個數字,字符串通過給數字的字符串表示完成(即5成爲"5"
  • 數字轉換爲Boolean true,除非它是0成爲false

轉換爲數字有點棘手,但技術上可行。如果它能找到一個有效的號碼,那麼它就成爲這個號碼。否則,它變成NaN

所以基本上... 任何類型可以成爲這樣任何其他類型的通過鑄造。唯一一次有類似「錯誤狀態」的東西是NaN

+0

對象通過'valueOf()'函數轉換爲數字,這個函數基本上是'toString()'的數字類型。 – Pointy

+0

剛問過關於檢查數字的另一個問題:http://stackoverflow.com/questions/22100243/how-to-check-if-a-string-contains-a-number-in-javascript – dronus

相關問題