例如Number("Infinity")
返回,Infinity
因为它将其识别为数字类型,所以我想知道Number("NaN")
返回是否出于与返回NaN
相同的原因,还是因为它将其识别为数字,就像“无穷大”一样?Number("potato")
NaN
例如Number("Infinity")
返回,Infinity
因为它将其识别为数字类型,所以我想知道Number("NaN")
返回是否出于与返回NaN
相同的原因,还是因为它将其识别为数字,就像“无穷大”一样?Number("potato")
NaN
不, 不存在 的特殊情况,
"NaN"
就像 存在一样"Infinity"
,您获得 的原因NaN
与获得"NaN"
的原因相同。NaN
"potato"
您可以查阅 JavaScript 使用的规范,了解其内部工作逻辑
Number()
。查看ECMAScript 规范(JavaScript 遵循的规范)中的Number() ,您会发现它调用了ToNumeric(),而 ToNumber() 又调用了ToNumber() 。最终返回的是调用StringToNumeric()的结果。在这个抽象操作中,它执行以下操作:第一步尝试使用StringNumericLiteral
"NaN"
的目标来解析输入字符串 ( ) ,但是,如果查看此语法,则会发现“NaN”不符合该语法(因为必须以空格字符开头,或者必须是以0为前缀的文字之一,例如/ 、/ 、/ ,小数或,其中这两个符号是可选的)。由于无法解析为,因此ParseText()操作会导致返回一个包含错误的列表,从而导致上面的第 2 点返回。StringNumericLiteral
0b
0B
0x
0X
0o
0O
Infinity
+/-
"NaN"
StringNumericLiteral
NaN