zoukankan      html  css  js  c++  java
  • Js中==与===

    Js中==与===

    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
    

    if

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

    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");
    

    参考

    https://www.zhihu.com/question/31442029
    https://dorey.github.io/JavaScript-Equality-Table/#three-equals
    
  • 相关阅读:
    Session攻击(会话劫持+固定)与防御
    console调试命令
    javascript获取当前url
    搞不清FastCgi与PHP-fpm之间是个什么样的关系
    MySQL基本语句优化10个原则
    PHP获取类名及所有函数名
    js闭包
    字段、方法、属性
    python面向对象之类成员修饰符
    实现Python代码发送邮件
  • 原文地址:https://www.cnblogs.com/WindrunnerMax/p/12619512.html
Copyright © 2011-2022 走看看