为何undefined加11得NaN却触发'other'分支?JS问题咨询
为什么判断
NaN时===不生效? 你遇到的问题核心是NaN的特殊特性:在JavaScript里,NaN是唯一一个不等于自身的值,所以用严格相等运算符===去判断变量 === NaN永远会返回false,这就是你的代码进入else分支的原因。
拆解你的代码细节:
undefined + 11会触发隐式类型转换,undefined被转成NaN,所以NaN + 11的结果还是NaN,这也是你用console.log看到number值为NaN的原因。- 但
if (number === NaN)这个条件永远为false——因为NaN === NaN本身就等于false,自然不会进入第一个分支;第二个分支number === 11显然不成立,所以最终走到else输出other。
要正确判断一个值是不是NaN,有两种常用方法:
Number.isNaN():ES6新增的方法,只会严格判断传入的值是否为NaN,不会做类型转换,推荐使用:const number = undefined + 11; if (Number.isNaN(number)) { document.write("NaN"); } else if (number === 11) { document.write("11"); } else { document.write("other"); }这段代码会正确输出
NaN。isNaN():旧方法,它会先把传入的参数转成数值类型再判断是否为NaN,如果传入非数值类型(比如字符串)可能出现误判,比如isNaN("abc")会返回true(因为"abc"转成数值是NaN),使用时需注意场景。
总结:永远不要用===或==去判断NaN,必须用专门的判断方法。
内容的提问来源于stack exchange,提问作者정지은
相关产品推荐
相关产品推荐

