[JavaScript] So sánh kiểu dữ liệu trong câu chuyện "Phá vỡ quy luật bắc cầu"

LAMP Oct 13, 2020

Lời mở đầu

Xin chào mọi người, đây là lần đầu tiên mình viết bài trên blog lập trình nên có gì sai sót mong mọi người góp ý nhaaa... 😜😜😜 (Khuyến cáo là bài viết chỉ dành cho đối tượng mới bắt đầu với JS thui nha, chứ trình độ Junior với cao hơn thì chỉ mang tính giải trí 😌)

Trong bài viết này, mình muốn nhắc đến câu chuyện "Phá vỡ quy luật bắc cầu" trong so sánh kiểu dữ liệu của ngôn ngữ lập trình JavaScript - ngôn ngữ phổ biến nhất quả đất nè 👍👌 Chắc dân Dev bọn mình không ai là không biết nó nhỉ :'>

Nào! Bây giờ chúng ta cùng bắt đầu nhé!

Thế nào là "Phá vỡ quy luật bắc cầu" ?

Nguồn: Internet

Đúng quả là "A picture is worth a thousand words" - một bức ảnh có giá trị hàng ngàn câu chữ. Thế các bạn có đoán được câu chuyện mà mình muốn truyền tải ở đây là gì không nào ?

Dễ dàng thấy, chúng ta có thể thử ngay đoạn code trên trình duyệt để xem kết quả.

Liệu rằng "0" == [] ?

Kết quả sau khi áp dụng quy luật bắc cầu:

Tại sao vậy ? Đáng lẽ kết quả phải trả về "true" thì mới đúng chứ nhỉ. Nhưng điều vô lý này lại hoàn toàn hợp lý với JS. Khi sử dụng '==' sẽ tự ý chuyển hai giá trị cùng so sánh thành một kiểu mà không quan tâm đến kiểu dữ liệu.

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

JS sẽ ép kiểu số cho chuỗi bên phải mà chẳng cho ai biết 😎

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

Đúng vậy, trong JS thì mảng chính là đối tượng và khi ép kiểu ToPrimitive(y), JS sẽ gọi vào hàm .toString() để convert về kiểu primitive (kiểu nguyên thuỷ). Ví dụ trong trường hợp là array, nó sẽ nối toàn bộ giá trị trong array thành chuỗi:

Quay lại câu hỏi ban đầu trong câu chuyện "Phá vỡ quy luật bắc cầu" thì liệu nó còn đúng?

Giải thích rõ hơn một chút là nếu ToPrimitive([]) trong biểu thức '0' == [] thì vế phải sẽ được JS gọi hàm .toString() và trả về kết quả là chuỗi "".

Vậy là đã rõ rồi phải không nào ? Làm sao mà '0' == "" được ? Quá vô lý phải không nào?

Lời kết

Vậy là JS đã làm điều quá phi thường đúng không các bạn 🙈 Chuyện tưởng chừng "phá vỡ quy luật bắc cầu " lại hoá "bắc cầu", vô lý lại hoá hợp lý.

QUÁ XỊN LUÔN CÁC BẠN êi 😎😎😎

Bài viết của mình chỉ tạm đến đây thui nha. Mong được sự ủng hộ của mọi người để mình tiếp tục viết những bài mang đậm kiến thức chuyên ngành hơn ạ!

To: Miichisoft mãi iu ❤️❤️❤️

Tags

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.