Hướng dẫn how many ways can you compare objects in javascript? - có bao nhiêu cách bạn có thể so sánh các đối tượng trong javascript?

Thật đơn giản để so sánh các giá trị nguyên thủy trong JavaScript. Chỉ cần sử dụng bất kỳ toán tử EQality nào có sẵn, ví dụ như bình đẳng nghiêm ngặt:

javascript

'a' === 'c'; // => false

1 === 1; // => true

Các đối tượng, tuy nhiên, khó so sánh hơn vì chúng là dữ liệu có cấu trúc. Trong bài đăng này, bạn sẽ học cách so sánh chính xác các đối tượng trong JavaScript.

1. Bình đẳng tham chiếu

JavaScript cung cấp 3 cách để so sánh các giá trị:

  • Toán tử bình đẳng nghiêm ngặt ===
  • Toán tử bình đẳng lỏng lẻo ==
  • Hàm

    javascript

    const hero1 = {

    name: 'Batman'

    };

    const hero2 = {

    name: 'Batman'

    };

    hero1 === hero1; // => true

    hero1 === hero2; // => false

    hero1 == hero1; // => true

    hero1 == hero2; // => false

    Object.is(hero1, hero1); // => true

    Object.is(hero1, hero2); // => false

    0

Khi so sánh các đối tượng bằng cách sử dụng bất kỳ điều nào ở trên, so sánh đánh giá thành

javascript

const hero1 = {

name: 'Batman'

};

const hero2 = {

name: 'Batman'

};

hero1 === hero1; // => true

hero1 === hero2; // => false

hero1 == hero1; // => true

hero1 == hero2; // => false

Object.is(hero1, hero1); // => true

Object.is(hero1, hero2); // => false

1 chỉ khi tham chiếu giá trị được so sánh cùng một thể hiện đối tượng. Đây là sự bình đẳng tham khảo.

Hãy xác định các đối tượng

javascript

const hero1 = {

name: 'Batman'

};

const hero2 = {

name: 'Batman'

};

hero1 === hero1; // => true

hero1 === hero2; // => false

hero1 == hero1; // => true

hero1 == hero2; // => false

Object.is(hero1, hero1); // => true

Object.is(hero1, hero2); // => false

2 và

javascript

const hero1 = {

name: 'Batman'

};

const hero2 = {

name: 'Batman'

};

hero1 === hero1; // => true

hero1 === hero2; // => false

hero1 == hero1; // => true

hero1 == hero2; // => false

Object.is(hero1, hero1); // => true

Object.is(hero1, hero2); // => false

3 và xem sự bình đẳng tham khảo trong thực tế:

javascript

const hero1 = {

name: 'Batman'

};

const hero2 = {

name: 'Batman'

};

hero1 === hero1; // => true

hero1 === hero2; // => false

hero1 == hero1; // => true

hero1 == hero2; // => false

Object.is(hero1, hero1); // => true

Object.is(hero1, hero2); // => false

javascript

const hero1 = {

name: 'Batman'

};

const hero2 = {

name: 'Batman'

};

hero1 === hero1; // => true

hero1 === hero2; // => false

hero1 == hero1; // => true

hero1 == hero2; // => false

Object.is(hero1, hero1); // => true

Object.is(hero1, hero2); // => false

4 đánh giá thành

javascript

const hero1 = {

name: 'Batman'

};

const hero2 = {

name: 'Batman'

};

hero1 === hero1; // => true

hero1 === hero2; // => false

hero1 == hero1; // => true

hero1 == hero2; // => false

Object.is(hero1, hero1); // => true

Object.is(hero1, hero2); // => false

1 vì cả hai toán hạng đều chỉ vào cùng một thể hiện đối tượng

javascript

const hero1 = {

name: 'Batman'

};

const hero2 = {

name: 'Batman'

};

hero1 === hero1; // => true

hero1 === hero2; // => false

hero1 == hero1; // => true

hero1 == hero2; // => false

Object.is(hero1, hero1); // => true

Object.is(hero1, hero2); // => false

2.

Mặt khác,

javascript

const hero1 = {

name: 'Batman'

};

const hero2 = {

name: 'Batman'

};

hero1 === hero1; // => true

hero1 === hero2; // => false

hero1 == hero1; // => true

hero1 == hero2; // => false

