资讯专栏INFORMATION COLUMN

JavaScript 的等号运算符

iKcamp / 1843人阅读

摘要:判断相等的运算符分成相等运算符和全等运算符,似乎和并没有统一的翻译,且把它们分成相等和全等好了。相等运算符判断是否相等的规则如果操作数类型一致,且满足全等的条件,则相等,否则不相等。类型相同,但值不同,所以不全等。参考的等号运算符

JavaScript 判断相等的运算符分成相等运算符(==)和全等运算符(===),似乎=====并没有统一的翻译,且把它们分成"相等"和"全等"好了。

全等运算符

判断是否全等的规则:

如果操作数类型不同,那么不全等。

如果二者都是null, 全等。

如果都是undefined, 全等。

如果其中之一为NaN, 不全等。

如果二者都为truefalse, 全等。

如果都为数值且值相等,全等。

如果都为字符串,且值相等,全等。

如果都指向同一个引用类型,全等。

其他情况,不全等。

举例
// false, 类型不同#1
1 === "1" 

// fasle, #4
NaN === NaN 

// false, 虽然都是空对象,但不是同一个引用类型值
[] === []

// true, 同一个引用类型值
var firstObject = {}
var secondObject = firstObject
secondObject["name"] = "Neo"
secondObject === firstObject 
引用类型转换成基本类型

在之前的加法运算符里面也提到过引用类型到基本类型的转换,过程大致如下:

先调用valueOf方法,如果返回的是基本类型值,转换结束。

如果失败了,就调用toString方法。如果返回基本类型值,转换结束。

否则,抛出错误:TypeError: Cannot convert object to primitive value

大多数的原生对象在调用valueOf方法的时候都会返回对象自身,所以大多数时候其实都会调用toString方法。

Date对象比较特殊,它的valueOf方法返回的是毫秒数,在转换成基本类型值的时候直接调用toString方法。

相等运算符

判断是否相等的规则:

如果操作数类型一致,且满足全等的条件,则相等,否则不相等。

如果操作数类型不一致:

如果一个是null, 另一个是undefined, 相等。

如果一个是数字,另一个是字符串,把字符串转换成数字再比较。

如果一个是布尔值,把true转成1, false转成0, 然后再比较。

如果一个是对象,另一个是数字或者字符串,把对象转成基本类型值再比较。

其他情况,不相等。

举例
1 == true // true

根据条件2.3,把true转成1。

然后两个操作数类型一致,满足条件1,使用全等比较。

都为数值且相等,全等。

相等。

"" == 0 // true

根据2.2,把""转换成数字,即0。

然后两个操作数类型一致,满足条件1,使用全等比较。

都为数值且相等,全等。

相等。

null == 0 // false 

条件3,属于其他情况,不相等。

null == undefined

条件2.1,相等。

NaN == NaN // false

类型一致,转换成全等比较

NaN === NaN 不成立,因此不全等

所以不相等

[""] == "" // true

条件2.4,先把数组转换成基本类型

比较"" == "",类型相同,转成全等比较

类型相同,且值相同,全等。

相等。

{} == true // false

true转换成1,然后对象转换成基本类型值,即"[object Object]" == 1

条件2.2,把字符串转换成数字,得到NaN == 1,类型相同,转成全等比较。

类型相同,但值不同,所以不全等。

不相等。

初看上去,内容非常的繁杂,但是如果碰到的时候就来查一下,很快就能有肌肉记忆了。

参考:JavaScript 的等号运算符

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/79480.html

相关文章

  • javascript变量算符详解

    摘要:代码示例等号检查,类型转换后返回全等检查,由于时类型,时类型,类型不同,返回关系运算符关系运算符执行的是比较运算,通常用于判断两个变量哪个大哪个小关系运算符都返回一个布尔值。逻辑或运输符用双竖线表示。 1.运算符 JavaScript中常见的运算符包含:赋值运算符、算数运算符、等性运算符、关系运算符、条件运算符、布尔运算符、逻辑运算符…… 1.赋值运算符 = 赋值运算符=,用于给某个变...

    Sourcelink 评论0 收藏0
  • javascript等号判断相等流程

    摘要:数字,类型转换成数字进行比较和不会相互转换,相等有数字类型,和对象相比,对象用转换成原始值进行比较其他情况,一律返回 ===运算符判断相等的流程是怎样的 类型不同,不等 null,undefined,boolean,number这四个类型的只要值(数值)相等,就相等,-0 === 0 //true 只要其中有一个为NAN,则不等 string类型,长度/内容/编码不同,都是不等,相...

    RyanQ 评论0 收藏0
  • js双等号探索(三): [] == false为True,而!![] == false为False

    摘要:所以为为第二步转成根据文档比较操作符如果一个对象与数字或字符串相比较,会尝试返回对象的默认值。尝试将数字字面量转换为数字类型的值。 [] == false; //为True !![] == false; //为False 一、[] == false为True 第一步 转成[] == 0 根据 MDN Web 文档-比较操作符:https://developer.mozilla.org...

    DrizzleX 评论0 收藏0
  • js双等号探索(一): [] == ![]为Ture ?

    摘要:所以为第四步转成根据文档比较操作符当比较数字和字符串时,字符串会转换成数字值。尝试将数字字面量转换为数字类型的值。最后位所以为其他链接 [] == ![] //为True 第一步 转成[] == false 根据 MDN Web 文档-运算符优先级:[https://developer.mozilla.org...](https://developer.mozilla.org...s...

    CollinPeng 评论0 收藏0
  • js双等号探索(二): a==3&&a==4 为true ?

    摘要:前言为是可以实现的。在中,非对象参数将被视为一个冻结的普通对象,因此会返回。注意所以一定要是对象,如果是非对象的其他基本类型如,,被视为冻结对象,不能重写,则不起效果。第四步为这时已经为,运行返回值也为。最后为如上所示为,为,则为其他链接 前言 a==3 && a==4为True是可以实现的。具体代码如下所示: let a=[]; var x=3; a.valueOf=()=>{ ...

    cheng10 评论0 收藏0

发表评论

0条评论

iKcamp

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<