JavaScript中isNaN()对'100F'和'0.0314E+2'判断结果不同是什么原因?
isNaN()判断逻辑差异原因解答
你遇到的差异本质是isNaN()的运行规则和JS的字符串转数字规则共同作用的结果:
isNaN()执行时会先把传入的参数强制转换为数字类型,再判断转换后的结果是否为NaN,而不是直接判断传入值本身是不是数字类型。- 字符串转数字时,JS会校验整个字符串是否符合合法数字的表示规则,只有完全匹配才会返回对应的数值,否则返回
NaN。
两个字符串的转换差异
'100F':字符F不属于数字合法字符,也不符合任何JS支持的数字表示规范,所以转换结果为NaN,isNaN()判断为非数字,返回对应提示。'0.0314E+2':这里的E(大小写都支持)是JS数字类型原生支持的科学计数法标识,E+2表示前面的数值乘以10的2次方,整个字符串完全符合合法数字的格式要求,转换后得到数值3.14,所以isNaN()判定为有效数字,乘以1000后得到3140。
补充提示
如果需要严格判断某个值本身就是数字类型、不需要做隐式转换,可以用Number.isNaN()替代全局的isNaN(),Number.isNaN()不会对参数做强制类型转换,判断逻辑更严谨。
内容的提问来源于stack exchange,提问作者Claude Manbodh
相关产品推荐
相关产品推荐

