私は次のコードに遭遇しました:
function test(data) {
if (data != null && data !== undefined) {
// some code here
}
}
私はJavaScriptに少し慣れていますが、ここで読んだ他の質問から、このコードはあまり意味がないように見えます。
以外のコンテキストで未定義の変数にアクセスすると、エラーが発生しますtypeof
。
更新:上記の(の引用)答えは誤解を招く可能性があります。«未定義の変数»ではなく、« 宣言されていない変数»と表示する必要があります。
私が知ったように、Ryan♦、maerics、およびnwellnhofの回答では、関数に引数が指定されていない場合でも、引数の変数は常に宣言されています。この事実は、以下のリストの最初の項目が間違っていることも証明しています。
私の理解では、次のシナリオが発生する可能性があります。
関数が引数なしで呼び出されたためdata
、未定義の変数が作成され、でエラーが発生しましたdata != null
。この関数は、引数として
null
(またはundefined
)を指定して具体的に呼び出されました。この場合data != null
、内部コードはすでに保護されているため、&& data !== undefined
役に立たなくなります。機能は、それが自明の両方を渡します。その場合にはnull以外の引数、と呼ばれていた
data != null
とdata !== undefined
。
Q:私の理解は正しいですか?
私はFirefoxのコンソールで以下を試しました:
--
[15:31:31.057] false != null
[15:31:31.061] true
--
[15:31:37.985] false !== undefined
[15:31:37.989] true
--
[15:32:59.934] null != null
[15:32:59.937] false
--
[15:33:05.221] undefined != null
[15:33:05.225] false
--
[15:35:12.231] "" != null
[15:35:12.235] true
--
[15:35:19.214] "" !== undefined
[15:35:19.218] true
data !== undefined
アフター data != null
がなんの役にも立たないのか分かりません。
if(data)
すると、彼はに、false
またはの0
値として渡すことができませんdata
。
if(typeof someUndefVar == whatever) -- works
にも述べていますif(someUnderVar) -- error
。
data !== null && data !== undefined
と等価である、data != null
と等価ですdata != undefined
。それは条件についてより明確だとして、それは両方のことを見落とすことは容易になるだろう前者の形式は、好まれる傾向があるnull
とundefined
、後の二つの条件で確認されています。
undefined
、IMOコードのにおいです。これはのような保護されたキーワードではなく、null
たまたま未定義の変数です。これは完全に有効であり、コードを壊します:undefined = 1
if (data)
。これは、data
変数がtrueと評価されるかどうかをチェックするニーモニックなJavascriptの方法です。undefined
、null
偽、0、falseになしプロパティ評価すると、空の文字列、空の配列と(?)オブジェクトは、残りは真です。