Câu hỏi phỏng vấn Javascript
Câu hỏi

Ép kiểu ngầm (implicit type coercion) trong JavaScript là gì?

Câu trả lời

Ép kiểu ngầm (implicit type coercion) trong JavaScript là quá trình tự động hoặc ngầm định chuyển đổi giá trị từ một kiểu dữ liệu này sang kiểu dữ liệu khác, như từ chuỗi sang số[1]. Điều này thường xảy ra khi bạn áp dụng các toán tử cho các giá trị có kiểu khác nhau hoặc khi giá trị được sử dụng trong một ngữ cảnh cụ thể mà ở đó kiểu dữ liệu cần phải được chuyển đổi

Ví dụ về ép kiểu ngầm:

javascript Copy
const value1 = "5";
const value2 = 9;
let sum = value1 + value2;
console.log(sum); // Kết quả là "59"

Trong ví dụ trên, JavaScript đã tự động chuyển đổi số 9 thành một chuỗi và sau đó nối hai giá trị lại với nhau, kết quả là một chuỗi "59". JavaScript đã có thể chọn chuyển đổi chuỗi "5" thành một số và trả về tổng là 14, nhưng nó không làm vậy. Để có kết quả này, bạn cần phải chuyển đổi rõ ràng "5" thành một số bằng cách sử dụng phương thức Number()

Có ba loại chuyển đổi trong JavaScript:

  • Chuyển đổi sang chuỗi (to string)
  • Chuyển đổi sang boolean (to boolean)
  • Chuyển đổi sang số (to number)

Chuyển đổi cho các giá trị nguyên thủy và đối tượng hoạt động khác nhau. Ví dụ, chuyển đổi một đối tượng thành một giá trị nguyên thủy sẽ diễn ra thông qua phương thức nội bộ [[ToPrimitive]] của đối tượng đó

Một số quy tắc chuyển đổi ngầm định:

  • Khi sử dụng toán tử + với một số và một chuỗi, số sẽ được chuyển đổi thành chuỗi và sau đó thực hiện nối chuỗi
  • Trong một ngữ cảnh logic, hoặc khi sử dụng các toán tử logic (||, &&, !), giá trị sẽ được chuyển đổi ngầm định sang boolean
  • Toán tử bằng lỏng lẻo == thực hiện cả so sánh và ép kiểu ngầm định nếu cần thiết, trong khi toán tử bằng chặt === không thực hiện ép kiểu và chỉ trả về true nếu cả kiểu và giá trị của hai biến là giống nhau

Ép kiểu ngầm có thể hữu ích nhưng cũng có thể gây ra những lỗi không mong muốn, đặc biệt là khi so sánh các giá trị với toán tử bằng lỏng lẻo. Do đó, việc sử dụng toán tử bằng chặt được khuyến nghị để tránh những hành vi không mong muốn này

junior

junior

Gợi ý câu hỏi phỏng vấn

middle

Hãy viết một hàm có tên lucky_sevens nhận một mảng các số nguyên và trả về giá trị true nếu ba phần tử liên tiếp bất kỳ có tổng bằng 7?

middle

Từ khóa new trong JavaScript để làm gì?

middle

Kết quả đoạn code sau là gì? Hãy giải thích tại sao?

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào