如果数字是十六进制的,如何得到真或假?

时间:2016-12-26 16:08:12

标签: javascript

我想要一个方法,如果给出一个十六进制数字(例如0x01),则返回true。我尝试使用字符串参数,但我需要数字类型检查!例如:

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

4 个答案:

答案 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+63*40x0d12是完全相同的值。

答案 2 :(得分:1)

除十进制表示法之外,以十六进制或八进制表示法键入数字的选项仅仅是语法示例。您没有创建任何类型的不同数值。 0x0D(十六进制)与13(十进制)完全相同的数值与015(八进制)完全相同。仅仅他们的符号因radix而不同。有时使用不同基数的数字很方便,它不会改变实际数字。

长话短说:你无法区分。

答案 3 :(得分:0)

你做不到。在传递给函数之前,您的数字文字将被解析为数字值。该函数仅接收一个64位数值,表示例如13,但它无法知道您是写了1313.00b11010xd还是0o15,还是更复杂的表达式,例如{{1 }或26 / 2

这种信息不会在JavaScript中公开。您可能设法做到的唯一方法是获取脚本的源代码,并使用您自己的JS解析器。

或者,考虑改为传递字符串。