ฉันกำลังตรวจสอบif(response[0].title !== undefined)
แต่ฉันได้รับข้อผิดพลาด:
Uncaught TypeError: ไม่สามารถอ่านคุณสมบัติ 'ชื่อ' ของไม่ได้กำหนด
ฉันกำลังตรวจสอบif(response[0].title !== undefined)
แต่ฉันได้รับข้อผิดพลาด:
Uncaught TypeError: ไม่สามารถอ่านคุณสมบัติ 'ชื่อ' ของไม่ได้กำหนด
คำตอบ:
response[0]
ไม่ได้ถูกกำหนดตรวจสอบว่ามีการกำหนดและตรวจสอบชื่อคุณสมบัติแล้ว
if(typeof response[0] !== 'undefined' && typeof response[0].title !== 'undefined'){
//Do something
}
undefined
ไม่ใช่คำหลัก JavaScript (แม้ว่าทุกคนจะคิดว่าเป็น) หากคุณต้องการคุณสามารถสร้างตัวแปรที่เรียกว่าundefined
แล้วการตรวจสอบนี้จะไม่ถูกต้อง (typeof myVar !== 'undefined')
วิธีเดียวที่ถูกต้องคือการตรวจสอบ
undefined
?
เพียงตรวจสอบresponse[0]
ว่าไม่ได้กำหนด:
if(response[0] !== undefined) { ... }
หากคุณยังคงต้องตรวจสอบชื่ออย่างชัดเจนให้ทำหลังจากการตรวจสอบครั้งแรก:
if(response[0] !== undefined && response[0].title !== undefined){ ... }
ฉันมีปัญหากับตัวอย่างโค้ดอื่น ๆ ด้านบนทั้งหมด ใน Chrome นี่เป็นเงื่อนไขที่เหมาะกับฉัน:
typeof possiblyUndefinedVariable !== "undefined"
ฉันจะต้องทดสอบว่าในเบราว์เซอร์อื่นและดูว่าสิ่งที่ฉันไป
undefined
ต้องเป็นสตริง
ที่จริงแล้วคุณต้องล้อมรอบด้วยบล็อกลอง / จับเพื่อให้รหัสของคุณจะไม่หยุดทำงาน แบบนี้:
try{
if(typeof response[0].title !== 'undefined') {
doSomething();
}
}catch(e){
console.log('responde[0].title is undefined');
}
ประเภทของ:
var foo;
if (typeof foo == "undefined"){
//do stuff
}
อาจเป็นเพราะresponse[0]
ตัวเองไม่ได้กำหนด
ตรวจสอบว่าคุณresponse[0]
มีอยู่จริงหรือไม่ดูเหมือนข้อผิดพลาดจะไม่แนะนำ
คุณต้องตรวจสอบก่อนresponse[0]
ว่าไม่ได้กำหนดไว้และหากยังไม่ได้ตรวจสอบส่วนที่เหลือ นั่นหมายความว่าในกรณีของคุณresponse[0]
ไม่ได้กำหนด
ฉันรู้ว่าฉันไปที่นี่ 7 เดือน แต่ฉันพบคำถามนี้และมันดูน่าสนใจ ฉันลองสิ่งนี้บนคอนโซลเบราว์เซอร์ของฉัน
try{x,true}catch(e){false}
หากตัวแปร x ไม่ได้ถูกกำหนดข้อผิดพลาดจะถูกจับและมันจะเป็นเท็จถ้าไม่มันจะกลับมาจริง ดังนั้นคุณสามารถใช้ฟังก์ชัน eval เพื่อตั้งค่าให้กับตัวแปร
var isxdefined = eval('try{x,true}catch(e){false}')
typeof
ในบางส่วนของคำตอบเหล่านี้มีความเข้าใจผิดพื้นฐานเกี่ยวกับวิธีการใช้
ไม่ถูกต้อง
if (typeof myVar === undefined) {
แก้ไข
if (typeof myVar === 'undefined') {
เหตุผลก็คือtypeof
ส่งคืนสตริง ดังนั้นคุณควรจะตรวจสอบว่ามันกลับสตริง "ไม่ได้กำหนด" มากกว่าundefined
(ไม่ได้อยู่ในเครื่องหมายอัญประกาศ) ซึ่งเป็นหนึ่งในตัวเองJavaScript ของชนิดดั้งเดิม ผู้ประกอบการจะไม่กลับมาเป็นค่าของชนิดtypeof
undefined
ภาคผนวก
ในทางเทคนิครหัสของคุณอาจใช้งานได้หากคุณใช้การเปรียบเทียบที่ไม่ถูกต้อง แต่อาจไม่ใช่เพราะเหตุผลที่คุณคิด ไม่มีundefined
ตัวแปรที่มีอยู่แล้วใน JavaScript - มันไม่ใช่คำหลักวิเศษที่คุณสามารถเปรียบเทียบสิ่งต่าง ๆ ได้ คุณสามารถสร้างตัวแปรที่เรียกว่าundefined
และให้คุณค่าที่คุณต้องการ
let undefined = 42;
และนี่คือตัวอย่างของวิธีที่คุณสามารถใช้สิ่งนี้เพื่อพิสูจน์ว่าวิธีแรกไม่ถูกต้อง: