new Boolean(false); の評価

ブール値(boolean)としてのtrueと、オブジェクト(object)としてのtrueは、typeofで判別できますが、通常は区別する必要がありません。if文の条件としても、boolean、objectのどちらでも同じに使えます。ただし、次のように書くとダメです。

これを同じに使えると言って良いのかなぁ?

たしかに new Boolean(true) のときは問題ない(?)けれど…

b = new Boolean(false);
alert(b);
if (b) {
  alert('true');
} else {
  alert('false');
}

ary = Array.prototype.concat.call(false, [1, 2]);
c = ary[0];
alert(c);
if (c) {
  alert('true');
} else {
  alert('false');
}

出力は

false
true
false
true    

ただし、IE6.0では (typeof c == 'boolean') だった。
(故に4つめの出力は false)

説明を発見

プリミティブな真偽値の true や false を Boolean オブジェクトの true や false という値と混同しないでください。

その値が undefined や null でないオブジェクトは、値が false の Boolean オブジェクトも含めて、条件文に通されると全て true に評価されます。例えば、以下の if 文の条件は true に評価されます。: