当前位置:  开发笔记 > 编程语言 > 正文

为什么Javascript isNaN函数将字符串负十六进制值声明为NaN?

如何解决《为什么JavascriptisNaN函数将字符串负十六进制值声明为NaN?》经验,为你挑选了1个好方法。

给出以下示例:

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?

谢谢



1> Duncan..:

该函数isNaN()告诉您是否可以将值强制转换为数字,它没有说明是否存在将值转换为数字的函数.

如果您尝试将字符串强制转换为数字,您将看到相同的行为:

> +"-0x123"
NaN
> +(-0x123)
-291
> +"0x123"
291

第一种情况是你有一个字符串,它与一个数字的Javascript规则不匹配,因为它不允许-十六进制文字的前导,第二种情况你有一个表达式,其计算结果为一个数字(如此0x123否定),第三种情况你有一个与数字的语法匹配的字符串.

有关确切描述,请参见http://www.ecma-international.org/ecma-262/5.1/#sec-9.3,但简而言之,字符串数字文字可以是无符号十进制文字,+-后跟无符号十进制文字,或者它可以是十六进制整数文字(并且在所有这些情况下,忽略前导和尾随空格).十六进制文字上没有标记选项.

推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有