== 与===

2017-08-25  本文已影响100人  sunningcarry

还记得那些年我们面试被问过的 ![] == [],[] == false吗?
有了这篇文章,宝宝们再也不用怕了

=== 与 ==

=== 为严格等,数据类型不同即为false
a == b为测试等,可以转换a,b数据类型

=== 判断规则

8 === NaN
false
NaN === NaN
false

== 判断规则

Paste_Image.png

上图中 [1] == '1' //true,[1]先转换为'1',再跟'1'比较,数据类型相同,值相同,所以返回值为true
上图中 [1] == true//true,[1]先转换为‘1',转换 为1;true转换为1;1 == 1,所以返回值为true
所有的转换路线为下图,简单来说。隐式转换最后都是数值的比较


Paste_Image.png

特例

过程:
!优先级大于==,!先执行。
!直接将其后面的转为布尔类型,再取反.(转换为布尔值为false 的几种情况null,undefined,NaN,' ',0),(为true的几种情况:[],{})
Boolean([])为true,![]为false
false == false //true

左边类型为Boolean,右边为引用
![]为false,false == [],类型不同进行隐式转换, false转换为数值为0,[]转换为数值为0,所以返回true

考题

console.log([] == false)//true
console.log([] === false)//false
console.log(null === undefined)//false
console.log(null == undefined)//true
console.log({} === {})//false
console.log({} == {})//false
console.log(!{} == {})//true
console.log([1,2,3] == true)//false
console.log([1] == true)//true
参考

1.基础类型值赋值与引用类型值赋值

             var m = 2;
             var n = m;
             m = 3
             n? n的值还为2
             var a = {b:'k'}
              var c = a;
              a.b = 'carry';
              c.b? 答案是'carry'

考点:基本类型赋值是给实际的值,栈里面存放着值
引用类型赋值:是将变量的地址付给新对象,变量栈里存放着堆地址,对应堆里面的存储空间放着值
注意:
当我们想数组拷贝后,互相不影响,可以用以下办法

1. var a = [1,2];
var b = a.slice(0);
b[0] = 3;
alert(a) //1,2
 
2. var a = [1,2];
var b = a.concat(0);

参考

3.判断数据类型的几种方式

待更新

上一篇 下一篇

猜你喜欢

热点阅读