2016-08-17 4 views
0

今日、私は奇妙な問題に遭遇しました。なぜそれが起こっているのだろうと思っていました...私は、JavaScriptの中で明示的にfalsey(false、0、またはNULL)でなかったものはtrueを返します。これらは同じように評価されないのはなぜですか?

例2ではconsole.log()を例1ではisNativeに、例2ではlocalStorage.getItem(app + ".native_context")に接続すると「false」が返されました。しかし、実際にこれらを実行すると、例1はどちらの場合でも動作しますが、例2は何があってもtrueを返し、すべてが真であるという印象を受けてしまいます。

例1:

var isNative = localStorage.getItem(app + ".native_context"); 
if (isNative === "true") { 
     //do x 
    } else { 
     //do y 
    } 
} 

例2:

if (localStorage.getItem(app + ".native_context")) { 
     //do x 
    } else { 
     //do y 
    } 
} 

誰もが何が起こったのか説明できますか?私は見つけることが好奇心です。

+4

それは '' "false" の文字列が含まれている場合それは真実である空でない文字列です。 – JJJ

+3

文字列はブール値ではありません。 –

+0

'localStorage.getItem(app +" .native_context ")が何を評価するかわかりません。どうやらそれは文字列 "真"ではありません。 – colecmc

答えて

3

ほとんどの文字列は「truthy」値です:あなたは厳密にあなたがチェックしている第二の場合には、値'true'を持つ文字列をチェックしている最初のケースで

if('false') { 
 
    alert('A string is usually truthy!'); 
 
}

+0

私は別のファイルでコードをコピーしていたので、文字列を示す引用符に気付かず、oops – Vemonus

関連する問題