ฉันเจอรหัสต่อไปนี้:
function test(data) {
if (data != null && data !== undefined) {
// some code here
}
}
ฉันค่อนข้างใหม่กับ JavaScript แต่จากคำถามอื่น ๆ ที่ฉันได้อ่านที่นี่ฉันรู้สึกว่ารหัสนี้ไม่สมเหตุสมผล
คุณจะได้รับข้อผิดพลาดถ้าคุณเข้าถึงตัวแปรที่ไม่ได้กำหนดในบริบทอื่น ๆtypeof
กว่าใด
อัปเดต:คำตอบ (อ้างถึง) ด้านบนอาจทำให้เข้าใจผิด มันควรจะพูดว่า«ตัวแปรที่ไม่ได้ประกาศ»แทนที่จะ«ตัวแปรไม่ได้กำหนด»
ดังที่ฉันค้นพบในคำตอบของRyan ♦ , maericsและnwellnhofถึงแม้ว่าจะไม่มีการขัดแย้งกับฟังก์ชันฟังก์ชันตัวแปรสำหรับอาร์กิวเมนต์จะถูกประกาศเสมอ ความจริงข้อนี้ยังพิสูจน์ข้อแรกในรายการด้านล่าง
จากความเข้าใจของฉันสถานการณ์ต่อไปนี้อาจประสบ:
ฟังก์ชั่นได้รับการเรียกว่ามีการขัดแย้งใดจึงทำให้ตัวแปรไม่ได้กำหนดและการสร้างข้อผิดพลาดในdata
data != null
ฟังก์ชั่นถูกเรียกโดยเฉพาะอย่างยิ่งกับ
null
(หรือundefined
) เป็นอาร์กิวเมนต์ในกรณีที่data != null
ได้รับการปกป้องรหัสภายในทำให้การแสดงผลที่&& data !== undefined
ไร้ประโยชน์ฟังก์ชั่นถูกเรียกด้วยอาร์กิวเมนต์ null ไม่ใช่ในกรณีที่มันนิด ๆ จะผ่านทั้งสองและ
data != null
data !== undefined
ถาม: ความเข้าใจของฉันถูกต้องหรือไม่
ฉันได้ลองทำสิ่งต่อไปนี้ในคอนโซลของ Firefox:
--
[15:31:31.057] false != null
[15:31:31.061] true
--
[15:31:37.985] false !== undefined
[15:31:37.989] true
--
[15:32:59.934] null != null
[15:32:59.937] false
--
[15:33:05.221] undefined != null
[15:33:05.225] false
--
[15:35:12.231] "" != null
[15:35:12.235] true
--
[15:35:19.214] "" !== undefined
[15:35:19.218] true
ฉันไม่สามารถคิดออกกรณีที่data !== undefined
หลังจากที่ data != null
อาจจะมีการใช้งานใด ๆ
if(data)
หมายความว่าเขาไม่สามารถผ่านfalse
หรือ0
เป็นค่าdata
ได้
if(typeof someUndefVar == whatever) -- works
if(someUnderVar) -- error
data !== null && data !== undefined
ซึ่งเทียบเท่ากับซึ่งเทียบเท่ากับdata != null
data != undefined
รูปแบบเดิมมีแนวโน้มที่จะได้รับการสนับสนุนเนื่องจากมีความชัดเจนมากขึ้นเกี่ยวกับเงื่อนไขในขณะที่มันจะมองข้ามได้ง่ายว่าทั้งสองnull
และundefined
กำลังถูกตรวจสอบด้วยสองเงื่อนไขในภายหลัง
undefined
IMO เป็นกลิ่นรหัส ไม่ใช่คำหลักที่ได้รับการป้องกันเหมือนกับnull
เป็นตัวแปรที่ไม่ได้กำหนด นี่คือที่ถูกต้องครบถ้วนและเป็นไปเพื่อทำลายรหัสของคุณ:undefined = 1
if (data)
ใช้เพียงแค่ เป็นวิธีที่ช่วยในการจำ Javascript เพื่อตรวจสอบว่าdata
ตัวแปรประเมินว่าเป็นจริงหรือไม่undefined
,,null
false, 0, สตริงว่าง, อาร์เรย์ว่างเปล่าและ (?) วัตถุที่ไม่มีคุณสมบัติประเมินค่าเป็นเท็จส่วนที่เหลือเป็นจริง