ฉันต้องการตรวจสอบว่าตัวแปรถูกกำหนดหรือไม่ ตัวอย่างเช่นต่อไปนี้จะโยนข้อผิดพลาดที่ไม่ได้กำหนดไว้
alert( x );ฉันจะจับข้อผิดพลาดนี้ได้อย่างไร
ฉันต้องการตรวจสอบว่าตัวแปรถูกกำหนดหรือไม่ ตัวอย่างเช่นต่อไปนี้จะโยนข้อผิดพลาดที่ไม่ได้กำหนดไว้
alert( x );ฉันจะจับข้อผิดพลาดนี้ได้อย่างไร
คำตอบ:
ใน JavaScript nullเป็นวัตถุ มีค่าอีกอย่างสำหรับสิ่งที่ไม่มีอยู่, undefined. DOM ส่งคืนnullเกือบทุกกรณีที่ล้มเหลวในการค้นหาโครงสร้างบางอย่างในเอกสาร แต่ใน JavaScript เองundefinedคือค่าที่ใช้
ประการที่สองไม่ไม่เทียบเท่าโดยตรง หากคุณต้องการตรวจสอบเป็นพิเศษให้nullทำ:
if (yourvar === null) // Does not execute if yourvar is `undefined`หากคุณต้องการตรวจสอบว่ามีตัวแปรอยู่หรือไม่นั้นสามารถทำได้ด้วยtry/ catchเนื่องจากtypeofจะจัดการกับตัวแปรที่ไม่ได้ประกาศและตัวแปรที่ประกาศด้วยค่าundefinedเท่ากับ
แต่เพื่อตรวจสอบว่ามีการประกาศตัวแปรหรือไม่และundefined:
if (yourvar !== undefined) // Any scopeก่อนหน้านี้มีความจำเป็นต้องใช้typeofโอเปอเรเตอร์เพื่อตรวจสอบการไม่ได้กำหนดอย่างปลอดภัยเพราะมันเป็นไปได้ที่จะกำหนดใหม่undefinedเหมือนตัวแปร วิธีเก่า ๆ มีลักษณะเช่นนี้:
if (typeof yourvar !== 'undefined') // Any scopeปัญหาของundefinedการกำหนดใหม่ได้รับการแก้ไขใน ECMAScript 5 ซึ่งเปิดตัวในปี 2009 ตอนนี้คุณสามารถใช้งานได้อย่างปลอดภัย===และ!==ทดสอบundefinedโดยไม่ต้องใช้typeofเนื่องจากundefinedได้อ่านอย่างเดียวมาระยะหนึ่งแล้ว
หากคุณต้องการทราบว่าสมาชิกมีอิสระ แต่ไม่สนใจว่าคุณค่าคืออะไร:
if ('membername' in object) // With inheritance
if (object.hasOwnProperty('membername')) // Without inheritanceหากคุณต้องการทราบว่าตัวแปรเป็นจริงหรือไม่ :
if (yourvar)typeofโอเปอเรเตอร์ ( typeof null == 'object') nullค่าเป็นค่าดั้งเดิมซึ่งเป็นค่าเดียวของชนิด Null 
                    วิธีเดียวที่จะทดสอบว่าตัวแปรคือundefinedทำสิ่งต่อไปนี้อย่างแท้จริงหรือไม่ โปรดจำไว้ว่าไม่ได้กำหนดเป็นวัตถุใน JavaScript
if (typeof someVar === 'undefined') {
  // Your variable is undefined
}โซลูชันอื่น ๆ บางรายการในชุดข้อความนี้จะทำให้คุณเชื่อว่าตัวแปรไม่ได้ถูกกำหนดแม้ว่าจะได้รับการกำหนด (ด้วยค่า NULL หรือ 0 เป็นต้น)
ReferenceErrorการทดสอบเท่านั้นซึ่งไม่สามารถผลิต
                    undefinedเป็นวัตถุในจาวาสคริปต์คือข้อมูลที่ผิด คำสั่งนี้เกี่ยวข้องกับคำตอบของคุณหรือไม่? มันเป็นค่าundefinedประเภทได้รับมอบหมายให้ระบุชื่อระดับโลกundefined undefined
                    undefinedได้รับการอ่านอย่างเดียวตั้งแต่ ES5 คุณสามารถทดสอบการใช้งานไม่ได้กำหนดหรือใช้จดชวเลขเช่นนี้if (x === undefined) {...} if (x === void 0)
                    ในทางเทคนิคแล้วการแก้ปัญหาที่เหมาะสมคือ (ฉันเชื่อ):
