2016-06-17 8 views
-3

ここで何が起こっているのか分かりません。変数がnullであるかどうかを調べるときに、正しくない変数を取得し、直接テストすると正しい(変数はnullです)戻り値を返します。何が起こっていますか ?なぜJavaScriptはとても混乱していますか?関数内でnull値をチェックすると、間違った結果が返される

var variable = null; 

function scoppedVariables(variable) { 
    if(variable === null) { 
    console.log('variable is null'); 
} else { 
    console.log('variable is not null'); 
} 

} 

scoppedVariables(); 
+0

scoppedVariables()は、関数を呼び出す場所の値を渡します。 –

+0

関数に何も渡していないため、nullやその他の値を扱うことはできません。 – ssube

+0

今私はとても愚かな気がする:P –

答えて

3

あなたがパラメータとしてvariableを受け入れているので、それはあなたが関数の外に定義variableを引き継ぎます。あなたが関数呼び出しでそれを渡さないので、関数ではむしろundefinedよりもnullです。 (あなたは非厳密な比較を使用していたかもしれないが、この場合には、あなたが実際に何が起こっているのか把握していないだろう;))

2
null == undefined // true 
null === undefined // false 

メソッドが引数なしで呼び出され、そのためvariableは、その定義されていませんは厳密にはであり、nullと等しくありません。そのように呼ばれると、それはあなたが機能する変数を渡すために、より良いpractiveのですが、それはグローバルパラメータにアクセスする、

function scoppedVariables(){..} 

いずれかのパラメータを持つ関数を呼び出すか、署名から削除しかし、。

0

は、あなたがそれゆえvariableがNULLではなく、未定義されるだろう、あなたの関数呼び出しでは何も渡していなかった

if (typeof variable == 'undefined') { 
    console.log('variable is undefined'); 
} else { 
    console.log('variable is defined'); 
    if (variable == null) { 
     console.log('variable is null); 
    } else { 
     console.log('variable is not null'); 
    } 
} 

...代わりにこれを使用するように機能を改正します。私がここに示したように、パラメータ入力に関してもっと守る方がいいかもしれません。

関連する問題