zoukankan      html  css  js  c++  java
  • JavaScript 相等(==)与全等(===)操作符

    FALSY值

    在 JavaScript 中只有 7 falsy 值。

    这意味着当 JavaScript 期望一个布尔值,并被给与下面值中的一个时,它总是会被当做 false。

    false false 关键字
    0 数值 zero
    0n BigInt 作为布尔值使用时, 遵从其作为数值的规则. 0nfalsy 值.
    " ", ' ',`` 这是一个空字符串 (字符串的长度为零). JavaScript 中的字符串可用双引号 "", 单引号 '', 或 模板字面量 `` 定义。
    null null - 缺少值
    undefined undefined - 原始值
    NaN NaN - 非数值

    TRUTHY值

    JavaScript 中,truthy(真值)指的是在布尔值上下文中,转换后的值为真的值。

    所有值都是真值,除非它们被定义为 假值(即除 false0""nullundefinedNaN 以外皆为真值)。

    /*
    * 注意:
    * 判断空数组或者空对象不能使用该方法判断。
    * 此问题常用对象、数据数据是否含有值的空值判断。
    * 
    */
    Boolean({})  // => TURE
    Boolean([])	 // => TRUE
    
    

    相等与全等

    相等与全等操作符最本质的区别是相等()操作符会先将两个操作数进行类型转换然后再进行比较。全等(=)操作符直接进行比较,而不做任何处理。

    相等

    相同数据类型比较规则:

    基本数据类型比较数值是否相等。
    引用数据类型比较内存地址是否相同。

    不同数据类型比较规则

    只要跟Number或者Boolean类型比较,都会将等式两边都转换为Number。
    如果操作数是字符串,另一个操作数是数值,则再比较相等性前先将字符串转换为数值。
    如果操作数是对象,另一个不是,则调用对象的valueOf()方法,用得到的基本类型按照上面的规则进行比较。

    比较规则

    类型 类型 其他说明
    对象 对象 比较是不是同一个内存地址
    对象 字符串 对象先转为字符串,在和字符串进行比较
    对象 布尔类型 两边都要先转为数值false 是 0,true 是 1对象类型先隐式调用toString()方法,然后在Number()
    对象 数字 对象要转为数字,在进行比较(对象先隐式调用toString()方法转为字符串,然后在把字符串转为数字使用Number()方法)
    数字 布尔 布尔转成数字(false 是 0,true 是 1),在和数字进行比较
    数字 字符串 字符串转成数字使用Number()方法,在和数字进行比较
    布尔 数字/字符 串 都转成数字在进行比较
    null undefined true
    null/undefined 其他类型 结果都是false
    NaN NaN false

    特殊情况

    /*
    * Number([]) 结果为0.
    * Number({}) 结果为NaN.	
    *
    */
    0 == []  // => true
    0 === [] // => false
    0 == {}  // => false
    0 === {} // => false
    
    /*
    * 常见问题	
    * 此问题类似取消定时器、节流、防抖函数监听。
    * 取消监听函数必须要求监听函数与取消监听函数内存地址完全一致。
    *
    */
    [] == [] 	// => false
    [] === [] 	// => false
    {} == {}	// => false
    {} === {}	// => false
    
    null == null 	    // => true
    null == undefined   // => true
    null === null 	    // => true
    null === undefined  // => false
    NaN == NaN          // => false
    NaN === NaN         // => false
    
  • 相关阅读:
    团队第二次冲刺10(6.03)
    购买图书问题
    找水王02
    学习进度13
    团队第二次冲刺09(6.02)
    团队第二次冲刺08(6.01)
    C++通过Swig跨线程回调Python代码
    Windows 10系统永久关闭Windows Defender Antivirus防病毒程序方法
    Windows系统Python直接调用C++ DLL
    Windows10系统Python2.7通过Swig调用C++过程
  • 原文地址:https://www.cnblogs.com/Scooby/p/13523949.html
Copyright © 2011-2022 走看看