既然JavaScript有数字分隔符(_
U+005F
),为什么Number("3_0")
返回NaN
?它不应该像返回8的Number("0x08")
那样工作吗?
Number.isNaN(Number("3_0")) // true
Number.isNaN(Number(3_0)) // false
Number("3_0") === 30 // false
Number(3_0) === 30 // true
既然JavaScript有数字分隔符(_
U+005F
),为什么Number("3_0")
返回NaN
?它不应该像返回8的Number("0x08")
那样工作吗?
Number.isNaN(Number("3_0")) // true
Number.isNaN(Number(3_0)) // false
Number("3_0") === 30 // false
Number(3_0) === 30 // true
根据spec,当转换为数值时,数字文字所接受的语法与字符串值所接受的语法之间存在一些差异.
区别之一是
[UNK]StringNumericLiteral[UNK]不能包含[UNK]NumericLiteralSeparator.
如果我不得不猜测的话,原因是接受这些字符会改变现有有效JavaScript代码的行为,这可能会 destruct 正常工作的应用程序.