我在看eloquent javascript的时候其中有一个程序是判断对象是否相等。"==="可以直接判断数字,字符串。但是直接判断2个完全一样的对象和函数的时候会返回false,那这个false指的是什么?是指内存地址不同吗?
高洛峰2017-04-10 15:26:32
恰巧之前总结过,分享一下吧:
- Javascript的变量可能包含两种不同类型的值:基本类型的值和引用类型的值。基本类型的值就是指简单的数据段,而引用类型的值是指那些可能由多个值构成的对象。
- 引用类型的值是保存在内存中的对象,与其他语言不同,Javascript不允许直接访问内存中的位置,也就是不能直接操作对象的内存空间。在操作对象的时候,实际上是在操作对象的引用而不是实际的对象,为此,引用类型的值是按照引用访问的。
- Javascript在进行运算和比较的时候,很多时候都会进行类型转换,比如:
1 == '1'; // true
1234 + ''; // "1234"
回到正题,==
和===
的区别就是是否强匹配,规则如下:==
:
+ 如果两个值类型相同,进行===
比较
+ 如果两个值一个为null,一个为undefined,不相等
+ 如果两个值一个是字符串一个是数值,先转换成数值,再比较
+ 如果两个值任一个为true,先转换成1再比较,如果任一个为false,先转换成0再比较
+ 如果一个为对象,另一个为数值或者字符串,先把对象转换成基础值再比较===
:
+ 类型不同就不想等
+ 如果都是数值且值为同一个值,相等
+ 如果都是字符串,并且对应位置的字符相同泽相等
+ 如果都是引用同一个对象或者函数则相等
+ 都是true或者都是false则相等