一、隐式转换的记忆技巧
-
如果两个值类型相同,则直接比较
-
如果两个值不是同一个类型的话,则按如图方式进行相应类型转换,直到两个值的类型相同再进行比较。
-
对象和布尔值比较
[] == true; //false
对象–>字符串–>数字
==
数字<—布尔值 如上转换后,两个值的类型同为数字,则进行数字之间的比较
-
对象和字符串比较
[1,2,3] == '1,2,3' // true
对象–>字符串
==
字符串 进行字符串之间的比较
-
对象和数字比较
[1] == 1; // true
对象–>字符串–>数字
==
数字 进行数字之间的比较
-
字符串和数字比较
'1' == 1 // true
字符串–>数字
==
数字 进行数字之间的比较
-
字符串和布尔值比较
'1' == true; // true
字符串–>数字
==
数字<–布尔值进行数字之间的比较
-
布尔值和数字的比较
true == 1 // true
布尔值–>数字
==
数字进行数字之间的比较
-
关键是:记住图片中的转换顺序,最后同类型比较
二、编写js代码时建议不用或少用双等号‘==’
原因:双等号的隐式转换太不和常理。如下:
[] == true //false
[] == 0 //true
[1] == 1 //true
[] == false
![] == false
![] == []
'1' == 1
'1' == true;
像这种运算先不说你能不能判断正确,起码得思考良久,可读性差。
所以做如下约定
- 两个值比较时,统一用===
!![] === false // 代替 [] == true
比较的两个值先用易懂的方式进行转换数据类型