1

私にはこの少し奇妙な状況があります。私が持っているブール式のステートメントは、alertandif演算子で2つの異なる評価を与えています。

var test = new Boolean(homePageNonActive && ((firstTime && homePageHash) || (!firstTime && !homePageHash)));
alert(homePageNonActive && ((firstTime && homePageHash) || (!firstTime && !homePageHash))); // GIVES ME FALSE
alert(test); // GIVES ME TRUE ??? WHY?

if(test){
    alert(homePageNonActive); // GIVES ME TRUE
    alert(firstTime); // GIVES ME TRUE
    alert(homePageHash); // GIVES ME FALSE
}
4

1 に答える 1

1

ブールプリミティブを使用している限り、すべてが正常に機能しているようです。

ただし、問題は、ブールオブジェクト(homePageHash)とブールプリミティブ(homePageNonActiveおよびfirstTime)を混在させていることです。test「true」である理由は、「ブールオブジェクトfalse」が「truthy」であるためです。

ブールオブジェクトはブールプリミティブと同じではありません。

値が未定義またはnullでないオブジェクト(値がfalseのブールオブジェクトを含む)は、条件ステートメントに渡されるとtrueと評価されます。

var x = new Boolean(false),
    y = false; 

if (x) {/*this code is executed*/}
if (y) {/*this code is NOT executed*/} 
于 2012-05-13T11:53:25.697 に答える