ฉันคิดว่าวิธีที่มีประสิทธิภาพที่สุดในการทดสอบ "คุณค่าคือnull
หรือundefined
" คือ
if ( some_variable == null ){
// some_variable is either null or undefined
}
ดังนั้นทั้งสองเส้นจึงเท่ากัน:
if ( typeof(some_variable) !== "undefined" && some_variable !== null ) {}
if ( some_variable != null ) {}
หมายเหตุ 1
ตามที่กล่าวถึงในคำถามชุดย่อยแบบสั้นนั้นจำเป็นต้องsome_variable
มีการประกาศมิฉะนั้น ReferenceError จะถูกส่งออกไป อย่างไรก็ตามในหลายกรณีคุณสามารถสันนิษฐานได้ว่าสิ่งนี้ปลอดภัย:
ตรวจสอบข้อโต้แย้งเพิ่มเติม:
function(foo){
if( foo == null ) {...}
ตรวจสอบคุณสมบัติบนวัตถุที่มีอยู่
if(my_obj.foo == null) {...}
ในทางตรงกันข้ามtypeof
สามารถจัดการกับตัวแปรทั่วโลกที่ไม่ได้ประกาศ (เพียงแค่ส่งกลับundefined
) แต่กรณีเหล่านี้ควรลดลงให้น้อยที่สุดด้วยเหตุผลที่ดีตามที่ Alsciende อธิบาย
โน้ต 2
สิ่งนี้ - สั้นกว่า - ตัวแปรไม่เท่ากัน:
if ( !some_variable ) {
// some_variable is either null, undefined, 0, NaN, false, or an empty string
}
ดังนั้น
if ( some_variable ) {
// we don't get here if some_variable is null, undefined, 0, NaN, false, or ""
}
หมายเหตุ 3
โดยทั่วไปก็จะแนะนำให้ใช้แทน===
==
การแก้ปัญหาที่เสนอเป็นข้อยกเว้นของกฎนี้ ตรวจสอบไวยากรณ์ JSHintแม้มีeqnull
ตัวเลือกด้วยเหตุผลนี้
จากคู่มือสไตล์ jQuery :
ควรใช้การตรวจสอบความเท่าเทียมกันอย่างเข้มงวด (===) == ข้อยกเว้นเพียงอย่างเดียวคือเมื่อตรวจสอบ undefined และ null โดยวิธี null
// Check for both undefined and null values, for some important reason.
undefOrNull == null;
if(some_variable) { ... }
จะไม่ดำเนินการถ้าsome_variable
เป็นfalse
หรือ0
หรือ ...