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语句和==会自动转换数据类型,但是写代码的时候要避免这种容易引起歧义的写法,判断相等尽量使用===