【随笔】js中==和===区别

不忘编码·2022-03-03 11:06·52 次阅读

【随笔】js中==和===区别

等于操作符:==#

如果操作数相等,则返回 true。在比较过程中,会先进行类型转换,再确定操作数是否相等。

比较过程:

  • 相同操作类型,相同则进行操作数比较
  • 不同操作类型,先进行数据类型转换
    • 两个简单类型,字符串和布尔值都会转为数值,再比较
    • 简单类型与引用类型,对象转化成其原始类型的值,再比较
    • 两个引用类型,则比较是否指向同一对象
    • nullundefined 相等
    • 存在 NaN 则返回 false

布尔值和字符串,在与数值比较时,会转为数值进行比较

Copy
// true为布尔型,转为数值1 true == 1; // true // "1"为字符串型,转为数值1 "1" == 1; // true

布尔值和字符串比较,两侧类型不同,布尔值会转为数值0/1,此时为数值 == 字符串,两侧操作类型仍然不同,此时字符串会转为数值,进行 数值 === 数值比较,操作数相同返回 true

Copy
// 转为 1 === 1 true == "1"; // true // 转为 1 === 2 true == "2"; // false

// 对象属性一般为空(null) 或者为未定义(undefined)

Copy
null == undefined; // true "undefined" == undefined; // false

NaN表示一个值不是数值类型,判断一个值非数值类型使用isNaN()

Copy
NaN == NaN; // false isNaN(NaN); // true

两个对象,比较是否指向同一个对象

Copy
let obj1 = {name:"xxx"}; let obj2 = {name:"xxx"}; let obj2 = obj1; obj1 == obj2; // false obj1 == obj3; // true

全等操作符 ===#

只有两个操作数在不转换的前提下相等才返回true,要求类型相同,值相同。

比较过程:

  • 如果类型不同,就一定不相等
  • 如果两个都是数值,并且是同一个值,那么相等;如果其中至少一个是NaN,那么不相等。(判断一个值是否是NaN,只能使用isNaN( ) 来判断)
  • 如果两个都是字符串,每个位置的字符都一样,那么相等,否则不相等。
  • 如果两个值都是true,或是false,那么相等
  • 如果两个值都引用同一个对象或是函数,那么相等,否则不相等
  • 如果两个值都是null,或是undefined,那么相等

全等操作符不会进行类型转换

Copy
"1" === 1; // false,不相等,数据类型不同 1 === 1); // true,相等,数据类型相同值也相同

nullundefined与自身严格相等

Copy
null === null; // true undefined === undefined; // true

小结#

 
等于操作符 == 会经过类型转换后转为全等比较 === ,虽然容错性较高,但是 === 全等更加准确和高效,一般的等于操作建议使用 ===
对象属性的比较,如果是判断null 或者undefined,使用相等操作符==更加简洁。
 

Copy
 const obj = {};  if(obj.x == null){   ...  }  // 等同于  if(obj.x === null || obj.x === undefined){   ...  }

参考文档:
https://vue3js.cn/interview/JavaScript/%20_=.html
https://www.cnblogs.com/nelson-hu/p/7922731.html

posted @   江上一小白  阅读(52)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示
目录