zoukankan      html  css  js  c++  java
  • js中的等值运算符(抽象相等==与严格相等===的区别)

    js中的等值运算符
    
    js中的相等分为抽象相等和严格相等,他们有什么区别呢。
    
    在说具体算法前,先提下JS数据类型,JS数据类型分为6类:Undefined Null String Number Boolean Object.在这里我们用Type(x)表示x的数据类型
    
    1,抽象相等==
    x==y的算法过程如下:
    
        1,Type(x)与Type(y)相同:
            如果Type(x)为Undefined或Null,则返回true,即:undefined==undefined; null==null返回true
            如果Type(x)为Number,如果x或y为NaN,返回false,即:NaN==NaN为false;x与y数值相等或-0与+0均返回true,否则返回false
            如果Type(x)为String,则x和y对应位置的字符完全一样才返回true,否则返回false
            如果Type(x)为Boolean,则相同值返回true,否则false
            如果Type(x)为Object,则相同引用返回true,否则false,看下面例子:
                var a={m:1}
                var b={m:1}
                a==b
                结果为false,因为a,b不是相同引用,再看:
                var a={m:1}
                b=a
                a==b
                结果为true,因为他们是引用同一个对象
        2,Type(x)为Undefined,Type(y)为Null,返回true,即undefined==null为true
        3, Type(x)为String,Type(y)为Number,则将x转换为Number,然后再比较,例:
                1==“1”
                结果为true,因为将"1"转换为Number后为1
        4,Type(x)为Boolean,Type(y)为Number,则将x转换为Number再比较,例
                true==1;
                false==0;
                结果均为true
        5,Type(x)为String或Number,Type(y)为Object,则将y转换为基本值,例子:
                1==new String("1")
                "2"==new Number(2)
                结果均为true
        6,返回false
    2,严格相等===
    1,如果 Type(x) 与 Type(y) 的结果不一致,返回 false,即只要类型不一样,则返回false,例子:
         1===“1”   false
         undefined===null  false
    2,如果Type(x)是Number,如果x或y为NaN,返回false,即:NaN===NaN为false;x与y数值相等或-0与+0均返回true,否则返回false
    3,如果 Type(x) 结果为 Undefined,返回 true
      如果 Type(x) 结果为 Null,返回 true
      如果Type(x)为String,则x和y对应位置的字符完全一样才返回true,否则返回false
      如果Type(x)为Boolean,则相同值返回true,否则false
      如果Type(x)为Object,则相同引用返回true,否则false
    
    
    总结:
    严格等与抽象等的区别在于,严格等首先要求类型一样,在比较过程中不执行类型转换,抽象等对比较对象的类型会执行转换,再转换为同一类型后再进行值得比较。
  • 相关阅读:
    eclipse开发安卓 发短信打电话发送邮件功能
    关于springboot连接数据库是报错
    --Angular-01-关于angular-tree-component--
    --外功篇-Less的学习日志-01-辅助理解Less--
    --兵器谱--git学习记录帖--
    --兵器谱--git初体验--
    --算法恩仇录--实战篇--力扣(LeetCode)--022-括号生成--
    --算法恩仇录--实战篇--力扣(LeetCode)--011-盛水最多的容器--
    --算法恩仇录--实战篇--力扣(LeetCode)--006-Z字形变换--
    --算法恩仇录--实战篇--力扣(LeetCode)--005-最长回文子串--
  • 原文地址:https://www.cnblogs.com/mufc-go/p/3645207.html
Copyright © 2011-2022 走看看