สำหรับตัวแปรในท้องถิ่นการตรวจสอบด้วยlocalVar === undefined
จะใช้งานได้เนื่องจากจะต้องมีการกำหนดไว้ในที่ใดที่หนึ่งภายในขอบเขตมิฉะนั้นจะไม่ถูกพิจารณาว่าเป็นแบบโลคัล
สำหรับตัวแปรที่ไม่ใช่แบบโลคัลและไม่ได้กำหนดไว้ทุกที่การตรวจสอบsomeVar === undefined
จะเกิดข้อยกเว้น: Uncaught ReferenceError: j ไม่ได้ถูกกำหนดไว้
นี่คือรหัสบางส่วนที่จะอธิบายสิ่งที่ฉันพูดด้านบน โปรดให้ความสนใจที่จะ inline ความคิดเห็นเพื่อความชัดเจนต่อไป
function f (x) {
if (x === undefined) console.log('x is undefined [x === undefined].');
else console.log('x is not undefined [x === undefined.]');
if (typeof(x) === 'undefined') console.log('x is undefined [typeof(x) === \'undefined\'].');
else console.log('x is not undefined [typeof(x) === \'undefined\'].');
// This will throw exception because what the hell is j? It is nowhere to be found.
try
{
if (j === undefined) console.log('j is undefined [j === undefined].');
else console.log('j is not undefined [j === undefined].');
}
catch(e){console.log('Error!!! Cannot use [j === undefined] because j is nowhere to be found in our source code.');}
// However this will not throw exception
if (typeof j === 'undefined') console.log('j is undefined (typeof(x) === \'undefined\'). We can use this check even though j is nowhere to be found in our source code and it will not throw.');
else console.log('j is not undefined [typeof(x) === \'undefined\'].');
};
หากเราเรียกรหัสข้างต้นดังนี้:
f();
ผลลัพธ์จะเป็นดังนี้:
x is undefined [x === undefined].
x is undefined [typeof(x) === 'undefined'].
Error!!! Cannot use [j === undefined] because j is nowhere to be found in our source code.
j is undefined (typeof(x) === 'undefined'). We can use this check even though j is nowhere to be found in our source code and it will not throw.
หากเราเรียกรหัสข้างต้นเช่นนี้ (มีค่าใด ๆ จริง):
f(null);
f(1);
ผลลัพธ์จะเป็น:
x is not undefined [x === undefined].
x is not undefined [typeof(x) === 'undefined'].
Error!!! Cannot use [j === undefined] because j is nowhere to be found in our source code.
j is undefined (typeof(x) === 'undefined'). We can use this check even though j is nowhere to be found in our source code and it will not throw.
เมื่อคุณทำเครื่องหมายเช่นนี้: typeof x === 'undefined'
คุณต้องถามสิ่งนี้เป็นหลัก: โปรดตรวจสอบว่าตัวแปรนั้นx
มีอยู่ (ได้ถูกกำหนดไว้แล้ว) ที่ใดที่หนึ่งในซอร์สโค้ด (มากหรือน้อย). หากคุณรู้จัก C # หรือ Java การตรวจสอบประเภทนี้จะไม่เกิดขึ้นเพราะหากไม่มีอยู่จะไม่มีการรวบรวม
<== Fiddle Me ==>