誰かがここで何が起こっているのか説明できますか?ここで説明する!!
ように、JavaScript (double-bang)演算子をHTML5ローカルストレージと組み合わせて使用しようとしています(0と1の値を保存し、真実性をテストしていますが、欠落しているキーもfalseにする必要があるため、開始時に未定義。
型キャスト時にfalseとしてコンソールにエコーしますが、「if」ステートメントには含まれません。
var foo = undefined;
// outputs undefined
console.log(foo)
// typecast to non-inverted boolean
console.log(!!foo);
if (!!foo) {
console.log("If was false before, why won't this execute?");
} else {
console.log("It didn't work");
}
生産:
undefined
false
It didn't work
http://jsfiddle.net/YAAA7/(Chrome
v23.0.1271.97およびFirefox16.0.1、OS X 10.8.2)
編集-修正されたコード:
(前の'if'ステートメントはfalseと評価されていたため、ブランチは実行されませんでした。)
var foo = false;
// outputs undefined
console.log(foo)
// typecast to non-inverted boolean
console.log(!!foo);
if (!!foo == false) {
console.log("Matches for foo undefined, foo = 0 and foo = false");
} else {
console.log("Matches for foo = 1 and foo = true");
}