JavaScript异常行为疑问:为何最后一个alert输出结果为false?
为什么会出现这种异常行为?
嘿,这个问题其实是运算符优先级在搞鬼!咱们一步步拆解来看:
首先看if语句里的判断:
value1 == value2
这里value1是字符串"20",value2是数字20,==运算符会自动触发类型转换——把字符串转成数字后再比较,20和20相等,所以弹出" equal values",这部分完全正常。重点看那个“反常”的alert:
alert("value is " + value1 == value2);
JavaScript里的运算符是有优先级顺序的,加法+的优先级比相等判断==高,所以代码会先执行字符串拼接:"value is " + value1,得到结果字符串"value is 20"。
接下来就变成了比较"value is 20" == 20,这时候==会尝试把字符串转成数字,但"value is 20"里包含非数字字符,转成数字的结果是NaN(非数字值)。而NaN和任何值比较的结果都是false,所以这个alert最终输出false。最后看
console.log(value1 == value2)
这里没有其他运算符干扰,直接比较字符串"20"和数字20,类型转换后两者相等,所以输出true。
如果想让alert输出正确的比较结果,只需要给比较部分加个括号改变优先级就行:
alert("value is " + (value1 == value2));
这样会先执行value1 == value2得到true,再拼接到字符串里,alert就会输出"value is true"啦。
内容的提问来源于stack exchange,提问作者kartikdev
相关产品推荐
相关产品推荐

