欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

在JS中判斷兩個(gè)對(duì)象是否相等方法詳解

 更新時(shí)間:2023年05月09日 14:23:00   作者:施主來(lái)了  
在JavaScript中,判斷兩個(gè)對(duì)象是否相等有多種方法,取決于你對(duì)相等的定義以及對(duì)象屬性的類(lèi)型,本文將介紹幾種常見(jiàn)的方法,感興趣的同學(xué)可以參考閱讀

嚴(yán)格相等運(yùn)算符 (===)

使用 === 運(yùn)算符可以比較兩個(gè)對(duì)象是否引用同一個(gè)對(duì)象。如果兩個(gè)變量引用了同一個(gè)對(duì)象,則它們是相等的,否則它們是不相等的。例如:

const obj1 = { a: 1 };
const obj2 = { a: 1 };
const obj3 = obj1;

console.log(obj1 === obj2); // false
console.log(obj1 === obj3); // true

在上面的例子中,obj1obj2 的屬性值相同,但它們是不同的對(duì)象,因此它們的 === 比較返回 false。而 obj1obj3 引用了同一個(gè)對(duì)象,它們是相等的,因此 obj1 === obj3 返回 true。

這里就是嚴(yán)格比較,引用地址和屬性名屬性值都要一一對(duì)應(yīng)。

對(duì)象屬性的比較

如果你只是需要比較兩個(gè)對(duì)象的屬性是否相等(不比較引用地址),你可以使用循環(huán)或 Object.keys 方法來(lái)獲取對(duì)象屬性的列表,并比較它們的值。例如:

function isObjectEqual(obj1, obj2) {
  const obj1Keys = Object.keys(obj1);
  const obj2Keys = Object.keys(obj2);

  if (obj1Keys.length !== obj2Keys.length) {
    return false;
  }

  for (let key of obj1Keys) {
    if (obj1[key] !== obj2[key]) {
      return false;
    }
  }

  return true;
}

const obj1 = { a: 1, b: "hello" };
const obj2 = { a: 1, b: "world" };
const obj3 = { a: 1, b: "hello" };

console.log(isObjectEqual(obj1, obj2)); // false
console.log(isObjectEqual(obj1, obj3)); // true

在上面的例子中,isObjectEqual 函數(shù)比較了 obj1obj2 的屬性值并返回 false,因?yàn)樗鼈兊?b 屬性的值不相等。而 isObjectEqual(obj1, obj3) 返回 true,因?yàn)樗鼈兊乃袑傩灾刀枷嗟取?/p>

使用 Lodash 等工具庫(kù)判斷兩個(gè)對(duì)象是否相等

可以使用 Lodash 的 isEqual 方法(依然不比較引用地址)。isEqual 方法會(huì)遞歸比較兩個(gè)對(duì)象的屬性值是否相等,包括嵌套對(duì)象和數(shù)組。

const obj1 = { a: 1, b: { c: 2 } };
const obj2 = { a: 1, b: { c: 2 } };
const obj3 = { a: 1, b: { c: 3 } };

console.log(_.isEqual(obj1, obj2)); // true
console.log(_.isEqual(obj1, obj3)); // false

在上面的例子中,_.isEqual(obj1, obj2) 返回 true,因?yàn)樗鼈兊乃袑傩灾刀枷嗟龋ㄇ短椎膶?duì)象。而 _.isEqual(obj1, obj3) 返回 false,因?yàn)樗鼈兊?b.c 屬性的值不相等。

JSON.stringify 方法

如果你的對(duì)象中只包含簡(jiǎn)單類(lèi)型(如數(shù)字、字符串、布爾值和 null)以及其他對(duì)象或數(shù)組,則可以使用 JSON.stringify 方法將對(duì)象轉(zhuǎn)換為字符串,然后比較這些字符串(還是不比較引用地址)。例如:

const obj1 = { a: 1, b: "hello", c: true };
const obj2 = { a: 1, b: "hello", c: true };
const obj3 = { a: 1, b: "world", c: true };

console.log(JSON.stringify(obj1) === JSON.stringify(obj2)); // true
console.log(JSON.stringify(obj1) === JSON.stringify(obj3)); // false

在上面的例子中,JSON.stringify(obj1)JSON.stringify(obj2) 都返回相同的字符串,因此它們的比較返回 true。而 JSON.stringify(obj1)JSON.stringify(obj3) 返回不同的字符串,因此比較返回 false。

需要注意的是,這種方法只適用于簡(jiǎn)單類(lèi)型和嵌套對(duì)象或數(shù)組,因?yàn)樗鼰o(wú)法處理對(duì)象中包含函數(shù)、正則表達(dá)式和 Date 等類(lèi)型的情況。

使用 Object.is() 方法

它與 === 運(yùn)算符類(lèi)似,但是有一些特殊情況,例如 Object.is(+0, -0) 返回 false,而 === 運(yùn)算符返回 true

const obj1 = { a: 1 };
const obj2 = { a: 1 };
const obj3 = obj1;

console.log(Object.is(obj1, obj2)); // false
console.log(Object.is(obj1, obj3)); // true

在上面的例子中,Object.is(obj1, obj2) 返回 false,因?yàn)?nbsp;obj1 和 obj2 是兩個(gè)不同的對(duì)象,而 Object.is(obj1, obj3) 返回 true,因?yàn)?nbsp;obj1 和 obj3 引用了同一個(gè)對(duì)象。

到此這篇關(guān)于在JS中判斷兩個(gè)對(duì)象是否相等方法詳解的文章就介紹到這了,更多相關(guān)JS判斷兩個(gè)對(duì)象是否相等內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • javascript運(yùn)動(dòng)效果實(shí)例總結(jié)(放大縮小、滑動(dòng)淡入、滾動(dòng))

    javascript運(yùn)動(dòng)效果實(shí)例總結(jié)(放大縮小、滑動(dòng)淡入、滾動(dòng))

    這篇文章主要介紹了javascript運(yùn)動(dòng)效果,結(jié)合實(shí)例形式總結(jié)分析JavaScript實(shí)現(xiàn)放大縮小、滑動(dòng)淡入、滾動(dòng)等效果的方法,需要的朋友可以參考下
    2016-01-01
  • 詳解bootstrap的modal-remote兩種加載方式【強(qiáng)化】

    詳解bootstrap的modal-remote兩種加載方式【強(qiáng)化】

    本篇文章主要介紹了詳解bootstrap的modal-remote兩種加載方式【強(qiáng)化】,具有一定的參考價(jià)值,有興趣的可以了解一下。
    2017-01-01
  • JavaScript find()方法及返回?cái)?shù)據(jù)實(shí)例

    JavaScript find()方法及返回?cái)?shù)據(jù)實(shí)例

    這篇文章主要介紹了JavaScript中的find()方法和返回?cái)?shù)據(jù)的內(nèi)存指向,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • JavaScript實(shí)現(xiàn)百度搜索框效果

    JavaScript實(shí)現(xiàn)百度搜索框效果

    這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)百度搜索框效果 ,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • JavaScript的防抖和節(jié)流一起來(lái)了解下

    JavaScript的防抖和節(jié)流一起來(lái)了解下

    這篇文章主要為大家詳細(xì)介紹了JavaScript的防抖和節(jié)流,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • JavaScript精煉之構(gòu)造函數(shù) Constructor及Constructor屬性詳解

    JavaScript精煉之構(gòu)造函數(shù) Constructor及Constructor屬性詳解

    對(duì)象的constructor屬性用于返回創(chuàng)建該對(duì)象的函數(shù),也就是我們常說(shuō)的構(gòu)造函數(shù),除了創(chuàng)建對(duì)象,構(gòu)造函數(shù)(constructor) 還做了另一件有用的事情—自動(dòng)為創(chuàng)建的新對(duì)象設(shè)置了原型對(duì)象(prototype object)
    2015-11-11
  • 微信小程序?qū)崿F(xiàn)音頻文件播放進(jìn)度的實(shí)例代碼

    微信小程序?qū)崿F(xiàn)音頻文件播放進(jìn)度的實(shí)例代碼

    這篇文章主要介紹了微信小程序?qū)崿F(xiàn)音頻文件播放進(jìn)度的實(shí)例代碼,代碼包括對(duì)進(jìn)度條的實(shí)現(xiàn)及進(jìn)度條的滑動(dòng),對(duì)大家的工作或?qū)W習(xí)具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • postman自定義函數(shù)實(shí)現(xiàn) 時(shí)間函數(shù)的思路詳解

    postman自定義函數(shù)實(shí)現(xiàn) 時(shí)間函數(shù)的思路詳解

    Postman是一款功能強(qiáng)大的網(wǎng)頁(yè)調(diào)試與發(fā)送網(wǎng)頁(yè)HTTP請(qǐng)求的Chrome插件。這篇文章主要給大家介紹postman自定義函數(shù)實(shí)現(xiàn) 時(shí)間函數(shù)的思路詳解,感興趣的朋友一起看看吧
    2019-04-04
  • Javascript中parseInt的正確使用方式

    Javascript中parseInt的正確使用方式

    今天小編就為大家分享一篇關(guān)于Javascript中parseInt的正確使用方式,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-10-10
  • javascript 星級(jí)評(píng)分效果(手寫(xiě))

    javascript 星級(jí)評(píng)分效果(手寫(xiě))

    今天上午抽空隨手寫(xiě)了個(gè)星級(jí)評(píng)分的效果,給大家分享下。由于水平有限,如有問(wèn)題請(qǐng)指出;首先要準(zhǔn)備一張星星的圖片,灰色是默認(rèn)狀態(tài),黃色是選擇狀態(tài),需要的朋友可以參考下
    2012-12-12

最新評(píng)論