你不知道的系列之“JS的类型转换”

66 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第8天,点击查看活动详情

各位同学,今天看到一道非常有意思的题目,题目非常简洁:

Q:console.log (3 < 2 < 1)console.log (3 > 2 > 1)的输出结果是什么?

是不是很多同学觉得3 < 2 < 1在数学表达式上是不成立的,所以console.log (3 < 2 < 1)返回false;而3 > 2 > 1在数学表达式上是成立的所以返回true?如果这么想,就落入出这题的作者设计的陷阱了!!!这道题呢,其实只考了一个知识点,那就是类型转换

首先,先来分析console.log (3 < 2 < 1)

表达式从左到右进行判断,也就是(3 < 2) < 1,数字3大于数字2,所以3 < 2返回false,所以判断console.log (3 < 2 < 1)就变成了判断console.log (false < 1)false和数值比较大小时,false会转换为数字0,所以就变成了判断console.log (0 < 1),结果显然返回true

所以: console.log (3 < 2 < 1);输出true

image.png

那么知道了类型转换之后,再看console.log (3 > 2 > 1),输出的结果是不是就很显而易见了呢?

console.log (3 > 2 > 1) 等价于判断console.log (true > 1)true和数值比较大小时,true会转换为数字1,因此又等价于判断console.log (1 > 1),结果显然返回false

所以: console.log (3 > 2 > 1);输出false

image.png

总结: false在类型转换时会转换成0true会转换成1

PS:今天这篇文章,只有干货,大家伙多喝喝水哈哈😃,更多的类型转换之后会出一篇文章详细介绍。