给出以下示例:
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,但简而言之,字符串数字文字可以是无符号十进制文字,+
或-
后跟无符号十进制文字,或者它可以是十六进制整数文字(并且在所有这些情况下,忽略前导和尾随空格).十六进制文字上没有标记选项.