JS中 == 和 === 的作用

2022-11-30 0 70

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

==相等运算符

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

  1. 如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值,即是调用Number()方法
  2. 如果一个操作数是字符串,另一个是数值,在比较相等性之前先将字符串转换为数值,同样调用Number()方法
  3. 如果一个操作数是对象,另一个操作数不是,则调用对象的valueOf()toString()方法把对象转换成基础类型的值再比较,除Date对象外,会优先尝试使用valueOf()方法,用得到的基本类型按照前面的规则进行比较。
  4. 以及null == undefined,此外任何其他组合,都不相等。
    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

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

    0 == "0"  //true
    0 == []   //true
    "0" == [] // false

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

    var obj = {valueOf: function(){ return {} }, toString: function(){ return {}}}
    console.log(obj == 0) // Uncaught TypeError: Cannot convert object to primitive value

    ===严格相等运算符

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

    1 === true //false
    1 === "1"  //false
    [] === ""  //false
    null === undefined //false

     

1. 本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解!如有侵权请邮件联系客服!cheeksyu@vip.qq.com
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
4. 如果您也有好的资源或教程,您可以投稿发布,成功分享后有积分奖励和额外收入!
5.严禁将资源用于任何违法犯罪行为,不得违反国家法律,否则责任自负,一切法律责任与本站无关

发表评论
暂无评论