日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

【前端工程师手册】说清楚JavaScript中的相等性判断

發(fā)布時(shí)間:2023/12/9 javascript 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【前端工程师手册】说清楚JavaScript中的相等性判断 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

有哪些判斷相等性的方法

JavaScript現(xiàn)在提供了三種方法來(lái)判斷相等性:

  • ===,三個(gè)等號(hào)即嚴(yán)格相等
  • ==,兩個(gè)等號(hào)即寬松相等
  • Object.is(),ES6中用來(lái)判斷相等的方法
  • 判斷相等性的細(xì)節(jié)

    ===(嚴(yán)格相等)

    被比較的兩個(gè)數(shù)不會(huì)進(jìn)行類型轉(zhuǎn)換,具體的比較過(guò)程如下:

  • 不同類型的值:直接返回false
  • 同一類型的基本類型的值:比較值是否相同,相同就返回true,不相同就返回false,有一個(gè)例外NaN === NaN返回false
  • 同一類的復(fù)合類型的值:比較它們是否指向同一個(gè)對(duì)象,是就返回true,否則返回false
  • 例子:

    var a = 2, b = '2' a === b // false undefined === null // false NaN === NaN // false +0 === -0 // true var f = function(){} var c = f, d = f; c === d // true 復(fù)制代碼

    ==(寬松相等)

    寬松相等主要是在某些情況下涉及到隱式類型轉(zhuǎn)換的問題,廢話不說(shuō),看一下MDN上面對(duì)寬松相等的規(guī)則總結(jié):

    總結(jié)一下就是:

  • 類型相同時(shí),結(jié)果和===一樣
  • undefined和null互相比較時(shí)為true,但是它們和其他類型比較時(shí)都為false
  • 原始類型A和原始類型B比較時(shí):ToNumber(A) === ToNumber(B)
  • 原始類型A和復(fù)合類型B比較時(shí):ToNumber(A) == ToPrimitive(B)
  • 那么ToNumber和ToPrimitive這兩個(gè)方法內(nèi)部到底是如何判斷的呢?查看一下ECMA說(shuō)明

    如果是這么個(gè)意思:

    ToNumber

  • undefined,返回NaN
  • null,返回+0
  • boolean,true返回1,false返回+0
  • number,直接返回自身
  • string,將字符串的內(nèi)容轉(zhuǎn)換為數(shù)字,轉(zhuǎn)換失敗則返回NaN。例如"123"這樣的就是返回123,"213a"這樣的返回NaN
  • symbol,拋出typeerror錯(cuò)誤
  • object,先調(diào)用toPrimitive,再對(duì)其結(jié)果調(diào)用toNumber
  • ToPrimitive

    首先這個(gè)方法有兩個(gè)參數(shù),input和preferredType,如果preferredType是number的話,大致過(guò)程如下:

  • 如果input就是原始類型,直接返回其自身
  • 調(diào)用input.valueOf(),如果結(jié)果是原始類型,則返回該結(jié)果
  • 調(diào)用input.toString(),如果結(jié)果是原始類型,則返回該結(jié)果
  • 拋出typeerror錯(cuò)誤
  • 如果preferredType是string,那么第2步和第3步順序反過(guò)來(lái)。
    如果preferredType沒有傳入的話:

    • 如果input是Date類型,則preferredType取string
    • 否則,preferredType取number

    Object.is

    這個(gè)方法大致和===一樣,除了以下:

  • Object.is(NaN, NaN) 返回true
  • Object.is(+0, -0) 返回false
  • 參考

    知乎-Javascript 中 == 和 === 區(qū)別是什么?
    全面解析js中的數(shù)據(jù)類型與類型轉(zhuǎn)換
    ECMA規(guī)范

    總結(jié)

    以上是生活随笔為你收集整理的【前端工程师手册】说清楚JavaScript中的相等性判断的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。