给定以下示例:
isNaN("-0x123"); // returns true , meaning is not a number <- Why?
isNaN(-0x123); // returns false, meaning is a number
isNaN("0x123"); // returns false, meaning is a number
parseInt("-0x123"); // returns -291
我的问题:当其他类似输入产生更合理的输出时,为什么 isNaN 将负十六进制字符串声明为 NaN?
谢谢
最佳答案
函数 isNaN()
告诉您一个值是否可以被强制转换为数字,它没有说明是否存在将值转换为数字的函数。
如果您尝试将字符串强制转换为数字,您将看到相同的行为:
> +"-0x123"
NaN
> +(-0x123)
-291
> +"0x123"
291
第一种情况,你有一个字符串不符合 Javascript 的数字规则,因为它不允许在十六进制文字上使用前导 -
,第二种情况你有一个计算表达式到一个数字(所以 0x123
取反),第三种情况你有一个字符串确实匹配一个数字的语法。
参见 http://www.ecma-international.org/ecma-262/5.1/#sec-9.3对于确切的描述,但简而言之,字符串数字文字可能是无符号十进制文字,+
或 -
后跟无符号十进制文字,或者它可能是十六进制整数文字(在所有这些情况下,前导和尾随空格都被忽略)。十六进制文字上没有符号选项。
关于javascript - 为什么 Javascript isNaN 函数将字符串负十六进制值声明为 NaN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34391853/