javascript - JS中“ === ”的问题
迷茫
迷茫 2017-04-10 15:24:32
0
3
290

我在看eloquent javascript的时候其中有一个程序是判断对象是否相等。"==="可以直接判断数字,字符串。但是直接判断2个完全一样的对象和函数的时候会返回false,那这个false指的是什么?是指内存地址不同吗?

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回覆(3)
大家讲道理

返回的false 是因为,指向堆内存的栈空间地址不同,直接的说就是引用不用。

如果比较的是基本类型,就是比较栈空间的值。

小葫芦

恰巧之前总结过,分享一下吧:
- Javascript的变量可能包含两种不同类型的值:基本类型的值和引用类型的值。基本类型的值就是指简单的数据段,而引用类型的值是指那些可能由多个值构成的对象。
- 引用类型的值是保存在内存中的对象,与其他语言不同,Javascript不允许直接访问内存中的位置,也就是不能直接操作对象的内存空间。在操作对象的时候,实际上是在操作对象的引用而不是实际的对象,为此,引用类型的值是按照引用访问的。
- Javascript在进行运算和比较的时候,很多时候都会进行类型转换,比如:

1 == '1'; // true
1234 + ''; // "1234"

回到正题,=====的区别就是是否强匹配,规则如下:
==:
+ 如果两个值类型相同,进行===比较
+ 如果两个值一个为null,一个为undefined,不相等
+ 如果两个值一个是字符串一个是数值,先转换成数值,再比较
+ 如果两个值任一个为true,先转换成1再比较,如果任一个为false,先转换成0再比较
+ 如果一个为对象,另一个为数值或者字符串,先把对象转换成基础值再比较
===:
+ 类型不同就不想等
+ 如果都是数值且值为同一个值,相等
+ 如果都是字符串,并且对应位置的字符相同泽相等
+ 如果都是引用同一个对象或者函数则相等
+ 都是true或者都是false则相等

刘奇

最简单的记住就是首先类型相同,次之是值相同,要是多一点的话就记得楼上的那最后五行就行了

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板