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

有两个奇葩需要注意

  • undefined==null,虽然undefined转换成数字为NaN,null转换成数字为0,但是它们是相等的
  • 空白字符串" ",要与空字符串区别开,空白字符串转换成数字为0,转换成布尔类型为true,但是" "==false,把==两端都转换成数字就好理解了

虽然if语句和==会自动转换数据类型,但是写代码的时候要避免这种容易引起歧义的写法,判断相等尽量使用===

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容