Object.is(hero1, hero1); // => true

Object.is(hero1, hero2); // => false

7 đánh giá thành

javascript

const hero1 = {

name: 'Batman'

};

const hero2 = {

name: 'Batman'

};

hero1 === hero1; // => true

hero1 === hero2; // => false

hero1 == hero1; // => true

hero1 == hero2; // => false

Object.is(hero1, hero1); // => true

Object.is(hero1, hero2); // => false

8 vì các toán hạng

javascript

const hero1 = {

name: 'Batman'

};

const hero2 = {

name: 'Batman'

};

hero1 === hero1; // => true

hero1 === hero2; // => false

hero1 == hero1; // => true

hero1 == hero2; // => false

Object.is(hero1, hero1); // => true

Object.is(hero1, hero2); // => false

2 và

javascript

const hero1 = {

name: 'Batman'

};

const hero2 = {

name: 'Batman'

};

hero1 === hero1; // => true

hero1 === hero2; // => false

hero1 == hero1; // => true

hero1 == hero2; // => false

Object.is(hero1, hero1); // => true

Object.is(hero1, hero2); // => false

3 là các trường hợp đối tượng khác nhau.

Điều thú vị là

javascript

const hero1 = {

name: 'Batman'

};

const hero2 = {

name: 'Batman'

};

hero1 === hero1; // => true

hero1 === hero2; // => false

hero1 == hero1; // => true

hero1 == hero2; // => false

Object.is(hero1, hero1); // => true

Object.is(hero1, hero2); // => false

2 và

javascript

const hero1 = {

name: 'Batman'

};

const hero2 = {

name: 'Batman'

};

hero1 === hero1; // => true

hero1 === hero2; // => false

hero1 == hero1; // => true

hero1 == hero2; // => false

Object.is(hero1, hero1); // => true

Object.is(hero1, hero2); // => false

3 Đối tượng có cùng nội dung: cả hai đều có một thuộc tính

javascript

function isHeroEqual(object1, object2) {

return object1.name === object2.name;

}

const hero1 = {

name: 'Batman'

};

const hero2 = {

name: 'Batman'

};

const hero3 = {

name: 'Joker'

};

isHeroEqual(hero1, hero2); // => true

isHeroEqual(hero1, hero3); // => false

3 với giá trị

javascript

function isHeroEqual(object1, object2) {

return object1.name === object2.name;

}

const hero1 = {

name: 'Batman'

};

const hero2 = {

name: 'Batman'

};

const hero3 = {

name: 'Joker'

};

isHeroEqual(hero1, hero2); // => true

isHeroEqual(hero1, hero3); // => false

4. Tuy nhiên, thậm chí so sánh các đối tượng của cùng một cấu trúc,

javascript

const hero1 = {

name: 'Batman'

};

const hero2 = {

name: 'Batman'

};

hero1 === hero1; // => true

hero1 === hero2; // => false

hero1 == hero1; // => true

hero1 == hero2; // => false

Object.is(hero1, hero1); // => true

Object.is(hero1, hero2); // => false

7 đánh giá thành

javascript

const hero1 = {

name: 'Batman'

};

const hero2 = {

name: 'Batman'

};

hero1 === hero1; // => true

hero1 === hero2; // => false

hero1 == hero1; // => true

hero1 == hero2; // => false

Object.is(hero1, hero1); // => true

Object.is(hero1, hero2); // => false

8.

Bình đẳng tham chiếu là hữu ích khi bạn muốn so sánh các tài liệu tham khảo đối tượng, thay vì nội dung của chúng.

Nhưng trong hầu hết các tình huống bạn cần so sánh nội dung thực tế của các đối tượng: các thuộc tính và giá trị của chúng. Hãy xem làm thế nào để làm điều đó.

2. So sánh thủ công

Cách rõ ràng để so sánh các đối tượng bằng nội dung là đọc các thuộc tính và so sánh chúng theo cách thủ công.

Ví dụ: chúng ta hãy viết một chức năng đặc biệt

javascript

function isHeroEqual(object1, object2) {

return object1.name === object2.name;

}

const hero1 = {

name: 'Batman'

};

const hero2 = {

name: 'Batman'

};

const hero3 = {

name: 'Joker'

};

isHeroEqual(hero1, hero2); // => true

isHeroEqual(hero1, hero3); // => false

