2016-12-26 9 views
0

我想要一個方法,如果給定一個十六進制數(例如0x01)返回true。我嘗試了一個字符串參數,但我需要數字類型檢查!例如:如何獲得真或假,如果一個數字是十六進制或不是?

isHex(0x0d) //-> true 
isHex(12) //-> false 
+6

Javascript中沒有「hexa number」類型。 '0x ...'僅僅是不同的**語法**來表示一個數字。結果仍然是一個純數字值,與以十進制數字輸入時沒有區別。 – deceze

+1

根據語言規則,只能區分數字的_string表示是十六進制還是十進制。一旦解析,數字就是一個數字,不管它最初是如何表示的,而且你不能逆轉這個數字。 –

+0

也許OP意味着Java而不是Javascript? http://www.java2s.com/Tutorial/Java/0040__Data-Type/Hexadecimalintegerliteral.htm –

回答

3

這是不可能的,因爲十六進制數文字是代表相同數量的另一種方式,而且也沒有辦法來區分它們:

0x10  //=> 16 
typeof 0x10 //=> 'number' 
typeof 16 //=> 'number' 

,如果你這樣做只會是可能的通過字符串作爲字符串:

function isHex(num) { 
    return Boolean(num.match(/^0x[0-9a-f]+$/i)) 
} 

isHex('0x1a') //=> true 
isHex('16') //=> false 
+0

謝謝:)這是不可能的..我需要找到另一種方式..! –

1

JavaScript不能告訴你如何實現任何類型的值。就像你不能從12回到6+63*4一樣。 0x0d12是完全相同的值。

1

除十進制符號外,用十六進制或八進制符號鍵入數字的選項僅僅是語法示能表示法。你沒有創建任何不同的數值。 0x0D(十六進制)與13(十進制)完全相同,與015(八進制)完全相同。僅僅它們的符號與它們的radix不同。使用不同基數的數字有時很方便,它不會改變實際的數字。

長話短說:你不能分辨。

0

你不能。在傳遞給函數之前,您的數字文字被解析爲數字值。該功能只接收表示例如64位的64位數字值。 13,但不知道您是否寫過13,13.0,0b1101,0xd0o15,或者更復雜的表達式,如26/210+3

此類信息未在JavaScript中公開。你可能設法做到這一點的唯一方法就是獲得腳本的源代碼,並使用你自己的JS解析器。

或者,考慮傳遞一個字符串。

相關問題