F8

FULLSTACK HUB

Ôn Tập 14 tháng 7, 2026 lúc 14:55

28.3 Ép kiểu (Type coercion)



Tại sao ít khi chuyển kiểu dữ liệu khác sang Object?

Trong JavaScript, việc chuyển đổi từ các kiểu dữ liệu đơn giản sang Object không phổ biến do cấu trúc dữ liệu và mức độ phức tạp khác nhau. Ví dụ, chuyển một số hoặc chuỗi thành Object có thể không mang lại giá trị thực tế và làm tăng độ phức tạp của code.

Quy tắc ép kiểu ngầm trong JavaScript

Ép kiểu ngầm với toán tử so sánh ==

Trong JavaScript, khi so sánh hai giá trị xy với nhau bằng cách sử dụng x == y, kết quả sẽ trả về true hoặc false. Quá trình so sánh này được thực hiện như sau:
  • Nếu xy cùng kiểu dữ liệu:
    • Nếu cả hai là undefined hoặc null, trả về true.
    • Nếu là số:
      • Nếu một trong hai là NaN, trả về false.
      • Nếu cả hai số giống hệt nhau, trả về true.
    • Nếu là chuỗi, so sánh từng ký tự (cùng độ dài và giống nhau từng ký tự theo vị trí) để xác định chúng có giống hệt nhau không.
    • Nếu là boolean, trả về true nếu cả hai cùng true hoặc cùng false.
  • xnullyundefined, hoặc ngược lại, trả về true.
  • Nếu một trong hai là số và cái kia là chuỗi, chuyển đổi chuỗi thành số rồi so sánh.
  • Nếu một trong hai là boolean, chuyển đổi boolean thành số rồi so sánh.
  • Nếu một trong hai là đối tượng và cái kia là chuỗi hoặc số, chuyển đổi đối tượng thành giá trị nguyên thủy rồi so sánh.
  • Nếu không thỏa mãn các trường hợp trên, trả về false.
Trong trường hợp “Nếu xnullyundefined, hoặc ngược lại, trả về true,” không có sự ép kiểu ngầm định giữa nullundefined. Đây là một quy tắc đặc biệt trong JavaScript khi sử dụng toán tử so sánh bằng lỏng lẻo (==). Theo quy tắc này, null undefined được coi là bằng nhau mà không cần chuyển đổi kiểu dữ liệu của chúng. Điều này có nghĩa là không có sự chuyển đổi kiểu dữ liệu nào xảy ra; JavaScript đơn giản chỉ coi chúng là giống nhau trong trường hợp cụ thể này (so sánh ==).

Ép kiểu ngầm với toán tử số học

Toán tử cộng (+)

Trong JavaScript, toán tử cộng (+) có thể thực hiện cả phép cộng số học và nối chuỗi. Cách hoạt động của nó được xác định như sau:
  • Xem xét giá trị của biểu thức bên trái và bên phải của toán tử.
  • Chuyển đổi giá trị này sang kiểu nguyên thủy (ToPrimitive).
  • Nếu một trong hai giá trị sau khi chuyển đổi là chuỗi, thực hiện nối chuỗi.
  • Nếu không, chuyển đổi cả hai giá trị sang số (ToNumber) và thực hiện phép cộng.
Ví dụ:
  • "5" + 2 sẽ có kết quả là "52" (nối chuỗi).
  • 5 + "2" cũng sẽ trở thành "52".
  • 5 + 2 sẽ có kết quả là 7 (phép cộng số).

Toán tử trừ (-)

Toán tử trừ (-) chỉ thực hiện phép trừ số học. Trong quá trình này, toán tử trừ chuyển đổi cả hai giá trị sang số rồi mới thực hiện phép trừ.
  • 5 - "2" sẽ trả về 3 (chuyển "2" thành số).
  • "10" - "2" sẽ trả về 8 (chuyển "10""2" thành số).
Tham khảo thêm:  https://262.ecma-international.org/5.1/#sec-11.9.3

Bảng chuyển đổi kiểu dữ liệu

Bảng dưới đây cung cấp một cái nhìn tổng quan về cách các giá trị khác nhau trong JavaScript được chuyển đổi sang các kiểu dữ liệu Number, StringBoolean.
Giá trị gốcChuyển thành sốChuyển thành chuỗiChuyển thành boolean
false0“false”false
true1“true”true
00“0”false
11“1”true
“0”0“0”true
“000”0“000”true
“1”1“1”true
NaNNaN“NaN”false
InfinityInfinity“Infinity”true
-Infinity-Infinity“-Infinity”true
“”0“”false
“20”20“20”true
“twenty”NaN“twenty”true
[]0“”true
[20]20“20”true
[10, 20]NaN“10,20”true
[“twenty”]NaN“twenty”true
[“ten”, “twenty”] NaN“ten,twenty”true
function sum() {} NaN“function sum() {}”true
{}NaN“[object Object]”true
null0“null”false
undefinedNaN“undefined”false

Giá trị màu đỏ chỉ các giá trị mà một số lập trình viên có thể không mong đợi.

Tham khảo thêm: https://www.w3schools.com/js/js_type_conversion.asp

Lưu ý quan trọng

  • Nên sử dụng toán tử so sánh nghiêm ngặt: Để tránh những hành vi không mong muốn từ ép kiểu ngầm, nên sử dụng toán tử ===​. Toán tử này chỉ trả về true khi cả hai giá trị có cùng kiểu dữ liệu và giá trị.
  • Tư duy nghiêm ngặt với kiểu dữ liệu: Khi lập trình, hãy chú ý đến việc sử dụng cùng kiểu dữ liệu trong so sánh và các phép tính toán. Điều này giúp tránh những lỗi logic không mong muốn. 



Thống Kê Liên Kết

Nội bộ
0
Liên kết ngoài
2