typeof x === "undefined"บางครั้งคุณอาจขี้เกียจและใช้งานได้
x == nullแต่นั่นจะอนุญาตให้ทั้งตัวแปรที่ไม่ได้นิยาม x และตัวแปร x ที่มีค่า null จะส่งกลับค่าจริง
var x;แล้วtypeof x;คุณจะได้รับ"undefined"เหมือนว่าคุณทำtypeof lakjdflkdsjflsj;
                    เวอร์ชั่นย่อที่ง่ายยิ่งขึ้นและมากขึ้นคือ:
if (!x) {
   //Undefined
}หรือ
if (typeof x !== "undefined") {
    //Do something since x is defined.
}ฉันมักจะทำ:
function doSomething(variable)
{
    var undef;
    if(variable === undef)
    {
         alert('Hey moron, define this bad boy.');
    }
}คุณยังสามารถใช้ตัวดำเนินการเงื่อนไขประกอบไปด้วย:
var a = "hallo world";
var a = !a ? document.write("i dont know 'a'") : document.write("a = " + a);//var a = "hallo world";
var a = !a ? document.write("i dont know 'a'") : document.write("a = " + a);var a = false;? คุณควรตรวจสอบว่าถ้าa===undefinedแทน
                    var x;  การดำเนินการด้านบนจะทำให้เกิดข้อผิดพลาด
                    !aทดสอบความเป็นจริงundefinedก็ยังทดสอบจริงสำหรับ0และและnull falseสิ่งนี้ไม่ถูกต้องมากและควรลบออก
                    ฉันมักจะใช้วิธีที่ง่ายที่สุด:
var variable;
if (variable === undefined){
    console.log('Variable is undefined');
} else {
    console.log('Variable is defined');
}แก้ไข:
หากไม่มีการเริ่มต้นตัวแปรข้อยกเว้นจะถูกโยน "Uncaught ReferenceError: ตัวแปรไม่ได้ถูกกำหนด ... "
Uncaught ReferenceError: variable is not defined
                    variable var variable;และตัวอย่างนี้จะแทนที่variableในขอบเขตท้องถิ่น มันสามารถทำลายตรรกะที่คาดว่าจะเข้าถึงการปิดหรือตัวแปรทั่วโลก เช่น:var variable = 1; function test() {     var variable;     if (variable === undefined){         console.log('Variable is undefined');     } else {         console.log('Variable is defined: ' + variable);     }     } test(); // Variable is undefined
                    "ทางออก" ที่เป็นไปได้อีกอย่างหนึ่งคือการใช้windowวัตถุ มันหลีกเลี่ยงปัญหาข้อผิดพลาดของการอ้างอิงเมื่ออยู่ในเบราว์เซอร์
if (window.x) {
    alert('x exists and is truthy');
} else {
    alert('x does not exist, or exists and is falsy');
}undefinedอย่างไร สิ่งนี้จะไม่ทำเช่นนั้น
                    ข้อผิดพลาดกำลังบอกคุณว่าxไม่มีอยู่จริง! ยังไม่ได้ประกาศซึ่งแตกต่างจากการกำหนดค่า
