Ép kiểu ngầm (implicit type coercion) trong JavaScript là một khái niệm cơ bản nhưng rất quan trọng, ảnh hưởng tới cách mà các biểu thức hoạt động và tạo ra kết quả. Khi làm việc với JavaScript, hiểu rõ về cơ chế này giúp bạn tránh được các lỗi không mong muốn và viết mã hiệu quả hơn.
Ép kiểu ngầm (implicit type coercion) là quá trình mà JavaScript tự động chuyển đổi kiểu dữ liệu từ loại này sang loại khác. Đây là một quá trình ngầm diễn ra khi ta thực hiện các phép toán giữa các giá trị có kiểu khác nhau.
Khi thực hiện các phép toán có chứa số, JavaScript sẽ cố gắng chuyển đổi các giá trị non-number về kiểu số.
console.log('3' * 2); // 6 console.log('5' - 1); // 4 console.log(true + 1); // 2 console.log(false * 2); // 0
Khi sử dụng toán tử + giữa các giá trị, nếu một trong số chúng là chuỗi, JavaScript sẽ chuyển đổi các giá trị còn lại về kiểu chuỗi.
console.log('5' + 1); // "51" console.log('Hello ' + true); // "Hello true" console.log(4 + ' apples'); // "4 apples"
JavaScript có thể chuyển đổi các giá trị về kiểu boolean thông qua các phép so sánh hoặc các biểu thức điều kiện.
console.log(Boolean(0)); // false console.log(Boolean('')); // false console.log(Boolean(123)); // true console.log(Boolean('Hello')); // true
Toán tử so sánh == và != trong JavaScript sẽ thực hiện ép kiểu ngầm khi so sánh hai giá trị khác loại.
console.log(0 == false); // true console.log('' == false); // true console.log(null == undefined); // true console.log('5' == 5); // true
Trong toán tử điều kiện ternary, biểu thức điều kiện sẽ được ép kiểu ngầm về boolean để xác định giá trị trả về.
let result = 0 ? 'zero' : 'non-zero'; console.log(result); // "non-zero" result = 1 ? 'one' : 'zero'; console.log(result); // "one"
Dưới đây là một số ví dụ phức tạp hơn để bạn hiểu rõ hơn về cơ chế ép kiểu ngầm trong JavaScript.
console.log([1,2,3] + [4,5,6]); // "1,2,34,5,6" console.log([] + {}); // "[object Object]" console.log({} + []); // 0
console.log(typeof (5 + '5')); // "string" console.log(typeof (true + false)); // "number" console.log(typeof ([] + 1)); // "string" console.log(typeof (1 + {})); // "string"
Ép kiểu ngầm (implicit type coercion) trong JavaScript là một cơ chế tự động giúp ngôn ngữ này xử lý được các phép toán giữa các kiểu dữ liệu khác nhau. Tuy nhiên, điều này cũng có thể gây ra nhiều bất ngờ nếu người lập trình không để ý kỹ. Hiểu sâu về cơ chế này sẽ giúp bạn viết mã JavaScript hiệu quả và ít lỗi hơn.