1

誰かがここで何が起こっているのか説明できますか?ここで説明する!!ように、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");
}​

http://jsfiddle.net/YAAA7/1/

4

2 に答える 2

5

これは予想される動作です。あなたが偽ではないことを2倍にすると、あなたは偽になります。この、!lはnot演算子です。これは!!、2つの演算子ではありません。double not演算子は、ブール型にキャストするために使用されることがあります。

! false === true
!! false === false
于 2012-12-17T19:08:06.650 に答える
1
var foo = undefined;

footrueを返します。JavaScript ""では、undefined、0、NaN、false、およびnullはfalseの値と見なされるためです。

http://www.mapbender.org/JavaScript_pitfalls:_null,_false,_undefined,_NaN

あなたのコードから:

var foo = undefined; //false

console.log(!!foo); // !!foo = false;

if(!!foo) { //false
  console.log("It will not come because the condition fails");
}else{
    console.log("Else Part");
 }
于 2012-12-17T19:12:11.073 に答える