这段JavaScript代码执行后输出false,原因是什么?
为什么这段JavaScript代码控制台输出false?
先看执行的代码:
cellColor = {}; cellColor['cel32'] = 'blue'; cellColor['cel24'] = 'blue'; cellColor['cel16'] = 'blue'; cellColor['cel8'] = 'blue'; console.log( (((cellColor['cel32'] === cellColor['cel24']) === cellColor['cel16']) == cellColor['cel8']) == 'blue', );
我们拆解这个嵌套比较的执行过程:
- 第一步:
cellColor['cel32'] === cellColor['cel24'],两个值都是字符串'blue',全等(===)会同时比较值和类型,所以结果是布尔值true。 - 第二步:把第一步的
true和cellColor['cel16'](值为'blue')做全等比较:true === 'blue'。布尔值和字符串类型完全不同,全等比较直接返回false。 - 第三步:把第二步的
false和cellColor['cel8'](值为'blue')做相等(==)比较。相等比较会先做类型转换:布尔值false转成数字是0,字符串'blue'转成数字是NaN。0和NaN不相等,所以结果是false。 - 第四步:把第三步的
false和字符串'blue'做相等比较:false == 'blue',同样类型转换后0和NaN不相等,最终结果就是false。
核心问题在于嵌套比较中,每一步的结果会从字符串变成布尔值,后续的比较就变成了布尔值和字符串的对比,再加上==的类型转换规则,最终导致结果为false。
内容的提问来源于stack exchange,提问作者Rama Zain
相关产品推荐
相关产品推荐

