Javascript Type Coercion
Bài đăng này đã không được cập nhật trong 4 năm
Làm việc với Javascript chắc hẳn nhiều bạn đã gặp những trường hợp như sau:
1 * 'foo'; //NaN
1 * 2; //2
'foo' * 1; //NaN
'foo' + 1; //'foo1'
Điều này xảy ra là do cái gọi là Javascript Type Coercion. Có thể hiểu đơn giản là JS luôn cố cưỡng ép kiểu dữ liệu. Ví dụ:
1 + true; //1
Trong ví dụ trên, JS trước tiên sẽ ép kiểu boolean true thành number 1 và sau đó thực hiện phép cộng và ta có được kết quả là 2.
Sử dụng các phép toán với những toán tử như -
, *
, /
, và %
sẽ ép kiểu dữ liệu trả về number
.
'3' - '2'; //1
'2' * '4'; //8
'8' / '2'; //4
'8' % '3'; //2
Nhưng với toán tử +
thì chưa chắc kiểu dữ liệu trả về sẽ là number
bởi vì chúng ta có thể sử dụng +
để làm phép toán HOẶC ghép các đoạn string lại với nhau. Vì vậy mặc định các phép toán khi sử dụng +
sẽ ưu tiên trả về kiểu dữ liệu string
.
5 + '1'; //'51'
5 + true; //6
JS còn có một kiểu ép dữ liệu nữa đó là truthiness. Ví dụ bạn dùng if/else
với một giá trị nào đó, thì JS có thể ép kiểu dữ liệu của giá trị đó về true
hoặc false
.
let i = 100;
if(i) {
console.log('true')
}
Hầu hết các giá trị trong JS đều được ép kiểu về true ngoại trừ 7 giá trị
false
0
-0
NaN
""
null
undefined
Các giá trị này để được ép kiểu về false
All rights reserved