Javascriptで一つの値がundefinedかどうかを判断する方法について詳しく説明します.

2294 ワード

前言
ご存知のように、変数が宣言され、割り当てられていない場合、その初期値はundefinedである.しかし、javascriptでは、どうやって一つの値が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 attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }.
現代ブラウザでは、undefinedの値は書き換えられません.
私たちはIE 8またはもっと古いブラウザをサポートしたいですが、どうすればいいですか?
通常undefined命令は安全です.アプリケーションではundefinedの値を変更する理由がありません.
トーマスの答えは説得力のある推理を使って、この点を論証しました.

I don't hear people telling me that I shouldn't use setTimeout because someone can
        ,      setTimeout,         :

window.setTimeout = function () {
  alert("Got you now!");
};
次の行は、「再割り当て可能」であり、raw === undefinedはfalseに戻ります.
それでも気になる場合、一つの値がundefinedであるかどうかを確認する方法が二つあります.たとえグローバルwindow.undefinedが書き換えられていても.

if (name === void(0)) {...}
この例では0は実際的な意味がないので、1 or function(){}を使っても大丈夫です.void(anything)はundefiendを計算します.
もう一つの選択は、typeofオペレータを使って安全に値が割り当てられているかどうかを確認することができます.値の種類が「undefined」であるかどうかを確認してください.全体のundefinedと比較します.

if (typeof name === "undefined") {...}
二つ目の選択は前の案とはちょっと違っています.nameは宣言されていませんが、typeofはundefinedに戻ります.もしあなたが直接nameを使ったら、undefinedor void(0)と異常なエラーがあります.
ただしVOID(0)コマンドは使用しないでください.
コードの中でvoid(0)またはReferenceErrorを使わないようにしてください.typeof x === "undefined" 方法を使って彼らを包んでください.そうすると、あなたが使う時はわざわざ説明しなくてもいいです.

function isUndefined(value){
  //  undefined,          
  var undefined = void(0);
  return value === undefined;
}
いくつかのツールライブラリは、この方法を展開しています.例えば、isUndefined function _.isUndefinedの中のunderscoreの方法です.
締め括りをつける
以上はこの文章の全部の内容です.皆さんの勉強や仕事に一定の助けを与えてほしいです.もし疑問があれば、メッセージを残して交流してもいいです.