JS隐性转换

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
【JS隐性转换】有两个奇葩需要注意
  • undefined==null,虽然undefined转换成数字为NaN,null转换成数字为0,但是它们是相等的
  • 空白字符串" ",要与空字符串区别开,空白字符串转换成数字为0,转换成布尔类型为true,但是" "==false,把==两端都转换成数字就好理解了
虽然if语句和==会自动转换数据类型,但是写代码的时候要避免这种容易引起歧义的写法,判断相等尽量使用===

    推荐阅读