JS的运算符中,=
,==
,===
这三个运算符对初学者而言,很容易混淆
-
=
是赋值运算符,用来给变量赋值 -
==
判断相等,返回值是布尔类型 -
===
严格相等,返回值是布尔类型
可以看出,一个等号是赋值,而不是判断相等,如需判断相等,则需要使用==
,===
这两个运算符。那么这两个运算符有什么区别呢?
"1234"==1234; //结果为true
"1234"===1234; //结果为false
字符串"1234"
与数字1234
,在使用==
的情况下是相等的,但是在使用===
的情况下不相等
==
和===
的区别在于两边参数的数据类型
==
不要求两边的参数是同一数据类型,但是会强制转换成数值型,然后比较"值"是否相等===
要求两边的参数是同一数据类型,如果不同,就不相等,如果相同,再比较"值"是否相等
==
强制转换数据类型的规则
类型 | 结果 |
---|---|
undefined | NaN |
null | 0 |
Boolean | true->1,false->0 |
String | "abc"->NaN,"123"->123 |
if语句的条件表达式会强制转换数据类型
var a = 1;
if(a){
console.log("Hello");
}else{
console.log("666");
}
//输出结果是"Hello"
if括号里的表达式,会被强制转换为布尔类型,规则如下:
类型 | 结果 |
---|---|
undefined | false |
null | false |
Number | +0,-0,NaN为false,其他为true |
String | 空字符串为false,其他为true |
Object | true |
有两个奇葩需要注意
-
undefined==null
,虽然undefined转换成数字为NaN,null转换成数字为0,但是它们是相等的 - 空白字符串
" "
,要与空字符串区别开,空白字符串转换成数字为0,转换成布尔类型为true,但是" "==false
,把==
两端都转换成数字就好理解了
虽然if语句和==
会自动转换数据类型,但是写代码的时候要避免这种容易引起歧义的写法,判断相等尽量使用===