js中==与===的区别

为了减少概念混淆,应该把 =称作(得到或者赋值),==称作(相等),===称作(严格相等)

相同点:

它们两个运算符都允许任意类型的的操作数,如果操作数相等,返回true,否则返回false

不同:

== :

(1)如果两个值类型相同,再进行三个等号(===)的比较

  (2)如果两个值类型不同,也有可能相等,需根据以下规则进行类型转换在比较:

    1)如果一个是null,一个是undefined,那么相等

    2)如果一个是字符串,一个是数值,把字符串转换成数值之后再进行比较

=== :

  (1)如果类型不同,就一定不相等

  (2)如果两个都是数值,并且是同一个值,那么相等;如果其中至少一个是NaN,那么不相等。(判断一个值是否是NaN,只能使用isNaN( ) 来判断)。且NaN不等于NaN和+0等于-0;

  (3)如果两个都是字符串,每个位置的字符都一样,那么相等,否则不相等。

  (4)如果两个值都是true,或是false,那么相等

  (5)如果两个值都引用同一个对象或是函数,那么相等,否则不相等

  (6)如果两个值都是null,或是undefined,那么相等

var num = 1;
var str = '1';
var test = 1;
test == num   //true 相同类型 相同值
test === num  //true 相同类型 相同值
test !== num  //false test与num类型相同,其值也相同, 非运算肯定是false
num == str   //true  把str转换为数字,检查其是否相等。
num != str   //false  == 的 非运算
num === str  //false  类型不同,直接返回false
num !== str  //true   num 与 str类型不同 意味着其两者不等 非运算自然是true啦

注意:

       (1)对于Array,Object等高级类型,==和===是没有区别的

       (2)基础类型与高级类型,==和===是有区别的。对于==,将高级转化为基础类型,进行“值”比较。因为类型不同,===结果为false。

 

es6

以上的相等都是基于es5的,但在es6中新增了一个用来判断两个值是否相等的方法。ES6 提出“Same-value equality”(同值相等)算法,用来解决这个问题。Object.is就是部署这个算法的新方法。它用来比较两个值是否严格相等,与严格比较运算符(===)的行为基本一致。

区别是:一是+0不等于-0,二是NaN等于自身。

+0 === -0 //true
NaN === NaN // false

Object.is(+0, -0) // false
Object.is(NaN, NaN) // true

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值