7 so sánh 2 đối tượng anh hùng:

javascript

function isHeroEqual(object1, object2) {

return object1.name === object2.name;

}

const hero1 = {

name: 'Batman'

};

const hero2 = {

name: 'Batman'

};

const hero3 = {

name: 'Joker'

};

isHeroEqual(hero1, hero2); // => true

isHeroEqual(hero1, hero3); // => false

javascript

function isHeroEqual(object1, object2) {

return object1.name === object2.name;

}

const hero1 = {

name: 'Batman'

};

const hero2 = {

name: 'Batman'

};

const hero3 = {

name: 'Joker'

};

isHeroEqual(hero1, hero2); // => true

isHeroEqual(hero1, hero3); // => false

7 truy cập vào thuộc tính

javascript

function isHeroEqual(object1, object2) {

return object1.name === object2.name;

}

const hero1 = {

name: 'Batman'

};

const hero2 = {

name: 'Batman'

};

const hero3 = {

name: 'Joker'

};

isHeroEqual(hero1, hero2); // => true

isHeroEqual(hero1, hero3); // => false

3 của cả hai đối tượng và so sánh các giá trị của chúng.

Nếu các đối tượng được so sánh có một vài thuộc tính, tôi thích viết các hàm so sánh như

javascript

function isHeroEqual(object1, object2) {

return object1.name === object2.name;

}

const hero1 = {

name: 'Batman'

};

const hero2 = {

name: 'Batman'

};

const hero3 = {

name: 'Joker'

};

isHeroEqual(hero1, hero2); // => true

isHeroEqual(hero1, hero3); // => false

7. Các chức năng như vậy có hiệu suất tốt - chỉ một vài người truy cập tài sản và nhà khai thác bình đẳng có liên quan đến việc so sánh.

So sánh thủ công yêu cầu trích xuất thủ công các thuộc tính - đối với các đối tượng đơn giản, đó không phải là vấn đề. Nhưng để so sánh các đối tượng lớn hơn (hoặc các đối tượng của cấu trúc chưa biết), so sánh thủ công không thuận tiện vì nó đòi hỏi nhiều mã nồi hơi.

Hãy xem làm thế nào sự bình đẳng nông của các đối tượng có thể giúp ích.

3. Bình đẳng nông

Trong quá trình kiểm tra bình đẳng nông của các đối tượng, bạn nhận được danh sách các thuộc tính (sử dụng

javascript

function shallowEqual(object1, object2) {

const keys1 = Object.keys(object1);

const keys2 = Object.keys(object2);

if (keys1.length !== keys2.length) {

return false;

}

for (let key of keys1) {

if (object1[key] !== object2[key]) {

return false;

}

}

return true;

}

1) của cả hai đối tượng, sau đó kiểm tra các giá trị của các thuộc tính cho sự bình đẳng.

Đây là việc thực hiện kiểm tra bình đẳng nông:

javascript

function shallowEqual(object1, object2) {

const keys1 = Object.keys(object1);

const keys2 = Object.keys(object2);

if (keys1.length !== keys2.length) {

return false;

}

for (let key of keys1) {

if (object1[key] !== object2[key]) {

return false;

}

}

return true;

}

Bên trong hàm,

javascript

function shallowEqual(object1, object2) {

const keys1 = Object.keys(object1);

const keys2 = Object.keys(object2);

if (keys1.length !== keys2.length) {

return false;

}

for (let key of keys1) {

if (object1[key] !== object2[key]) {

return false;

}

}

return true;

}

2 và

javascript

function shallowEqual(object1, object2) {

const keys1 = Object.keys(object1);

const keys2 = Object.keys(object2);

if (keys1.length !== keys2.length) {

return false;

}

for (let key of keys1) {

if (object1[key] !== object2[key]) {

return false;

}

}

return true;

}

3 là các mảng chứa tương ứng tên thuộc tính của

javascript

function shallowEqual(object1, object2) {

const keys1 = Object.keys(object1);

const keys2 = Object.keys(object2);

if (keys1.length !== keys2.length) {

return false;

}

for (let key of keys1) {

if (object1[key] !== object2[key]) {

return false;

}

}

return true;

}

4 và

javascript

function shallowEqual(object1, object2) {

const keys1 = Object.keys(object1);

const keys2 = Object.keys(object2);

if (keys1.length !== keys2.length) {

return false;

}

for (let key of keys1) {

if (object1[key] !== object2[key]) {

return false;

}

}

return true;

}

5.

javascript

function shallowEqual(object1, object2) {

const keys1 = Object.keys(object1);

const keys2 = Object.keys(object2);

if (keys1.length !== keys2.length) {

return false;

}

for (let key of keys1) {

if (object1[key] !== object2[key]) {

return false;

}

}

return true;

}

6 Chu kỳ lặp lại trên các khóa và so sánh từng thuộc tính của

javascript

function shallowEqual(object1, object2) {

const keys1 = Object.keys(object1);

const keys2 = Object.keys(object2);

if (keys1.length !== keys2.length) {

return false;

}

for (let key of keys1) {

if (object1[key] !== object2[key]) {

return false;

}

}

return true;

}

4 và

javascript

function shallowEqual(object1, object2) {

const keys1 = Object.keys(object1);

const keys2 = Object.keys(object2);

if (keys1.length !== keys2.length) {

return false;

}

for (let key of keys1) {

if (object1[key] !== object2[key]) {

return false;

}

}

return true;

}

5 cho bình đẳng

javascript

function shallowEqual(object1, object2) {

const keys1 = Object.keys(object1);

const keys2 = Object.keys(object2);

if (keys1.length !== keys2.length) {

return false;

}

for (let key of keys1) {

if (object1[key] !== object2[key]) {

return false;

}

}

return true;

}

9.

Hãy sử dụng bình đẳng nông để so sánh các đối tượng với nhiều thuộc tính:

javascript

const hero1 = {

name: 'Batman',

realName: 'Bruce Wayne'

};

const hero2 = {

name: 'Batman',

realName: 'Bruce Wayne'

};

const hero3 = {

name: 'Joker'

};

shallowEqual(hero1, hero2); // => true

shallowEqual(hero1, hero3); // => false

javascript

const hero1 = {

name: 'Batman',

realName: 'Bruce Wayne'

};

const hero2 = {

name: 'Batman',

realName: 'Bruce Wayne'

};

const hero3 = {

name: 'Joker'

};

shallowEqual(hero1, hero2); // => true

shallowEqual(hero1, hero3); // => false

0 trả về

javascript

const hero1 = {

name: 'Batman'

};

const hero2 = {

name: 'Batman'

};

hero1 === hero1; // => true

hero1 === hero2; // => false

hero1 == hero1; // => true

hero1 == hero2; // => false

Object.is(hero1, hero1); // => true

Object.is(hero1, hero2); // => false

1 vì các đối tượng

javascript

const hero1 = {

name: 'Batman'

};

const hero2 = {

name: 'Batman'

};

hero1 === hero1; // => true

hero1 === hero2; // => false

hero1 == hero1; // => true

hero1 == hero2; // => false

Object.is(hero1, hero1); // => true

Object.is(hero1, hero2); // => false

2 và

javascript

const hero1 = {

name: 'Batman'

};

const hero2 = {

name: 'Batman'

};

hero1 === hero1; // => true

hero1 === hero2; // => false

hero1 == hero1; // => true

hero1 == hero2; // => false

Object.is(hero1, hero1); // => true

Object.is(hero1, hero2); // => false

3 có cùng các thuộc tính (

javascript

function isHeroEqual(object1, object2) {

return object1.name === object2.name;

}

const hero1 = {

name: 'Batman'

};

const hero2 = {

name: 'Batman'

};

const hero3 = {

name: 'Joker'

};

isHeroEqual(hero1, hero2); // => true

isHeroEqual(hero1, hero3); // => false

3 và

javascript

const hero1 = {

name: 'Batman',

realName: 'Bruce Wayne'

};

const hero2 = {

name: 'Batman',

realName: 'Bruce Wayne'

};

const hero3 = {

name: 'Joker'

};

shallowEqual(hero1, hero2); // => true

shallowEqual(hero1, hero3); // => false

5) với cùng các giá trị.

Ở phía bên kia,

javascript

const hero1 = {

name: 'Batman',

realName: 'Bruce Wayne'

};

const hero2 = {

name: 'Batman',

realName: 'Bruce Wayne'

};

const hero3 = {

name: 'Joker'

};

shallowEqual(hero1, hero2); // => true

