Giá trị Falsey trong JavaScript
false
- Zero của
Number
loại: 0
và cũng -0
, 0.0
và hình thức hex 0x0
( nhờ RBT )
- Không có
BigInt
loại: 0n
và -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.all
là một đối tượng falsey, với typeof
như 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à ToBoolean
hàm nội bộ của JavaScript trả về false
. ToBoolean
cơ 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 == ""
, '' == 0
và 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 null
lợi nhuận 'object'
, null
là 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.all
khi 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à ToBoolean
hà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 ( ToBoolean
trả 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.all
trong trình duyệt; hãy nhớ rằng đó null
khô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 true
khi so sánh với nhau bằng ==
.