Giá trị Falsey trong JavaScript
false
- Zero của
Numberloại: 0và cũng -0, 0.0và hình thức hex 0x0( nhờ RBT )
- Không có
BigIntloại: 0nvà -0n(mới vào năm 2020, cảm ơn GetMeARemoteJob )
"", ''Và ``- chuỗi có độ dài 0
null
undefined
NaN
document.all (chỉ trong trình duyệt HTML)
- Đây là một thứ kì dị.
document.alllà một đối tượng falsey, với typeofnhư undefined. Đó là một chức năng thuộc sở hữu của Microsoft trong IE trước IE11 và đã được thêm vào thông số HTML dưới dạng "vi phạm cố ý của đặc tả JavaScript" , ví dụ như các trang web được viết cho IE sẽ không cố gắng truy cập document.all.something; đó là giả mạo vì if (document.all)từng là một cách phổ biến để phát hiện IE, trước các bình luận có điều kiện. Xem tại sao document.all giả? để biết chi tiết
"Falsey" đơn giản có nghĩa là ToBooleanhàm nội bộ của JavaScript trả về false. ToBooleancơ sở !value, value ? ... : ...;và if (value). Đây là thông số kỹ thuật chính thức của nó (bản nháp hoạt động năm 2020) (những thay đổi duy nhất kể từ khi đặc tả ECMAscript đầu tiên vào năm 1997 là việc bổ sung các Biểu tượng của ES6 , luôn luôn đúng và BigIntđược đề cập ở trên:

So sánh với == (bình đẳng lỏng lẻo)
Thật đáng để nói về những so sánh lỏng lẻo== của các giá trị giả, với việc sử dụng ToNumber()và có thể gây ra một số nhầm lẫn do sự khác biệt cơ bản. Họ có hiệu quả hình thành ba nhóm:
false, 0, -0, "", '' tất cả khớp với nhau ==
- ví dụ
false == "", '' == 0và do đó4/2 - 2 == 'some string'.slice(11);
null, undefined phù hợp với ==
- ví dụ
null == undefined nhưngundefined != false
- Nó cũng đáng nhắc đến rằng trong khi
typeof nulllợi nhuận 'object', nulllà không phải là một đối tượng, đây là một lỗi lâu dài / những đứa mà không được cố định để duy trì khả năng tương thích. Đây không phải là một đối tượng thực sự và các đối tượng là sự thật (ngoại trừ "vi phạm cố ý" document.allkhi Javascript được triển khai trong HTML)
NaN không phù hợp với bất cứ điều gì, với ==hoặc ===, thậm chí không phải chính nó
- ví dụ như
NaN != NaN, NaN !== NaN, NaN != false,NaN != null
Với "đẳng thức nghiêm ngặt" ( ===), không có các nhóm như vậy. Chỉ false === false.
Đây là một trong những lý do tại sao nhiều nhà phát triển và nhiều hướng dẫn phong cách (ví dụ: Standardjs ) thích ===và hầu như không bao giờ sử dụng ==.
Giá trị thật mà == false
"Truthy" đơn giản có nghĩa là ToBooleanhàm nội bộ của JavaScript trả về true. Một điều không hay về Javascript để nhận biết (và một lý do chính đáng khác để thích ===hơn ==): có thể giá trị là sự thật ( ToBooleantrả về true), nhưng cũng có thể == false.
Bạn có thể nghĩ if (value && value == false) alert('Huh?')là một sự bất khả thi logic không thể xảy ra, nhưng nó sẽ, cho:
"0"và '0'- chúng là các chuỗi không trống, là sự thật, nhưng Javascript ==khớp với các số có chuỗi tương đương (ví dụ 42 == "42"). Kể từ khi 0 == false, nếu "0" == 0, "0" == false.
new Number(0)và new Boolean(false)- chúng là những đối tượng, là sự thật, nhưng ==nhìn thấy giá trị của chúng == false.
0 .toExponential(); - một đối tượng có giá trị bằng số tương đương với 0
- Bất kỳ cấu trúc tương tự nào cung cấp cho bạn một giá trị bằng nhau được bọc trong một loại là sự thật
[], [[]]Và [0](nhờ cloudfeet cho liên kết Javascript Bình đẳng Bảng )
Một số giá trị trung thực hơn
Đây chỉ là một vài giá trị mà một số người có thể mong đợi là chim ưng, nhưng thực sự là sự thật.
-1 và tất cả các số âm khác không
' ', " ", "false", 'null'... tất cả chuỗi không trống, bao gồm chuỗi mà chỉ là khoảng trắng
Bất cứ thứ gì từ typeof, luôn trả về một chuỗi không trống, ví dụ:
typeof null(trả về một chuỗi 'object' do lỗi / quirk lâu )
typeof undefined(trả về một chuỗi 'undefined')
Bất kỳ đối tượng nào (ngoại trừ "vi phạm cố ý" document.alltrong trình duyệt; hãy nhớ rằng đó nullkhông thực sự là một đối tượng mặc dù có typeofđề xuất khác). Kể cả:
{}
[]
function(){}hoặc () => {}(bất kỳ chức năng nào, bao gồm các chức năng trống)
Error và bất kỳ trường hợp nào của Error
- Bất kỳ biểu thức chính quy
- Bất cứ điều gì được tạo ra với
new(bao gồm new Number(0)và new Boolean(false))
- Bất kỳ biểu tượng
true, 1, "1"Và [1]trở lại truekhi so sánh với nhau bằng ==.