search

Home  >  Q&A  >  body text

javascript - JS中“ === ”的问题

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

迷茫迷茫2894 days ago275

reply all(3)I'll reply

  • 大家讲道理

    大家讲道理2017-04-10 15:26:32

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

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

    reply
    0
  • 高洛峰

    高洛峰2017-04-10 15:26:32

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

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

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

    reply
    0
  • 怪我咯

    怪我咯2017-04-10 15:26:32

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

    reply
    0
  • Cancelreply