Hướng dẫn how do you compare things in javascript? - làm thế nào để bạn so sánh mọi thứ 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ì?

Làm thế nào để bạn so sánh các đối tượng trong JavaScript?

Cách so sánh hai đối tượng trong JavaScript..
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à ===). ....
Để 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 ..

Chúng ta có thể so sánh 2 đố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.

== và === trong JavaScript là gì?

Các toán tử trong JavaScript được sử dụng để so sánh hai giá trị.Toán tử == Kiểm tra xem hai giá trị có bằng nhau không.The == operator checks if two values are equal. The != operator checks if two values are not equal.

Làm thế nào để bạn so sánh các biến trong JavaScript?

= được sử dụng để gán các giá trị cho một biến trong JavaScript.== được sử dụng để so sánh giữa hai biến không phân biệt kiểu dữ liệu của biến.=== được sử dụng để so sánh giữa hai biến nhưng điều này sẽ kiểm tra loại nghiêm ngặt, có nghĩa là nó sẽ kiểm tra kiểu dữ liệu và so sánh hai giá trị.== is used for comparison between two variables irrespective of the datatype of variable. === is used for comparision between two variables but this will check strict type, which means it will check datatype and compare two values.