前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Js中==与===

Js中==与===

作者头像
WindrunnerMax
发布2020-08-27 10:21:42
3.7K0
发布2020-08-27 10:21:42
举报
文章被收录于专栏:Czy‘s BlogCzy‘s Blog

Js中==与===

JavaScript中提供==相等运算符与===严格相等运算符,建议是只要变量的数据类型能够确定,一律使用===

==相等运算符

==在判断相等时会进行隐式的类型转换, 其比较遵循一些原则,即先转换类型再比较

  1. 如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值,即是调用Number()方法
  2. 如果一个操作数是字符串,另一个是数值,在比较相等性之前先将字符串转换为数值,同样调用Number()方法
  3. 如果一个操作数是对象,另一个操作数不是,则调用对象的valueOf()toString()方法把对象转换成基础类型的值再比较,除Date对象外,会优先尝试使用valueOf()方法,用得到的基本类型按照前面的规则进行比较。
  4. 以及null == undefined,此外任何其他组合,都不相等。
代码语言:javascript
复制
1 == true //true // Number Boolean
2 == true //false
1 == "1"  //true // Number String
[] == ""  //true // Object String
[] == false // true // Object Boolean
[] == 0   //true // Object Number
[] == {}  //false
[] == []  //false
{} == {}  //false
null == undefined //true

在使用的时候可能会出现一些问题

代码语言:javascript
复制
0 == "0"  //true
0 == []   //true
"0" == [] // false

如果是直接实现了valueOf()toString()的方法,而不是调用原型链上的Object.prototype.valueOf()Object.prototype.toString()方法,甚至能够产生异常。

代码语言:javascript
复制
var obj = {valueOf: function(){ return {} }, toString: function(){ return {}}}
console.log(obj == 0) // Uncaught TypeError: Cannot convert object to primitive value

===严格相等运算符

===先判断类型再比较,类型不同直接不相等 ES6数据类型有NumberStringBooleanObjectSymbolnullundefined

代码语言:javascript
复制
1 === true //false
1 === "1"  //false
[] === ""  //false
null === undefined //false

if

if()也可以看作是一个单独的运算符类别

代码语言:javascript
复制
if(true) console.log("exec"); //exec
if(false) console.log("exec");
if(1) console.log("exec"); //exec
if(0) console.log("exec"); 
if(-1) console.log("exec"); //exec
if("true") console.log("exec"); //exec
if("1") console.log("exec"); //exec
if("0") console.log("exec"); //exec
if("") console.log("exec");
if(null) console.log("exec");
if(undefined) console.log("exec");
if("null") console.log("exec"); //exec
if("undefined") console.log("exec"); //exec
if([]) console.log("exec"); //exec
if({}) console.log("exec"); //exec
if([0]) console.log("exec"); //exec
if(NaN) console.log("exec");

参考

代码语言:javascript
复制
https://www.zhihu.com/question/31442029
https://dorey.github.io/JavaScript-Equality-Table/#three-equals
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-04-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Js中==与===
    • ==相等运算符
      • ===严格相等运算符
        • if
          • 参考
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档