【訳】javascriptのundefinedは書き換えられます.

2313 ワード

周知のように、変数が宣言され、与えられていない場合、その初期値はundefinedである.しかし、javascriptでは、どのように1つの値がundefinedかどうかをチェックしますか?
簡単な答え
現代ブラウザでは、変数を安全に比較することができます.undefinedですか?
if (name === undefined) {...}
いくつかの人が直接undefined変数を使って比較することに反対しています.古いブラウザでその値が再割り当てされることができます.
undefined = "test"
値が再割り当てされた後、undefinedコマンドを使用すると、一つの変数が割り当てられているかどうかを正確に検出できなくなります.しかし、この行動は2009年のECMAScript 5で修復されました.
15.1.1.3 undefined The value of undefined is undefined(see 8.1).This property has the atributes{[[Writable]]:false、[[Enumerable]]:false、[[Configrable]]]:false.
現代ブラウザでは、undefinedの値は書き換えられません.
私たちはie 8またはもっと古いブラウザをサポートしたいですが、どうすればいいですか?
通常undefinedコマンドは安全です.アプリケーションでは、undefinedの値を変更する必要がある理由は何もない.トーマスの答えは説得力のある推理を使って、この点を論証しました.
I don't hear people telling me that I shuldn't use set Timeout because someone canは他の人に教えてもらえません.私はsetTimeoutを使うべきではありません.
window.setTimeout = function () {
    alert("Got you now!");
};
次の行は、「再割り当て可能」であり、raw==undefinedがfalseに戻る場合、気になる2つの方法があり、undefinedであるかどうかを確認することができます.たとえ大域window.undefinedが書き換えられていても、
if (name === void(0)) {...}
この例では0は実際的な意味がないので、1 or function(){}を使っても大丈夫です.void(anything)はいずれも計算されます.undefiendです.
もう一つの選択は、typeofオペレータを使って、割り当てられたかどうかを安全に確認することができます.値の種類が「undefined」であるかどうかを確認してください.全体のundefinedと比較します.
if (typeof name === "undefined") {...}
第二の選択は前のスキームとは少し違っています.nameは声明されていませんが、typeofundefinedに戻ってきます.もしあなたが直接nameを使ったら、undefined or void(0)に異常なエラーがあります.
ただし、void(0)コマンドは使用しないでください.
コードの中でReferenceErrorまたはvoid(0)を使用しないでください.typeof x === "undefined"方法を使って彼らを包むことができます.そうすると、あなたが使う時はわざわざ説明しなくてもいいです.
function isUndefined(value){
    //  undefined,          
    var undefined = void(0);
    return value === undefined;
}
いくつかのツールライブラリは、この方法を展開しています.例えば、isUndefined function、undescoreにおけるisUdefined方法.
Javascriptではどうやってundefiendをチェックしますか?