Trong Javascript, có 2 cách thức nhìn có vẻ giống nhưng lại khác nhau hoàn toàn
để chúng ta so sánh các giá trị bằng nhau. Chúng chính là ==
và ===
.
===
:Khi chúng ta sử dụng ===
trong Javascript, chúng ta đang so sánh theo hướng strict equality
– nghiêm ngặt
, điều này có nghĩa là chúng ta đang so sánh cả giá trị lẫn kiểu dữ liệu của biến.
5 === 5;
=> true, cả 2 đều cùng giá trị và cùng kiểu Number
'hello world' === 'hello world'
=> true
true === true
=> true
Trong ví dụ thứ 2, chúng ta sẽ so sánh với nhiều trường hợp hơn:
console.log(77) // => 77
console.log('77') // => 77
77 === '77'
=> false
'cat' === 'dog'
=> false
false === 0
=> false
==
:Khi sử dụng ==
để so sánh trong Javascript, chúng ta đang so sánh theo hướng loose equlity
– lỏng lẻo
. Khi sử dụng ==
để so sánh cho các giá trị khác kiểu, Javascript sẽ thực hiện 1 quá trình phía dưới, gọi là type coercion
, nhằm ép kiểu để 2 phía của phép so sánh về cùng 1 kiểu giá trị để thực hiện so sánh. Ví dụ về ==
:
77 === '77'
=> false
77 == '77'
=> true
Các bạn có thể thấy, khi sử dụng ==
, dù khác kiểu nhưng 77
và '77'
lại bằng nhau . Khi thực hiện phép so sánh bằng ==
, Javascript sẽ chuyển đổi kiểu dữ liệu của '77'
giống với 77
(String
-> Number
). Nhưng đôi khi không phải lúc nào việc so sánh 2 giá trị khác kiểu cũng đều thuận lợi và dễ đoán. Đặc biệt, việc so sánh bằng ==
trong so sánh các giá trị falsy
cũng rất biến ảo:
// false, 0, ''
false === 0
=> false
false == 0
=> true
false === ''
=> false
false == ''
=> true
0 == ''
=> true
// null & undefined
null == null
=> true
undefined == undefined
=> true
undefined == null
=> true
// riêng với NaN, sẽ không có giá trị tương đương các falsy khác
null == NaN
=> false
Tiêu đề ở đây có nghĩa là: Javascript sẽ ép kiểu các giá trị dù không có yêu cầu ép kiểu nào
. Thông thường, chúng ta thường sử dụng cú pháp Number('7')
để chuyển chuỗi '7'
thành số. Nhưng nếu so sánh như ví dụ ở trên, Javascript đã tự động làm việc đó:
7 == '7'
=> true
Và bởi vì sự thay đổi kiểu của biến 1 cách âm thầm:
1 + 2 = 3
1 + "2" = "12"
1 * "2" = 2
1 + true = 2
4 / [2] = 2
You need to login in order to like this post: click here
YOU MIGHT ALSO LIKE