发表于: 2018-04-22 23:46:20

2 561


今天完成的事情:

1、继续学习js运算符的知识。

2、学习了gulp的两个插件。
明天计划的事情:

1、搞完js运算符。

2、学js高程第三章。

3、继续学gulp。

遇到的问题:


收获:

== ===

两者的区别,一句话==可能会发生类型转换,===绝对相等不会发生类型转换。
先说说 ===
1、如果两个值都是简单值且一模一样,除了NaN以外,这两个一定是是全等的。

这里我测试了所有的简单值,只有NaN和自身不等。
如果是对象呢?两个一模一样的对象呢?


这里我分别比较了对象 数组 函数以及ES6的symbol值,结果如下:

可见对象和symbol即使两个完全一模一样,也是不等的。(函数和数组属于对象)
2、如果这个值不是同一类型,必然不等。即除了上面相等的情况其余的情况都是不等的。

在说说 ==
简单类型的值的比较,字符串和布尔值都会转换成数值
1、假如两者的类型相同:都是同一种类型,这里的匹配规格和上面===的规则一样。
2、如果两者类型不同,也有可能相等;
a、null和undefined相等
null ==undefined ——true
b、字符串与数值进行比较,字符串转换为数值后,在于数值进行比较。

可见在字符串转化为数字后,调用的是Number方法,而不是parseInt或者parseFloat方法。
c、字符串与布尔值进行比较
“” == false -----返回值为true
’0‘ == false ——返回值为true
‘1’ ==true ——返回值是true
除‘1’的非空字符串 ==true  返回false ,
非空字符串 ==false  ,返回值是false
d、数值与布尔值进行比较。
1 ==true  0 ==false ,
如果是与对象进行指的比较,则先调用对象的valueOf()方法,然后再调用toString()方法。

综上所述:
1、0, '', [], false 互相比较(包括和自身比较)都返回true, 与其他值比较返回false;
2、undefined 和 null 互相比较返回true, 和自身比较也返回true, 其他情况返回false;
3、Infinity只和自身比较返回true;
4、NaN,{}和任意值比较都是返回false;
5、true==true==1=='1' ==['1'],true和其他值哪怕非0的数字,非空字符串,非空对象,非空数组都是返回false。
6、false 除了和上面的'',[],0 相等外 还和‘0’字符串0相等。
最后的综上所述:建议使用 === 和!==


顺便看看一个关于 ==  ===的图

这里对应的图就是== 的区别,

可以看出 NaN 和{} ,[]无论怎么比较都不自身相等。正负infinity只和自身相等。

看看===的操作符,能够等于自身的块不多。


综上:在===和==比较符,只要是复杂的类型,即对象,数组,函数,包括symbol值都是无法等于自身的,

因为他们比较的地址。

而在>  <不等比较的话,复杂类型的值都会调用其ValueOf()方法,得不到简单值,在调用其toString()方法



返回列表 返回列表
评论

    分享到