为什么isNAN("12")评估为假?

bit*_*xyz 5 javascript

为什么JavaScript将12和"12"解释为相同?

function sanitise(x) {
  if (isNaN(x)) {
    return NaN;
  }
  return x;
}

var a = "12"
var b = 12
console.log(typeof(a))
console.log(sanitise(a));
console.log(sanitise(b));
Run Code Online (Sandbox Code Playgroud)

输出:

> "string"
> "12"
> 12
Run Code Online (Sandbox Code Playgroud)

然后,"12"和"字符串"之间有什么区别?

Roh*_*wal 7

isNaN()函数确定值是否为NaN.

根据文档,当算术运算导致未定义或不可表示的值时,会生成NaN值.这些值不一定代表溢出条件.NaN也是由于尝试强制转换为非数值的数值而没有原始数值可用.

例如,将零除以零会产生NaN - 但将其他数除以零则不会.

这里"12"不是数字,但也不NaN是.因此isNaN()返回false.

此外,当isNaN函数的参数不是Number类型时,该值首先被强制转换为a Number.然后测试结果值以确定它是否是NaN.

因此,isNaN('s')当's'转换为数字时返回true.将此解析为数字失败并返回NaN.


gur*_*372 2

\n

为什么 \xe2\x80\x9c12\xe2\x80\x9d 在 JavaSciprt 中不是 NaN ?

\n
\n\n

根据规范,在检查给输入是否是数字(或不是数字- NaN)之前,有一个隐式转换为 Number

\n\n
\n
    \n
  1. 令 num 为 ToNumber(number)。
  2. \n
\n
\n\n

所以isNaN("12")=> isNaN(12)=>

\n