shallowEqual(hero1, hero3); // => false

6 trả về

javascript

const hero1 = {

name: 'Batman'

};

const hero2 = {

name: 'Batman'

};

hero1 === hero1; // => true

hero1 === hero2; // => false

hero1 == hero1; // => true

hero1 == hero2; // => false

Object.is(hero1, hero1); // => true

Object.is(hero1, hero2); // => false

8 kể từ

javascript

const hero1 = {

name: 'Batman'

};

const hero2 = {

name: 'Batman'

};

hero1 === hero1; // => true

hero1 === hero2; // => false

hero1 == hero1; // => true

hero1 == hero2; // => false

Object.is(hero1, hero1); // => true

Object.is(hero1, hero2); // => false

2 và

javascript

const hero1 = {

name: 'Batman',

realName: 'Bruce Wayne'

};

const hero2 = {

name: 'Batman',

realName: 'Bruce Wayne'

};

const hero3 = {

name: 'Joker'

};

shallowEqual(hero1, hero2); // => true

shallowEqual(hero1, hero3); // => false

9 có các thuộc tính khác nhau.

Nếu các giá trị của các thuộc tính của các đối tượng để so sánh là các giá trị nguyên thủy, kiểm tra bình đẳng nông là cách để đi.

Nhưng các đối tượng trong JavaScript có thể được lồng nhau. Trong trường hợp như vậy, thật không may, sự bình đẳng nông không hoạt động tốt.

Hãy thực hiện kiểm tra bình đẳng nông trên các đối tượng có các đối tượng lồng nhau:

javascript

const hero1 = {

name: 'Batman',

address: {

city: 'Gotham'

}

};

const hero2 = {

name: 'Batman',

address: {

city: 'Gotham'

}

};

shallowEqual(hero1, hero2); // => false

Lần này, ngay cả cả

javascript

const hero1 = {

name: 'Batman'

};

const hero2 = {

name: 'Batman'

};

hero1 === hero1; // => true

hero1 === hero2; // => false

hero1 == hero1; // => true

hero1 == hero2; // => false

Object.is(hero1, hero1); // => true

Object.is(hero1, hero2); // => false

2 và

javascript

const hero1 = {

name: 'Batman'

};

const hero2 = {

name: 'Batman'

};

hero1 === hero1; // => true

hero1 === hero2; // => false

hero1 == hero1; // => true

hero1 == hero2; // => false

Object.is(hero1, hero1); // => true

Object.is(hero1, hero2); // => false

3 có cùng một nội dung,

javascript

const hero1 = {

name: 'Batman',

realName: 'Bruce Wayne'

};

const hero2 = {

name: 'Batman',

realName: 'Bruce Wayne'

};

const hero3 = {

name: 'Joker'

};

shallowEqual(hero1, hero2); // => true

shallowEqual(hero1, hero3); // => false

0 trả về

javascript

const hero1 = {

name: 'Batman'

};

const hero2 = {

name: 'Batman'

};

hero1 === hero1; // => true

hero1 === hero2; // => false

hero1 == hero1; // => true

hero1 == hero2; // => false

Object.is(hero1, hero1); // => true

Object.is(hero1, hero2); // => false

8.

Các đối tượng lồng nhau

javascript

const hero1 = {

name: 'Batman',

address: {

city: 'Gotham'

}

};

const hero2 = {

name: 'Batman',

address: {

city: 'Gotham'

}

};

shallowEqual(hero1, hero2); // => false

4 và

javascript

const hero1 = {

name: 'Batman',

address: {

city: 'Gotham'

}

};

const hero2 = {

name: 'Batman',

address: {

city: 'Gotham'

}

};

shallowEqual(hero1, hero2); // => false

5 là các thể hiện đối tượng khác nhau. Do đó, bình đẳng nông cho rằng

javascript

const hero1 = {

name: 'Batman',

address: {

city: 'Gotham'

}

};

const hero2 = {

name: 'Batman',

address: {

city: 'Gotham'

}

};

shallowEqual(hero1, hero2); // => false

4 và

javascript

const hero1 = {

name: 'Batman',

address: {

city: 'Gotham'

}

};

const hero2 = {

name: 'Batman',

address: {

city: 'Gotham'

}

};

shallowEqual(hero1, hero2); // => false

