Đối với các biến cục bộ, kiểm tra với localVar === undefined
sẽ hoạt động vì chúng phải được xác định ở đâu đó trong phạm vi cục bộ hoặc chúng sẽ không được coi là cục bộ.
Đối với các biến không cục bộ và không được xác định ở bất kỳ đâu, kiểm tra someVar === undefined
sẽ đưa ra ngoại lệ: Uncaught ReferenceError: j không được xác định
Đây là một số mã sẽ làm rõ những gì tôi đang nói ở trên. Hãy chú ý đến ý kiến nội tuyến để rõ ràng hơn .
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\'].');
};
Nếu chúng ta gọi mã ở trên như thế này:
f();
Đầu ra sẽ là thế này:
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.
Nếu chúng ta gọi mã ở trên như thế này (với bất kỳ giá trị nào thực sự):
f(null);
f(1);
Đầu ra sẽ là:
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.
Khi bạn thực hiện kiểm tra như thế này: typeof x === 'undefined'
về cơ bản, bạn đang hỏi điều này: Vui lòng kiểm tra xem biến x
có tồn tại (đã được xác định) ở đâu đó trong mã nguồn không. (nhiều hơn hoặc ít hơn). Nếu bạn biết C # hoặc Java, loại kiểm tra này không bao giờ được thực hiện bởi vì nếu nó không tồn tại, nó sẽ không biên dịch.
<== Fiddle tôi ==>