ค่าเท็จใน JavaScript
false
- ศูนย์ของ
Number
ประเภท0
และยัง-0
, 0.0
และรูปแบบฐานสิบหก0x0
( ขอบคุณ RBT )
BigInt
ประเภทศูนย์: 0n
และ-0n
(ใหม่ในปี 2020 ขอขอบคุณ GetMeARemoteJob )
""
, ''
และ``
- สตริงของความยาว 0
null
undefined
NaN
document.all
(ในเบราว์เซอร์ HTML เท่านั้น)
"Falsey" ก็หมายความว่า JavaScript ภายในกลับมาทำงานToBoolean
false
ToBoolean
underlies !value
, และvalue ? ... : ...;
if (value)
นี่คือข้อมูลจำเพาะอย่างเป็นทางการ (ร่างการทำงานในปี 2020) (การเปลี่ยนแปลงเพียงอย่างเดียวตั้งแต่ข้อกำหนด ECMAscript แรกในปี 1997คือการเพิ่มสัญลักษณ์ของ ES6ซึ่งเป็นความจริงเสมอและBigInt
กล่าวถึงข้างต้น:

เปรียบเทียบกับ==
(ความเท่าเทียมกันแบบหลวม)
เป็นมูลค่าการพูดคุยเกี่ยวกับการเปรียบเทียบค่าหลวม ๆ==
ของปลอมซึ่งใช้ToNumber()
และอาจทำให้เกิดความสับสนเนื่องจากความแตกต่างพื้นฐาน พวกเขาได้อย่างมีประสิทธิภาพในสามกลุ่ม:
false, 0, -0, "", ''
ทั้งหมดตรงกันกันด้วย ==
- เช่น
false == ""
, '' == 0
และดังนั้นจึง4/2 - 2 == 'some string'.slice(11);
null, undefined
เข้าคู่กับ ==
- เช่น
null == undefined
แต่undefined != false
- นอกจากนี้ยังเป็นมูลค่าการกล่าวขวัญว่าในขณะที่
typeof null
ผลตอบแทน'object'
, null
เป็นไม่วัตถุนี้เป็นปัญหาที่ยาวนาน / มุมแหลมที่ไม่ได้รับการแก้ไขเพื่อรักษาความเข้ากันได้ มันไม่ใช่วัตถุจริงและวัตถุนั้นเป็นความจริง (ยกเว้น "การละเมิดโดยเจตนา" document.all
เมื่อใช้งาน Javascript ใน HTML)
NaN
ไม่ตรงกับสิ่งใดด้วย==
หรือ===
ไม่แม้แต่กับตัวเอง
- เช่น
NaN != NaN
, NaN !== NaN
, NaN != false
,NaN != null
ด้วย "ความเท่าเทียมกันอย่างเข้มงวด" ( ===
) ไม่มีการจัดกลุ่มดังกล่าว เท่านั้นfalse
===
false
เท่านั้น
นี้เป็นหนึ่งในเหตุผลที่ว่าทำไมนักพัฒนาจำนวนมากและคำแนะนำหลายรูปแบบ (เช่นstandardjs ) ชอบและแทบไม่เคยใช้===
==
ค่าความจริงที่จริง == false
"Truthy" ก็หมายความว่า JavaScript ภายในกลับมาทำงานToBoolean
จาวาสคริปต์ที่ต้องระวัง (และอีกเหตุผลที่ดีที่ชอบมากกว่า): เป็นไปได้ที่ค่าจะเป็นจริง ( ส่งคืน) แต่ก็เป็นไปได้เช่นกันtrue
===
==
ToBoolean
true
== false
คุณอาจคิดว่าif (value && value == false) alert('Huh?')
เป็นไปไม่ได้ในเชิงตรรกะที่ไม่สามารถเกิดขึ้นได้ แต่จะทำเพื่อ:
"0"
และ'0'
- เป็นสตริงที่ไม่ว่างเปล่าซึ่งเป็นความจริง แต่จาวาสคริปต์==
จับคู่หมายเลขกับสตริงที่เทียบเท่า (เช่น42 == "42"
) ตั้งแต่0 == false
ถ้า "0" == 0
, "0" == false
.
new Number(0)
และnew Boolean(false)
- พวกเขากำลังวัตถุซึ่งเป็น truthy แต่เห็นค่าของพวกเขาซึ่ง==
== false
0 .toExponential();
- วัตถุที่มีค่าตัวเลขเทียบเท่า 0
- สิ่งปลูกสร้างที่คล้ายกันใด ๆ ที่ให้คุณค่าที่เท่าเทียมกับคุณในประเภทที่เป็นความจริง
[]
, [[]]
และ[0]
(ขอบคุณcloudfeetสำหรับการเชื่อมโยง JavaScript เท่าเทียมกันตาราง )
บางค่าความจริงเพิ่มเติม
นี่เป็นเพียงค่าเล็กน้อยที่บางคนอาจคาดหวังว่าจะเป็นเท็จ แต่จริง ๆ แล้วเป็นเรื่องจริง
true
, 1
, "1"
และ[1]
ผลตอบแทนtrue
เมื่อเทียบกับคนอื่น ๆ ==
ด้วย