Mọi giá trị Javascript có thể bị ép thành true hoặc false. Ép buộc vào boolean
"name" + {} // "name[object Object]
6 có nghĩa là giá trị là trung thực. Ép buộc vào boolean "name" + {} // "name[object Object]
7 có nghĩa là giá trị là saiCó một số giá trị trong Javascript trả về giá trị giả, chúng là
- sai
- 0
- vô giá trị
- chưa xác định
- ""
- NaN
- -0
Mọi thứ khác là sự thật,
3 * "3" // 3 * 3
3 * Number["3"] // 3 * 3
Number["5"] // 5
Number["1."] // 1
Number["1.34"] // 1.34
Number["0"] // 0
Number["012"] // 12
Number["1,"] // NaN
Number["1+1"] // NaN
Number["1a"] // NaN
Number["one"] // NaN
Number["text"] // NaN
2Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Các đoạn mã trên đều được, nhưng tốt hơn hết là bạn nên trình bày rõ ràng khi cố gắng xác định tính trung thực của một giá trị. Về cơ bản, đừng dựa vào sự ép buộc ngầm của Javascript, ngay cả khi bạn cảm thấy mình biết chúng một cách hoàn hảo.
Thay vì đoạn mã bên dưới,
3 * "3" // 3 * 3
3 * Number["3"] // 3 * 3
Number["5"] // 5
Number["1."] // 1
Number["1.34"] // 1.34
Number["0"] // 0
Number["012"] // 12
Number["1,"] // NaN
Number["1+1"] // NaN
Number["1a"] // NaN
Number["one"] // NaN
Number["text"] // NaN
3Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Bất kỳ điều nào dưới đây là cách thực hành tốt hơn tùy thuộc vào yêu cầu của bạn
3 * "3" // 3 * 3
3 * Number["3"] // 3 * 3
Number["5"] // 5
Number["1."] // 1
Number["1.34"] // 1.34
Number["0"] // 0
Number["012"] // 12
Number["1,"] // NaN
Number["1+1"] // NaN
Number["1a"] // NaN
Number["one"] // NaN
Number["text"] // NaN
4Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Điều này là do ví dụ, bạn xác định một chức năng được cho là hoạt động với các số
3 * "3" // 3 * 3
3 * Number["3"] // 3 * 3
Number["5"] // 5
Number["1."] // 1
Number["1.34"] // 1.34
Number["0"] // 0
Number["012"] // 12
Number["1,"] // NaN
Number["1+1"] // NaN
Number["1a"] // NaN
Number["one"] // NaN
Number["text"] // NaN
5Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Vì vậy, nếu tôi gọi hàm thêm bằng 0, tôi sẽ luôn gặp lỗi ngoài ý muốn
3 * "3" // 3 * 3
3 * Number["3"] // 3 * 3
Number["5"] // 5
Number["1."] // 1
Number["1.34"] // 1.34
Number["0"] // 0
Number["012"] // 12
Number["1,"] // NaN
Number["1+1"] // NaN
Number["1a"] // NaN
Number["one"] // NaN
Number["text"] // NaN
6Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
NaN
// concatenation
1 + "2" // "12"
1 + "js" // "1js"
// addition
1 + 2 // 3
1 + 2 + 1 // 4
//addition, then concatenation
1 + 2 + "1" // "31"
[1 + 2] + "1" // "31"
//concatenation all through
1 + "2" + 1 // "121"
[1 + "2"] + 1 // "121"
4 là một giá trị số đặc biệt không bằng chính nó3 * "3" // 3 * 3
3 * Number["3"] // 3 * 3
Number["5"] // 5
Number["1."] // 1
Number["1.34"] // 1.34
Number["0"] // 0
Number["012"] // 12
Number["1,"] // NaN
Number["1+1"] // NaN
Number["1a"] // NaN
Number["one"] // NaN
Number["text"] // NaN
7Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
// concatenation
1 + "2" // "12"
1 + "js" // "1js"
// addition
1 + 2 // 3
1 + 2 + 1 // 4
//addition, then concatenation
1 + 2 + "1" // "31"
[1 + 2] + "1" // "31"
//concatenation all through
1 + "2" + 1 // "121"
[1 + "2"] + 1 // "121"
4 là giá trị Javascript duy nhất không bằng chính nó. Vì vậy, bạn có thể kiểm tra
// concatenation
1 + "2" // "12"
1 + "js" // "1js"
// addition
1 + 2 // 3
1 + 2 + 1 // 4
//addition, then concatenation
1 + 2 + "1" // "31"
[1 + 2] + "1" // "31"
//concatenation all through
1 + "2" + 1 // "121"
[1 + "2"] + 1 // "121"
4 bằng cách so sánh nó với chính nó3 * "3" // 3 * 3
3 * Number["3"] // 3 * 3
Number["5"] // 5
Number["1."] // 1
Number["1.34"] // 1.34
Number["0"] // 0
Number["012"] // 12
Number["1,"] // NaN
Number["1+1"] // NaN
Number["1a"] // NaN
Number["one"] // NaN
Number["text"] // NaN
8Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
ECMAScript 6 đã giới thiệu phương pháp kiểm tra NaN,
"name" + {} // "name[object Object]
213 * "3" // 3 * 3
3 * Number["3"] // 3 * 3
Number["5"] // 5
Number["1."] // 1
Number["1.34"] // 1.34
Number["0"] // 0
Number["012"] // 12
Number["1,"] // NaN
Number["1+1"] // NaN
Number["1a"] // NaN
Number["one"] // NaN
Number["text"] // NaN
9Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Cẩn thận với hàm toàn cầu
"name" + {} // "name[object Object]
22, nó cố gắng ép buộc đối số của nó trước khi kiểm tra xem nó có phải là
// concatenation
1 + "2" // "12"
1 + "js" // "1js"
// addition
1 + 2 // 3
1 + 2 + 1 // 4
//addition, then concatenation
1 + 2 + "1" // "31"
[1 + 2] + "1" // "31"
//concatenation all through
1 + "2" + 1 // "121"
[1 + "2"] + 1 // "121"
4 không. Ví dụ,
// concatenation
1 + "2" // "12"
1 + "js" // "1js"
// addition
1 + 2 // 3
1 + 2 + 1 // 4
//addition, then concatenation
1 + 2 + "1" // "31"
[1 + 2] + "1" // "31"
//concatenation all through
1 + "2" + 1 // "121"
[1 + "2"] + 1 // "121"
0Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Nên tránh sử dụng hàm global
"name" + {} // "name[object Object]
22, cách thức hoạt động tương tự như hàm bên dưới
// concatenation
1 + "2" // "12"
1 + "js" // "1js"
// addition
1 + 2 // 3
1 + 2 + 1 // 4
//addition, then concatenation
1 + 2 + "1" // "31"
[1 + 2] + "1" // "31"
//concatenation all through
1 + "2" + 1 // "121"
[1 + "2"] + 1 // "121"
1Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Đó là hầu hết sự ép buộc ngầm. Nếu tôi bỏ lỡ điều gì đó, vui lòng bấm chuông trong phần bình luận bên dưới và cảm ơn vì đã đọc hết