Hỏi về các phép so sánh trong JS

anh chị cho em hỏi với ạ : các phép so sánh trong js
câu 1 :

var a = [1, 2];
var b = [1, 2];
console.log(a === b);

em chạy chương trình thì là false nhưng em k hiểu vì sao

câu 2 :

var a = {
  foo: 'bar'
};
var b = {
  foo: 'bar'
};
console.log(a === b);

câu 3:

var a = '1000';
var b = '200';
console.log(a > b);

anh chị em có thể thông cái não này giúp em với không ạ . em chạy chương trình test thử thì kết quả đều là false nhưng em không thể giải thích được lý do . em đã search các kiểu k tìm dc nguyên nhân.
cám ơn anh chị ạ

Đối với 2 object, việc so sánh === cho kết quả true nếu 2 object đó là 1. Mảng là object.
Khi bạn gán a = [1, 2]; b = [1, 2]; là bạn đang gán a và b đến 2 đối tượng khác nhau (được đặt ở các vùng nhớ khác nhau trong bộ nhớ, mặc dù hai đối tượng này có cùng giá trị).

Phép === xảy ra nếu a = b; và ngược lại hoặc a = c; b = c;

Tương tự với a = {foo:"bar"}; b = {foo:"bar"};

Với câu 3, vì bạn so sánh chuỗi “1000” và “200”, nên kết quả sẽ là “1000” < “200”, chứ không phải so sánh 2 số. Nếu bạn muốn so sánh 2 số phải convert các chuỗi trên thành số: console.log(parseInt(a) > parseInt(b));

13 Likes

em cảm ơn anh nhiều ạ

Cám ơn bạn, bạn chia sẻ rất dễ hiểu. Mình học Javascript đến chỗ này cũng ko hiểu được ^^ :kissing_heart:

Dọc thêm bài này nữa để cũng cố kiến thức thêm

2 Likes

Đối với trường hợp 2 string thì theo mình biết là khi so sánh nó sẽ lấy giá trị unicode của string theo thứ tự. Theo đó ở đây thì a.charCodeAt(0) là 49, còn b.charCodeAt(0) là 50. Nên “1000” < “2” :slight_smile:

1 Like

hiểu hơn chút về so sánh kiểu này rồi

cho em hỏi ngu là trong 2 trường hợp trên thì nó có thể xảy ra trường hợp bằng nhau khi nào ạ.E cảm ơn.

So sánh object trong JS là so sánh xem có trùng nhau hay không.
Như là ta có 2 lon Coca, trông chúng giống hệt nhau nhưng vẫn là hai vật thể khác nhau. Thế nên

var lon1 = ["Cocacola", "Coke"], lon2 = ["Cocacola", "Coke"];
console.log(lon1 === lon2); // false

Nếu muốn chúng trả về True thì chúng phải là một

var lon1 = ["Cocacola", "Coke"];
var lon2 = lon1;
console.log(lon1 === lon2); // true
3 Likes

Vâng e cảm ơn ạ :grinning:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?