ฉันเจอรหัสต่อไปนี้:
function test(data) {
if (data != null && data !== undefined) {
// some code here
}
}
ฉันค่อนข้างใหม่กับ JavaScript แต่จากคำถามอื่น ๆ ที่ฉันได้อ่านที่นี่ฉันรู้สึกว่ารหัสนี้ไม่สมเหตุสมผล
คุณจะได้รับข้อผิดพลาดถ้าคุณเข้าถึงตัวแปรที่ไม่ได้กำหนดในบริบทอื่น ๆtypeofกว่าใด
อัปเดต:คำตอบ (อ้างถึง) ด้านบนอาจทำให้เข้าใจผิด มันควรจะพูดว่า«ตัวแปรที่ไม่ได้ประกาศ»แทนที่จะ«ตัวแปรไม่ได้กำหนด»
ดังที่ฉันค้นพบในคำตอบของRyan ♦ , maericsและnwellnhofถึงแม้ว่าจะไม่มีการขัดแย้งกับฟังก์ชันฟังก์ชันตัวแปรสำหรับอาร์กิวเมนต์จะถูกประกาศเสมอ ความจริงข้อนี้ยังพิสูจน์ข้อแรกในรายการด้านล่าง
จากความเข้าใจของฉันสถานการณ์ต่อไปนี้อาจประสบ:
ฟังก์ชั่นได้รับการเรียกว่ามีการขัดแย้งใดจึงทำให้ตัวแปรไม่ได้กำหนดและการสร้างข้อผิดพลาดในdatadata != nullฟังก์ชั่นถูกเรียกโดยเฉพาะอย่างยิ่งกับ
null(หรือundefined) เป็นอาร์กิวเมนต์ในกรณีที่data != nullได้รับการปกป้องรหัสภายในทำให้การแสดงผลที่&& data !== undefinedไร้ประโยชน์ฟังก์ชั่นถูกเรียกด้วยอาร์กิวเมนต์ null ไม่ใช่ในกรณีที่มันนิด ๆ จะผ่านทั้งสองและ
data != nulldata !== 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กำลังถูกตรวจสอบด้วยสองเงื่อนไขในภายหลัง
undefinedIMO เป็นกลิ่นรหัส ไม่ใช่คำหลักที่ได้รับการป้องกันเหมือนกับnullเป็นตัวแปรที่ไม่ได้กำหนด นี่คือที่ถูกต้องครบถ้วนและเป็นไปเพื่อทำลายรหัสของคุณ:undefined = 1



if (data)ใช้เพียงแค่ เป็นวิธีที่ช่วยในการจำ Javascript เพื่อตรวจสอบว่าdataตัวแปรประเมินว่าเป็นจริงหรือไม่undefined,,nullfalse, 0, สตริงว่าง, อาร์เรย์ว่างเปล่าและ (?) วัตถุที่ไม่มีคุณสมบัติประเมินค่าเป็นเท็จส่วนที่เหลือเป็นจริง