• javascript中的"x != x"


    在javascript的运用中,经常遇到判断两个 对象/值 是否相等的情况。有些表明上看着一样,其实他们不一样。有些特殊情况,需要我们辨别。

    引用类型

    他们都是引用类型,存储的空间将从堆中分配。变量处的值是一个指针,指向存储对象的内存处。

    具有相同属性的两个对象。

    var a = { x : 1 }
    var b = { x : 1 }
    a === b // false  两个单独的对象永不相等
    a == b // false  两个单独的对象永不相等
    

    他们实际是new Object()的简写。初始化变量a时候,赋了一个对象值,那么在堆中开辟了一个新空间。
    初始化变量b时候,也是开辟了一个新空间。两个变量,所指向的内存地址是不一样的。

    两个单独的空数组.

    var a = [], b = []
    a === b // false  两个单独的数组永不相等。
    a == b // false  两个单独的数组永不相等。
    

    以上两个例子,原理相同。

    原始类型

    判断Number类型的值是否为NaN

    ECMAScript (ES6)包含Number.isNaN()函数。
    通过Number.isNaN(x)来检测变量x是否是一个非数值。然而,在缺少Number.isNaN函数的情况下,通过表达式(x != x)来检测变量x是否是NaN会更加可靠。

    String类型

    String类型,我目前没有发现相同字面量,会不相等的情况。

    Symbol类型

    const s1 = Symbol() 
    const s2 = Symbol()
    s1 == s2 // false
    s1 === s2 // false
    

    Symbol()函数返回symbol类型的值,都是唯一的,不相等的,并且具有静态属性和静态方法。

    [完]

  • 相关阅读:
    【转】三层架构,MVC, ASP.net MVC的区别
    code-Behind
    从输入 URL 到页面加载完成的过程中都发生了什么事情?
    javascript杂谈
    网页设计中透明效果的使用技巧
    phpstorm+Xdebug断点调试PHP
    MySql IFNULL 联表查询出来的null 如何赋值
    php读取目录下的文件
    CI框架程序--本地调试之后部署新浪SAE
    各个手机APP客户端内置浏览器useragent
  • 原文地址:https://www.cnblogs.com/weiqinl/p/9053092.html
Copyright © 2020-2023  润新知