Kiểu ép buộc và ép kiểu là những khái niệm cơ bản trong lập trình liên quan đến việc chuyển đổi dữ liệu từ kiểu này sang kiểu khác. Trong các ngôn ngữ lập trình, dữ liệu được phân loại thành nhiều loại khác nhau, chẳng hạn như số nguyên, chuỗi, số dấu phẩy động và booleans. Khả năng chuyển đổi hoặc ép buộc dữ liệu từ loại này sang loại khác là điều cần thiết để thực hiện các hoạt động, thao tác dữ liệu và đảm bảo tính tương thích và nhất quán của dữ liệu trong một chương trình.
Ép buộc loại đề cập đến việc chuyển đổi tự động các loại dữ liệu xảy ra trong JavaScript khi các loại dữ liệu khác nhau được sử dụng cùng nhau trong một hoạt động. Ví dụ: nếu một số và một chuỗi được cộng lại với nhau, JavaScript sẽ tự động chuyển đổi số đó thành một chuỗi để thực hiện thao tác.
const num = 5; const str = "3"; console.log(num + str); //output: "53"
Trong ví dụ trên, số 5 được tự động chuyển đổi thành chuỗi “5” để nó có thể được nối với chuỗi “3” để cho kết quả đầu ra là “53”. Một số ví dụ khác về kiểu ép buộc bao gồm:
==
hoặc !=
để so sánh, thực hiện ép kiểu trước khi thực hiện so sánh+
) trước một giá trị sẽ thực hiện ép kiểu đối với Số. Tuy nhiên, dấu +
chỉ có thể xuất hiện một lần và không được theo sau bởi khoảng trắng.
Ví dụ:
const x = "5"; const y = +x; console.log(typeof y); // output: number
Người ta thường tin rằng việc sử dụng toán tử một ngôi +
ở đầu một giá trị trong JavaScript là cách viết tắt của hàm Number
. Tuy nhiên, đây không phải là trường hợp. Cả toán tử +
ngôi và Number
đều sử dụng cùng một thuật toán để chuyển đổi một chuỗi thành một số, nhưng có những khác biệt nhỏ.
Ví dụ: trong khi +
sẽ đưa ra TypeError
khi gặp BigInt
, Number()
sẽ trả về giá trị số của BigInt
nhưng có thể mất độ chính xác. Sự ép buộc cũng xảy ra nếu bạn sử dụng toán tử phủ định đơn nguyên ( -
) trước một chuỗi theo cách tương tự.
Sử dụng câu lệnh if
, câu lệnh này sẽ ép buộc một giá trị thành boolean trước khi so sánh
Sử dụng &&
, ||
và ?:
toán tử, sẽ ép buộc giá trị thành boolean trước khi thực hiện thao tác.
Mặt khác, truyền kiểu đề cập đến việc chuyển đổi rõ ràng các kiểu dữ liệu. Điều này được thực hiện bằng cách sử dụng các hàm truyền như Number()
, String()
, Boolean()
và Symbol()
const str = '5'; const num = Number(str); console.log(num); //output: 5
Trong ví dụ này, biến num
có kiểu số, nhưng chúng ta đã chuyển đổi rõ ràng nó thành một chuỗi bằng cách sử dụng hàm String()
. Chúng ta hãy xem một số hàm truyền kiểu trong JavaScript, cùng với mã ví dụ để chứng minh việc sử dụng chúng:
Number()
: Hàm Number()
được sử dụng để chuyển đổi một giá trị không phải là số thành một giá trị số. Ví dụ: nếu bạn muốn chuyển đổi một giá trị chuỗi là “10” thành một số, bạn sẽ sử dụng hàm Number()
như sau: const x = "5"; const y = x+10 const z= Number(x)+10; console.log(y); // output: 510 console.log(z); // output: 15
parseInt()
: Hàm parseInt
được sử dụng để chuyển đổi một giá trị thành một số nguyên. Nó khác với Number()
và parseFloat()
vì nó bỏ qua bất kỳ giá trị nào sau số thập phân. Ví dụ: const intValue = parseInt("3.14"); console.log(floatValue); // Output: 3
parseFloat()
: Hàm parseFloat()
được sử dụng để chuyển đổi giá trị chuỗi thành số dấu phẩy động. Nó rất giống với Number()
ngoại trừ một số trường hợp. Hãy xem ví dụ dưới đây để xem cách parseFloat()
so sánh với parseInt()
và Number()
: console.log(parseInt('22.5')); // Output: 22 console.log(parseFloat('22.5')); // Output: 22.5 console.log(Number('22.5')); // Output: 22.5 console.log(parseInt('070')); // Output: 70 console.log(parseFloat('070')); // Output: 70 console.log(Number('070')); // Output: 70 console.log(parseInt('1234blue')); // Output: 1234 console.log(parseFloat('1234blue')); // Output: 1234 console.log(Number('1234blue')); // Output: NaN console.log(parseInt('0xFF')); // Output: 255 console.log(parseFloat('0xFF')); // Output: 0 console.log(Number('0xFF')); // Output: 255 console.log(parseInt("10 20 30")); // 10 console.log(parseFloat("10 20 30")); // 10 console.log(Number("10 20 30")); // NaN
String()
: Hàm String()
được sử dụng để chuyển đổi giá trị không phải chuỗi thành giá trị chuỗi. Các ví dụ dưới đây cho thấy cách bạn có thể sử dụng hàm String()
để chuyển đổi các loại giá trị khác nhau thành chuỗi: const num = 10; console.log(String(num)); // "10" const bool = true; console.log(String(bool)); // "true" const obj = {name: "John"}; console.log(String(obj)); // "[object Object]" const arr = [1, 2, 3]; console.log(String(arr)); // "1,2,3" const date = new Date(); console.log(String(date)); // "Sun Jan 29 2023 18:52:01 GMT+0000 (Coordinated Universal Time)"
Boolean()
: Hàm Boolean
được sử dụng để chuyển đổi một giá trị không phải boolean thành giá trị boolean. Ví dụ: nếu bạn muốn chuyển đổi giá trị số 0 thành boolean, bạn sẽ sử dụng Boolean()
như sau: let value = 0; console.log(Boolean(value)); // false value = "hello"; console.log(Boolean(value)); // true value = undefined; console.log(Boolean(value)); // false value = {}; console.log(Boolean(value)); // true value = -1; console.log(Boolean(value)); // true
Vậy đó, các bạn. Tôi hy vọng bài viết này đã giúp bạn hiểu rõ về chuyển đổi loại trong JavaScript. Bây giờ bạn đã nắm chắc về cách chuyển các biến của mình sang các kiểu khác nhau một cách rõ ràng (kiểu truyền) cũng như cách Javascript thực hiện điều đó một cách ngầm định (kiểu ép buộc).
Tiếp tục thực hành và thử nghiệm với các chức năng này để thành thạo chúng. Đừng quên thích, chia sẻ, theo dõi và bình luận bất kỳ câu hỏi nào bạn có thể có. Chúc mừng mã hóa!
Sử dụng so sánh đẳng thức nghiêm ngặt ===
thay vì so sánh đẳng thức trừu tượng ==
. Tránh dựa vào kiểu ép buộc ngầm định của JavaScript, đặc biệt là trong các phép tính số học và luôn sử dụng kiểu truyền khi cần thiết.
Cũng được xuất bản ở đây.