我想要一个方法,如果给出一个十六进制数字(例如0x01
),则返回true
。我尝试使用字符串参数,但我需要数字类型检查!例如:
isHex(0x0d) //-> true
isHex(12) //-> false
答案 0 :(得分: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
答案 1 :(得分:1)
JavaScript无法告诉您如何实现任何类型的值。很像你无法从12
回到6+6
或3*4
。 0x0d
和12
是完全相同的值。
答案 2 :(得分:1)
除十进制表示法之外,以十六进制或八进制表示法键入数字的选项仅仅是语法示例。您没有创建任何类型的不同数值。 0x0D
(十六进制)与13
(十进制)完全相同的数值与015
(八进制)完全相同。仅仅他们的符号因radix而不同。有时使用不同基数的数字很方便,它不会改变实际数字。
长话短说:你无法区分。
答案 3 :(得分:0)
你做不到。在传递给函数之前,您的数字文字将被解析为数字值。该函数仅接收一个64位数值,表示例如13,但它无法知道您是写了13
,13.0
,0b1101
,0xd
还是0o15
,还是更复杂的表达式,例如{{1 }或26 / 2
。
这种信息不会在JavaScript中公开。您可能设法做到的唯一方法是获取脚本的源代码,并使用您自己的JS解析器。
或者,考虑改为传递字符串。