var x; // declaration
x = 2; // assignmentหากคุณประกาศxคุณจะไม่ได้รับข้อผิดพลาด คุณจะได้รับการแจ้งเตือนที่ระบุว่าundefinedเนื่องจากxมีอยู่ / ได้รับการประกาศแล้วแต่ยังไม่ได้รับการกำหนดค่า
ในการตรวจสอบว่ามีการประกาศตัวแปรหรือไม่คุณสามารถใช้typeofวิธีอื่นในการตรวจสอบว่ามีตัวแปรอยู่หรือไม่ที่จะทำให้เกิดข้อผิดพลาดเดียวกับที่คุณได้รับในตอนแรก
if(typeof x  !==  "undefined") {
    alert(x);
}xนี้คือการตรวจสอบชนิดของค่าที่เก็บไว้ใน มันจะกลับมาundefinedเมื่อxยังไม่ได้รับการประกาศหรือถ้ามันได้รับการประกาศและยังไม่ได้รับมอบหมาย
typeofผู้ประกอบการอีกต่อไป
                    voidผลตอบแทนที่ผู้ประกอบการundefinedสำหรับการโต้แย้งใด ๆ / การแสดงออกผ่านไป เพื่อให้คุณสามารถทดสอบกับผลลัพธ์ (อันที่จริงตัวแปลงบางตัวเปลี่ยนรหัสของคุณจากundefinedเป็นvoid 0เพื่อบันทึกอักขระสองสามตัว)
ตัวอย่างเช่น:
void 0
// undefined
if (variable === void 0) {
    // variable is undefined
}typeofและคิดว่าundefinedสามารถกำหนดใหม่ซึ่งไม่สามารถทำได้ประมาณหนึ่งทศวรรษ
                    undefinedเพราะพระเจ้าเท่านั้นที่รู้เหตุผลว่าการใช้void 0จะกลับมาundefinedโดยไม่คำนึงถึง
                    เราสามารถตรวจสอบได้undefinedดังนี้        
var x; 
if (x === undefined) {
    alert("x is undefined");
} else {
     alert("x is defined");
}ทำสิ่งที่ต้องการด้านล่าง:
function isNotDefined(value) {
  return typeof value === "undefined";
}และเรียกว่าชอบ:
isNotDefined(undefined); //return true
isNotDefined('Alireza'); //return falseคำตอบที่ยอมรับนั้นถูกต้อง แค่ต้องการเพิ่มอีกหนึ่งตัวเลือก คุณยังสามารถใช้try ... catchบล็อกเพื่อจัดการสถานการณ์นี้ ตัวอย่างนอกลู่นอกทาง:
var a;
try {
    a = b + 1;  // throws ReferenceError if b is not defined
} 
catch (e) {
    a = 1;      // apply some default behavior in case of error
}
finally {
    a = a || 0; // normalize the result in any case
}ระวังcatchบล็อกซึ่งค่อนข้างยุ่งเพราะมันสร้างขอบเขตระดับบล็อก และแน่นอนตัวอย่างนั้นง่ายมากในการตอบคำถามที่ถาม แต่ไม่ครอบคลุมถึงแนวปฏิบัติที่ดีที่สุดในการจัดการข้อผิดพลาด;)
ฉันใช้ฟังก์ชั่นขนาดเล็กเพื่อตรวจสอบว่ามีการประกาศตัวแปรซึ่งลดปริมาณความยุ่งเหยิงในไฟล์จาวาสคริปต์ของฉัน ฉันเพิ่มการตรวจสอบค่าเพื่อให้แน่ใจว่าตัวแปรไม่เพียง แต่มีอยู่ แต่ยังได้รับการกำหนดค่า เงื่อนไขที่สองตรวจสอบว่าตัวแปรได้รับการสร้างอินสแตนซ์หรือไม่เพราะถ้าตัวแปรนั้นถูกกำหนด แต่ไม่ได้สร้างอินสแตนซ์ (ดูตัวอย่างด้านล่าง) ก็จะยังคงเกิดข้อผิดพลาดหากคุณพยายามอ้างอิงค่าใน
ไม่ได้สร้างอินสแตนซ์ - var my_variable; -var my_variable = ""; 
function varExists(el) { 
  if ( typeof el !== "undefined" && typeof el.val() !== "undefined" ) { 
    return true; 
  } else { 
    return false; 
  } 
}จากนั้นคุณสามารถใช้คำสั่งแบบมีเงื่อนไขเพื่อทดสอบว่าตัวแปรได้รับการกำหนดและอินสแตนซ์แบบนี้ ...
if ( varExists(variable_name) ) { // checks that it DOES exist } หรือเพื่อทดสอบว่ายังไม่ได้กำหนดและใช้งานอินสแตนซ์ ...
if( !varExists(variable_name) ) { // checks that it DOESN'T exist }return typeof el !== "undefined" && typeof el.val() !== "undefined"