Thay đổi kiểu dữ liệu trong Javascript

Tram Ho

Thông thường, các toán tử và các hàm sẽ tự động chuyển đổi kiểu của giá trị về đúng.

Ví dụ như: alert sẽ tự động chuyển bất kỳ kiểu dữ liệu nào về string để hiển thị chúng, các toán tử toán học sẽ tự động chuyển về kiểu number để thực hiện tính toán.

Tuy nhiên trong nhiều trường hợp chúng ta muốn chuyển đổi kiểu về kiểu dữ liệu mà chúng ta mong muốn. Trong bài này chúng ta sẽ tìm hiểu về các cách thay đổi kiểu dữ liệu.

String Conversion

1. String()

Khi chúng ta cần chuyển đổi kiểu của một value sang string chúng ta có thể sử dụng String():

2. toString()

Ngoài việc sử dụng String() thì chúng ta có vẻ quen thuộc hơn với toString(), nó cũng sẽ ép kiểu các giá trị về string:

3. Sử dụng toán tử cộng “+”

Khi sử dụng toán tử, chúng ta đặc biệt phải lưu ý đến toán tử + khi toán hạng có kiểu string.
Khi chúng ta sử dụng toán tử + mà một trong các toán hạng có kiểu là string thì Javascript sẽ cố gắng ép kiểu của toán hạng còn lại về kiểu string. Hãy cùng xem ví dụ dưới đây:

Numeric Conversion

1. Number()

Khi chúng ta muốn chuyển đổi từ một giá trị khác sang giá trị kiểu number, chúng ta có thể sử dụng Number():

2. parseInt()/parseFloat()

  • parseInt() sẽ chuyển đổi kiểu của một string về kiểu number nhưng ở dạng interger (số nguyên)

    parseInt() sẽ trả về các số nằm đầu tiên trong giá trị string đó, nếu chuỗi đó không thể chuyển thành number thì nó sẽ trả về NaN. Cùng xét ví dụ sau:

  • parseFloat() sẽ chuyển đổi kiểu của một string về kiểu number nhưng ở dạng float (số thực)

    parseFloat() cũng gần giống như parseInt(). Cùng xét ví dụ sau:

3. Sử dụng toán tử “+”

Tại sao vừa rồi ở trên chúng ta nói đến việc sử dụng + để chuyển kiểu về string mà dưới đây chúng ta lại dùng nó để chuyển kiểu về number. Chúng ta cùng xem ví dụ dưới đây:

Khi chúng ta thêm + và trước giá trị thì nó sẽ chuyển đổi về kiểu number không giống như khi chúng ta sử dụng + trong một phép toán.

Và nó cũng trả về các kết quả giống như sử dụng Number() trong các trường hợp cụ thể:

Ngoài ra, khi chúng ta tính toán sử dụng các toán tử -, *, /, %, ** thì Javascript cũng sẽ cố gắng chuyển đổi kiểu các toàn hạng về number.

Boolean Conversion

Thường khi viết code Javascript chúng ta ít khi ép kiểu các giá trị về kiểu Boolean mà thường để tự Javascript ngầm ép kiểu, ví dụ như sau:

Ở đoạn code trên, chúng ta có thể thấy Javascript đã tự động ngầm ép kiểu của x trong if về Boolean để chạy câu lệnh if.

Tuy nhiên, nhiều trường hợp chúng ta muốn lấy giá trị kiểu Boolean của nó để có thể strict equal hoặc cần hàm trả về true hoặc false thì chúng ta sẽ sử dụng Boolean():

Các giá trị khi ép kiểu sang Boolean trả về false: 0, '', false, null, undefined, NaN. Các giá trị này cũng được gọi là các falsy value trong Javascript.

Ngoài các giá trị ở trên thì các giá trị còn lại đều trả về true.

Object Conversion

Như chúng ta đã tìm hiểu ở trên thì khi chuyển đổi kiểu từ object sang các kiểu khác như:

  • string: [object Object]
  • number: NaN
  • boolean: true

Vậy chúng ta phải làm thế nào để chuyển đổi kiểu từ object sang các kiểu dữ liệu nguyên thủy theo cách mà chúng ta mong muốn nhất.

Khi chúng ta ép kiểu một object về string hoặc number thì Javascript sẽ cố gắng tìm và gọi 3 object methods như sau:

  1. Gọi obj[Symbol.toPrimitive](hint) – với key tượng trưng là Symbol.toPrimitive, nếu method này tồn tại.
  2. Dựa vào hint , nếu là string thì nó sẽ cố gọi đến method obj.toString() trước và obj.valueOf() sau nếu obj.toString() không tồn tại.
  3. Nếu hintnumber thì nó sẽ cố gọi đến obj.valueOf() trước và obj.toString() sau.

Symbol.toPrimitive

Hãy cùng xét ví dụ:

Symbol.toPrimitive sẽ cho phép chúng ta quy định giá trị trả về thông qua hint.

toString/valueOf

Methods toStringvalueOf là 2 method cũ, nếu không tìm thấy Symbol.toPrimitive thì Javascript sẽ cố gắng gọi đến chúng theo thứ tự:

  • toString rồi đến valueOf nếu hintstring
  • valueOf rồi đên toString nếu hint khác string

Theo mặc định, đối với một object đơn giản:

  • toString method trả về một string: "[object Object]".
  • valueOf method trả về chính object đó.

Vậy chúng ta muốn giá trị trả về là giá trị mà chúng ta mong muốn giống như sử dụng Symbol.toPrimitive thì chúng ta sẽ cần sử dụng kết hợp toStringvalueOf như sau:

Lời kết

Vậy là chúng ta đã tìm hiểu qua về các cách thay đổi kiểu dữ liệu trong Javascript. Vì kiến thức là vô tận nên trong bài không thể tránh khỏi những thiếu sót cũng như nhầm lẫn, mong mọi người thông cảm là nếu góp ý bên dưới để mình có thể đưa ra nhưng bài viết có chất lượng hơn.

Xin cảm ơn mọi người đã đọc bài viết.

References

https://javascript.info/type-conversions

https://javascript.info/operators

https://javascript.info/object-toprimitive

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo