JS中“ === ”的问题

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

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

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

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

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

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

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

  • 用jquery的animate写的下拉展开在安卓上不顺畅,用zepto会顺畅么
  • 研究懒加载代码时遇到的一个疑惑
  • js正则表达式匹配
  • easy ui表格刷新的时候,有时候显示不出来数据
  • 浮动布局转化为定位布局为什么要去除margin?
  • 前端 ajax请求发送没有数据重新发送一次
  • 一个关于append()的问题,为什么不是按顺序添加?
  • MUI框架的app如何实现清除应用缓存的功能
  • js两个声明函数,相互调用是怎样进行的?
  • 怎样在h5 调用支付宝当面付功能
  • jasmine-node写单元测试方法not defined的问题