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
0javascript
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
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
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.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
Hãy xác định các đối tượng
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ànhjavascript
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ượngjavascript
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.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
Mặt khác,
7 đánh giá thànhjavascript
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ạngjavascript
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.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
Điều thú vị là
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ínhjavascript
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ớ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
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 đánh giá thànhjavascript
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.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
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
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ínhjavascript
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.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
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ư
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.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
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
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.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;
}
Đâ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,
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ủajavascript
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ủajavascript
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 đẳngjavascript
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.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;
}
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
0 trả 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
1 vì các đối tượngjavascript
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
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à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
5] với cùng các giá trị.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
Ở phía bên kia,
6 trả 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
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'
};
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
9 có các thuộc tính khác nhau.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
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ả
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'
};
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 trả 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
8.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
Các đối tượng lồng nhau
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ằngjavascript
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.javascript
const hero1 = {
name: 'Batman',
address: {
city: 'Gotham'
}
};
const hero2 = {
name: 'Batman',
address: {
city: 'Gotham'
}
};
shallowEqual[hero1, hero2]; // => false
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
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.javascript
const hero1 = {
name: 'Batman',
address: {
city: 'Gotham'
}
};
const hero2 = {
name: 'Batman',
address: {
city: 'Gotham'
}
};
shallowEqual[hero1, hero2]; // => false
Bây giờ, chúng ta hãy xem một ví dụ về
9:javascript
const hero1 = {
name: 'Batman',
address: {
city: 'Gotham'
}
};
const hero2 = {
name: 'Batman',
address: {
city: 'Gotham'
}
};
shallowEqual[hero1, hero2]; // => false
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
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 nhaujavascript
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 vàjavascript
const hero1 = {
name: 'Batman',
address: {
city: 'Gotham'
}
};
const hero2 = {
name: 'Batman',
address: {
city: 'Gotham'
}
};
shallowEqual[hero1, hero2]; // => false
5.javascript
const hero1 = {
name: 'Batman',
address: {
city: 'Gotham'
}
};
const hero2 = {
name: 'Batman',
address: {
city: 'Gotham'
}
};
shallowEqual[hero1, hero2]; // => false
Để 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
4javascript
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';
}
- hoặc _.isequal [Object1, Object2] của thư viện
5.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. Tóm tắt
Bình đẳng tham chiếu [sử dụng ===
, ==
hoặc
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.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
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
9 để so sánh các đối tượng là gì?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';
}