js中的‘==’与‘===’

首先,看一个问题

var a = prompt();
if(a == 10)a+=1
console.log(a);

输入 a 为10,然后看结果 字符串类型的101

为了避免以后工作出错让自己蒙蔽半天浪费时间,在未工作之前先了解一下“= =”与’= = =’

= =(Equals Operator——等号运算符

假设有表达式 a = = b,则它的实际运算过程如下

  1. 计算出表达式 a 的结果,并存入 lref 变量
  2. 将 GetValue(lref) 的结果存入 lval 变量
  3. 计算出表达式 b 的结果,并存入 rref 变量
  4. 将 GetValue(rref) 的结果存入 rval 变量
  5. 执行 Abstract Equality Comparison 算法判断 rval = = lval 并将结果直接返回

Abstract Equality Comparison(抽象相等比较):

用上面的例子 a = = b(a,b为具体值)

1、 如果x和y的数据类型相同:

  1. 如果 x、y 为 Number:
    1.2.1. 如果 x或y 是 NaN,返回 false
    1.2.2. 如果 x 的数值与 y 相同,返回 true
    1.2.3. 如果 x 是 ±0 且 y 是 ±0,返回 true
    否则返回false
  2. 如果 x 、 y 为 String,则当且仅当 x 与 y 的字符序列完全相同(长度相等,每个位置上的字符相同)时返回 true,否则返回 false
  3. 如果 x 、 y 为 Boolean,则若 x 与 y 同为 true 或同为 false 时返回 true,否则返回 false
  4. 如果 x 和 y 引用的是同一个对象,返回 true,否则返回 false

2、 如果 x 为null或undefined且y为null或undefined 返回 true
3、如果 x、y任意一方 String,且另一方为Number。则尝试把String转化为Number——比较结果作为返回
4、 如果 x或y任意一方 为 Boolean,则尝试把Boolean转化为Number——比较结果作为返回值
5、 如果 x 为 String 或 Number 且 y 为 Object
或x 为 Object 且 y 为 String 或 Number
则把Object类型转为另一个的类型(String或者Number) ——比较结果作为返回值

不满足上述条件则返回 false

总结:

  1. 如果两边内容完全相同则返回true(null可以等于undefined)——NaN除外为false
    不相同时:
  2. 如果两边均不是Object类型,则尽量转化为Number进行比较
  3. 如果碰到有一边为Object类型另一边为基本类型,则转化为另一边的类型再作比较
  4. 如果两边都为Object则比较引用地址

=== Strict Equals Operator 严格等号运算符

就比较简单了

运行流程和等号运算符基本一样,不过调用的算法有点细微区别

  1. 两边数据类型不同直接false(1 = = = true //false)——数据类型要相同(null = = =undefined //false)
  2. 只要有一方NaN直接false
  3. 字符串比较字符长度和字符内容,两点有一点不同直接false
  4. object比较引用地址,地址不同直接false
    数据类型相同,然后数据内容完全相同才返回true

参考:
知乎林建入回答= =与= = =

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值