JavaScript中‘==’与‘===’

“===”叫做严格相等,”==”叫做抽象相等。

‘===’的运算规则如下

  1. 不同类型值。
    如果两个值的类型不同,直接返回false。
  2. 同一类的原始类型值。
    同一类型的原始类型的值(数值、字符串、布尔值)比较时,值相同返回true,否则返回false。
  3. 同一类的复合类型值。
    两个复合类型(对象、数组、函数)的数据比较时,不是比较它们的值是否相等,而是比较它们是否指向同一个对象。
  4. undefined和null。
    只与本身自己比较才返回true。

’==’在比较相同类型的数据时,与‘===’完全一样。不过在比较不同类型的数据时,会先将数据进行类型转换,转换成相同类型进行比较。

‘==’不同类型转换规则:
1. 原始类型的值。
原始类型的数据会转换成数值类型再进行比较。字符串和布尔值都会转换成数值。
2. 对象与原始类型值比较。
对象(这里指广义的对象,包括数值和函数)与原始类型的值比较时,对象转化成原始类型的值,再进行比较。
3. undefined和null。
undefined和null与其他类型的值比较时,结果都为false,它们互相比较时结果为true。

<script>
    console.log(''=='0');
    console.log(0 == '');
    console.log(0 == '0');
    console.log(false == 'false');
    console.log( false == '0');
    console.log(false == undefined);
    console.log(false == null );
    console.log(null == undefined);
    /*
    false
     true
     true
     false
     true
     false
     false
     true
     */
</script>

来一个详细步骤的:
[] == ![]
[] == !true // ! 操作符的优先级高于 == ,所以先执行 ! 操作
[] == false // !true 得到的是 false
[] == 0 //如果值为true或false,则转成1或0来继续比较
[] == 0 //执行左侧的 [] 的 valueOf 方法,而 [] 是对象,所以 [].valueOf() 返回本身 []
“” == 0 //执行左侧的 [] 的 toString 方法,[].toString() 返回 “”
0 == 0 //如果一个值是数字,一个值是字符串,则把字符串转换为数字,再进行比较,”” 转成数字是 0。
最终是执行 0 == 0 ,结果为 true。



总 结:

严格等首先要求类型一样,在比较过程中不执行类型转换,抽象等对比较对象的类型会执行转换,再转换为同一类型后再进行值得比较。所以,在进行比较的时候不建议使用‘==’。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值