==和===的区别

作者: 胡思乱想的Alice | 来源:发表于2017-10-09 17:54 被阅读7次

a==b a===b

  1. 当a和b的类型相同时,==和===的作用是一样的
    比较类型为数值、字符串和布尔值时,值相同则返回true
    比较类型为对象、数组和函数时,引用地址相同则返回true
  2. 当a和b的类型不同时,a===b直接返回false,a==b则会发生类型转换
    类型转换的规则
    2.1 比较对象为数值、字符串和布尔值时,会直接转换为数值进行比较
    比如说'0'==0 false==0 true==1 '0'==false
    2.2 对象与原始数值比较时,对象会转换为原始类型的值再进行比较
    Q:对象转换为原始类型的规则 valueOf和toString

[http://www.cnblogs.com/ecalf/archive/2012/11/29/2793921.html]
对于对象型参与 算术运算和 "==" 运算, 不等于比较元算(> 、<、>=、<=),自动发生数据类型转换,先调用 valueOf ,如果 valueOf 不能返回标量(number、string、boolean) 和 undefined、 null , 将继续调用 toString, 如果仍然返回对象型数据,报错。

obj={x:1}
b==1 //false
b.valueOf() //{x: 1}
b.toString() //"[object Object]"
b={x:1,toString:function(){return '1'}}
b==1 //true
toString和valueOf均返回对象

Date 类型的例外: 在 + 和 == 运算中,优先 toString ,这应该是规范对该数据类型的特殊对待。
在界面输出中, 比如 alert() 和 document.write() ,将优先调用 toString,如果过得不到 标量 或 undefined、null ,再尝试 valueOf ,如果仍然返回对象则报错。

此处应该注意的是当发生等于运算时,首先比较类型,类型不同的情况下再进行类型转换。但是在发生大于小于运算时,是直接转换为数值进行比较的。
更正:在javascript字符串运算符的比较中,遵循一种名为“字典系”的排列算法。当数字以字符串的形式比较,会转换为ASCII码,然后从首位开始逐位比较,若不等则直接返回布尔值,若相等则继续比较下一位。
所以"13">"3"为false,"35">"3"为true

Number(null) //0
Number(undefined) //NaN

所以undefined 与任何其他数据(包括 null)进行大于、小于比较都是 false
[1]==[1] //false [1]>=[1] //true null==0 //false null>=0 //true

  1. null==undefined //true
    null===undefined //false

相关文章

  • &和&&,| 和 || 的区别

    &不管前面的条件是否正确,后面都执行 &&前面条件正确时,才执行后面,不正确时,就不执行,就效率而言,这个更好。 ...

  • &和&&, |和||的区别

    &和&&的含义一样, 表示逻辑与(and), 只有第一个表达式和第二个表达式都为 true 时, 整个运算结果才为...

  • &&和&,|和||的区别

    1 &&和&的区别 1 单&时,无论左边真假,右边都会进行计算 2 双&&时,只有左边为真时,右边才会进行计算,左...

  • null 和 undefined 的区别 ==和===的区别

    1.null 和 undefined 的区别 undefined 为变量未定义的值undefined表示"缺少值"...

  • is和 == 的区别

    为什么有时写代码 is 和 == 的结果相同,有的不相同呢? 分析: 官方文档中说 is 表示的是对象标示符(ob...

  • is和==的区别

    is 和 == 的区别 id()官网描述 def id(*args, **kwargs): # real sign...

  • *和**的区别

    **两个乘号就是乘方,比如2**4,结果就是2的4次方,结果是16 一个乘号*,如果操作数是两个数字,就是这两个数...

  • ${}和#{}的区别

    ${} 注入什么就是什么,且如果是简单类型的值需要用 value 来接收#{} 将传入的数据都当成一个字符串,会对...

  • is和==的区别

    is 是比较两个引用是否指向了同一个对象(引用比较)。 == 是比较两个对象是否相等。

  • .和..的区别

    .指的是当前目录; ..指的是上级目录; cd .. 进入上级目录 open ..打开上级目录; cd .进入本级...

网友评论

    本文标题:==和===的区别

    本文链接:https://www.haomeiwen.com/subject/qwupyxtx.html