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

标签 javascript

给定以下示例:

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/

相关文章:

javascript - 从 JSON 填充列表(不是 HTML)

javascript - 在 ng-repeat 中使用 ng-model

javascript - 如何在 DataTables 中搜索多个列?

javascript - 将 DOM 变量作为 props 传递给 Reactjs

javascript - currentStyle 与 getComputedStyle 的 Firefox 问题

javascript - Accordion 菜单保持打开状态直到关闭

javascript - 如何使用计时器更改 div 内部

javascript - 通过调用函数来清理 mouseenter 吗?

javascript - 如何计算特定字符在字符串中出现的次数

c# - 在 JavaScript 中镜像 C# 模型 - ASP.NET MVC