5 là các giá trị khác nhau.

May mắn thay, sự bình đẳng sâu sắc so sánh chính xác các đối tượng chứa các đối tượng khác. Hãy xem nó hoạt động như thế nào.

4. Bình đẳng sâu sắc

Sự bình đẳng sâu sắc tương tự như bình đẳng nông, nhưng với một sự khác biệt. Trong quá trình kiểm tra nông, nếu các thuộc tính được so sánh là đối tượng, kiểm tra bình đẳng nông đệ quy được thực hiện trên các đối tượng lồng nhau này.

Hãy xem việc thực hiện kiểm tra bình đẳng sâu:

javascript

function deepEqual(object1, object2) {

const keys1 = Object.keys(object1);

const keys2 = Object.keys(object2);

if (keys1.length !== keys2.length) {

return false;

}

for (const key of keys1) {

const val1 = object1[key];

const val2 = object2[key];

const areObjects = isObject(val1) && isObject(val2);

if (

areObjects && !deepEqual(val1, val2) ||

!areObjects && val1 !== val2

) {

return false;

}

}

return true;

}

function isObject(object) {

return object != null && typeof object === 'object';

}

Dòng được tô sáng

javascript

const hero1 = {

name: 'Batman',

address: {

city: 'Gotham'

}

};

const hero2 = {

name: 'Batman',

address: {

city: 'Gotham'

}

};

shallowEqual(hero1, hero2); // => false

8 chỉ ra rằng ngay khi các thuộc tính được so sánh là đối tượng, một cuộc gọi đệ quy bắt đầu xác minh xem các đối tượng lồng nhau cũng bằng nhau.

Bây giờ, chúng ta hãy xem một ví dụ về

javascript

const hero1 = {

name: 'Batman',

address: {

city: 'Gotham'

}

};

const hero2 = {

name: 'Batman',

address: {

city: 'Gotham'

}

};

shallowEqual(hero1, hero2); // => false

9:

javascript

const hero1 = {

name: 'Batman',

address: {

city: 'Gotham'

}

};

const hero2 = {

name: 'Batman',

address: {

city: 'Gotham'

}

};

deepEqual(hero1, hero2); // => true

Hàm bình đẳng sâu xác định chính xác rằng

javascript

const hero1 = {

name: 'Batman'

};

const hero2 = {

name: 'Batman'

};

hero1 === hero1; // => true

hero1 === hero2; // => false

hero1 == hero1; // => true

hero1 == hero2; // => false

Object.is(hero1, hero1); // => true

Object.is(hero1, hero2); // => false

2 và

javascript

const hero1 = {

name: 'Batman'

};

const hero2 = {

name: 'Batman'

};

hero1 === hero1; // => true

hero1 === hero2; // => false

hero1 == hero1; // => true

hero1 == hero2; // => false

Object.is(hero1, hero1); // => true

Object.is(hero1, hero2); // => false

3 có cùng các thuộc tính và giá trị, bao gồm cả sự bình đẳng của các đối tượng lồng nhau

javascript

const hero1 = {

name: 'Batman',

address: {

city: 'Gotham'

}

};

const hero2 = {

name: 'Batman',

address: {

city: 'Gotham'

}

};

shallowEqual(hero1, hero2); // => false

4 và

javascript

const hero1 = {

name: 'Batman',

address: {

city: 'Gotham'

}

};

const hero2 = {

name: 'Batman',

address: {

city: 'Gotham'

}

};

shallowEqual(hero1, hero2); // => false

5.

Để so sánh sâu sắc các đối tượng tôi khuyên bạn nên sử dụng:

  • isdeepstrictequal (object1, object2) của nút tích hợp

    javascript

    function deepEqual(object1, object2) {

    const keys1 = Object.keys(object1);

    const keys2 = Object.keys(object2);

    if (keys1.length !== keys2.length) {

    return false;

    }

    for (const key of keys1) {

    const val1 = object1[key];

    const val2 = object2[key];

    const areObjects = isObject(val1) && isObject(val2);

    if (

    areObjects && !deepEqual(val1, val2) ||

    !areObjects && val1 !== val2

    ) {

    return false;

    }

    }

    return true;

    }

    function isObject(object) {

    return object != null && typeof object === 'object';

    }

    4
  • hoặc _.isequal (Object1, Object2) của thư viện

    javascript

    function deepEqual(object1, object2) {

    const keys1 = Object.keys(object1);

    const keys2 = Object.keys(object2);

    if (keys1.length !== keys2.length) {

    return false;

    }

    for (const key of keys1) {

    const val1 = object1[key];

    const val2 = object2[key];

    const areObjects = isObject(val1) && isObject(val2);

    if (

    areObjects && !deepEqual(val1, val2) ||

    !areObjects && val1 !== val2

    ) {

    return false;

    }

    }

    return true;

    }

    function isObject(object) {

    return object != null && typeof object === 'object';

    }

    5.

