🌞

Bức ảnh chế thú vị về so sánh trong Javascript

Sửa bài viết này

Bộ ảnh thú vị mô tả kể chuyện so sánh trong Javascript, vô tình lụm xem được cái hình này trên Reddit

Nguyên tắc bắt cầu javascript

Bạn có thể copy nguyên đoạn code này paste vào trình duyệt để xem kết quả

0 == '0'
0 == []
// Nguyên tắc bắt cầu có đúng?

'0' == []

Chuyện gì đã xảy ra vậy?

0 == '0' // => true

Với các ngôn ngữ lập trình khác thì chưa biết, nhưng với javascript == sẽ tự ý chuyển 2 giá trị muốn so sánh về cùng một kiểu, hay người ta vẫn gọi là ko quan tâm đến kiểu dữ liệu khi so sánh.

Trong nhiều trường hợp chúng ta cũng có thể sử dụng cách so sánh == để tiện, javascript tự động chuyển về một kiểu, tuy nhiên sẽ ko khuyến khích cách này

Theo như specify

Nếu x = Number, y = String, trả về x == ToNumber(y),

Nó đưa giá trị bên phải về number mà không báo cho ai biết hết

Tự động convert string sang number

0 == [] // => true

Nếu x là String hoặc Number, y là Object, trả về x == ToPrimitive(y)

Array là object

Đúng! Array trong javascript cũng là object

ToPrimitive(y) ở đây, JS sẽ gọi vào hàm .toString để convert về kiểu primitive, trường hợp là array nó nối toàn bộ giá trị trong array thành chuỗi

[1, 2, 3].toString();
// => "1,2,3"
['hello','world'].toString();
// => "hello,world"
[].toString();
// => ""

Toàn bộ những điều vô lý này đã được đưa vào văn bản chính quy!

'0' == []

So sánh string và array

Cứ theo nguyên tắc đã quy định mà làm

Nếu x là String hoặc Number, y là Object, trả về x == ToPrimitive(y)

Bước một ToPrimitive([]) => chúng ta sẽ trở thành so sánh '0' == "", khác nhau rõ ràng hé.

Initializing...