美文网首页饥人谷技术博客
JS中=、==、===的区别

JS中=、==、===的区别

作者: 辉夜乀 | 来源:发表于2017-04-06 08:19 被阅读14次

    JS中的=、==、===是不同的

    “=”表示赋值,

    把后面的值赋给前面

    var a=1  // 赋值
    

    “==”相等运算符,

    宽松的比较两个数据,如果两个数据类型相同,就直接比较,如果两个数据类型不同,则会先转化数据类型相同,再比较

    • 原始类型间的比较
    // 原始类型的数据会转换成数值类型再比较
    
    1 == true // true
    // 等同于 1 === 1
    
    0 == false // true
    // 等同于 0 === 0
    
    2 == true // false
    // 等同于 2 === 1
    
    2 == false // false
    // 等同于 2 === 0
    
    'true' == true // false
    // 等同于 Number('true') === Number(true)
    // 等同于 NaN === 1
    
    '' == 0 // true
    // 等同于 Number('') === 0
    // 等同于 0 === 0
    
    '' == false  // true
    // 等同于 Number('') === Number(false)
    // 等同于 0 === 0
    
    '1' == true  // true
    // 等同于 Number('1') === Number(true)
    // 等同于 1 === 1
    
    '\n  123  \t' == 123 // true
    // 因为字符串转为数字时,省略前置和后置的空格
    
    • 对象与原始类型比较
    // 对象与原始类型的值比较时,对象转化成原始类型的值,再进行比较。
    
    [1] == 1 // true
    // 等同于 Number([1]) == 1
    
    [1] == '1' // true
    // 等同于 String([1]) == Number('1')
    
    [1] == true // true
    // 等同于 Number([1]) == Number(true)
    
    • undefined 和 null
    false == null // false
    false == undefined // false
    
    0 == null // false
    0 == undefined // false
    // undefined 和 null与其他类型的值比较时,结果都为false
    
    undefined == null // true
    undefined 和 null 比较时,结果为 true
    

    “===” 严格相等运算符

    严格相等运算符(===)比较它们是否为“同一个值”。如果两个值不是同一类型,严格相等运算符(===)直接返回false

    • 不同类型的值
    1 === "1" // false
    true === "true" // false
    // 不同类型的值直接返回 false
    
    • 同一类的原始类型值
    1 === 0x1 // true
    // 十进制和十六进制的 1 ,是相同的值,同一类型
    
    • 同一类的复合类型值
      两个复合类型(对象、数组、函数)的数据比较时,不是比较它们的值是否相等,而是比较它们是否指向同一个对象。
    {} === {} // false
    [] === [] // false
    (function (){} === function (){}) // false
    // 严格相等运算比较的是,它们是否引用同一个内存地址
    

    相关文章

      网友评论

        本文标题:JS中=、==、===的区别

        本文链接:https://www.haomeiwen.com/subject/fxyfattx.html