5. Tóm tắt

Bình đẳng tham chiếu (sử dụng ===, == hoặc

javascript

const hero1 = {

name: 'Batman'

};

const hero2 = {

name: 'Batman'

};

hero1 === hero1; // => true

hero1 === hero2; // => false

hero1 == hero1; // => true

hero1 == hero2; // => false

Object.is(hero1, hero1); // => true

Object.is(hero1, hero2); // => false

0) xác định xem các toán hạng có phải là cùng một thể hiện đối tượng hay không.

Kiểm tra bình đẳng thủ công yêu cầu so sánh thủ công các giá trị của các thuộc tính. Mặc dù séc này yêu cầu viết bằng tay các thuộc tính để so sánh, tôi thấy phương pháp này thuận tiện vì tính đơn giản của nó.

Khi các đối tượng được so sánh có rất nhiều thuộc tính hoặc cấu trúc của các đối tượng được xác định trong thời gian chạy, một cách tiếp cận tốt hơn là sử dụng kiểm tra nông.

Cuối cùng, nếu các đối tượng được so sánh có các đối tượng lồng nhau, kiểm tra bình đẳng sâu là cách để đi.

Hy vọng, bài viết của tôi đã giúp bạn hiểu các chi tiết cụ thể về việc kiểm tra các đối tượng trong JavaScript.

Vấn đề chính khi sử dụng

javascript

function deepEqual(object1, object2) {

const keys1 = Object.keys(object1);

const keys2 = Object.keys(object2);

if (keys1.length !== keys2.length) {

return false;

}

for (const key of keys1) {

const val1 = object1[key];

const val2 = object2[key];

const areObjects = isObject(val1) && isObject(val2);

if (

areObjects && !deepEqual(val1, val2) ||

!areObjects && val1 !== val2

) {

return false;

}

}

return true;

}

function isObject(object) {

return object != null && typeof object === 'object';

}

9 để so sánh các đối tượng là gì?

Có bao nhiêu cách bạn có thể so sánh hai đối tượng trong JavaScript?

JavaScript cung cấp 3 cách để so sánh các giá trị: Toán tử bình đẳng nghiêm ngặt === Toán tử bình đẳng lỏng lẻo == Object.is () hàm.3 ways to compare values: The strict equality operator === The loose equality operator == Object.is() function.

Chúng ta có thể so sánh các đối tượng trong JavaScript không?

Chúng tôi không thể thực hiện toán tử == hoặc hoặc người vận hành ===, để so sánh hai đối tượng.Cách tốt hơn để thực hiện so sánh là sử dụng JSON.Chuỗi và so sánh các đối tượng.. The better way to do the comparison is to use JSON. Stringify and compare the objects.

Tại sao JavaScript không thể so sánh hai đối tượng?

Thông thường, khi bạn so sánh các loại dữ liệu như INT và chuỗi trong JavaScript, bạn sử dụng các toán tử bình đẳng (== và ===).Tuy nhiên, so sánh các đối tượng với == và === sẽ không hoạt động.Để khắc phục điều này, một tùy chọn là xâu chuỗi cả hai đối tượng và sau đó sử dụng các toán tử bình đẳng.stringify both objects and then use the equality operators.

Bốn loại đối tượng JavaScript là gì?

Đối tượng JavaScript..
Booleans có thể là đối tượng (nếu được xác định với từ khóa mới).
Số có thể là đối tượng (nếu được xác định với từ khóa mới).
Chuỗi có thể là đối tượng (nếu được xác định với từ khóa mới).
Ngày luôn là đối tượng ..
Toán học luôn là đối tượng ..
Biểu thức chính quy luôn là đối tượng ..
Mảng luôn là đối tượng ..