JavaScriptのブールオブジェクトですか?JavaScriptの「すべてがオブジェクト」というのは本当ですか?
質問する
124 次
2 に答える
8
プリミティブはオブジェクトではなく、他のすべて(標準オブジェクト)はオブジェクトです。undefined
ただし、ほとんどのプリミティブ(およびを除くnull
)には、対応するオブジェクトがあります。
それで
var a = false;
オブジェクトではありませんが
var b = new Boolean(false);
は。
2つのオブジェクトは、1つの同じオブジェクトを参照する場合にのみ等しいため、オブジェクトバージョンのプリミティブの使用は避ける必要があります。
a === false; // is true
b === false // is false <- this is a problem
または、特にブールオブジェクトの場合、ブール演算子でそれらを使用すると、予期しない結果が発生します。オブジェクト参照は常にに評価されるtrue
ため、を使用した結果は次のb
ようになります。
// remember
// a is the primitive value false
// b is a boolean object with value false
// NOT
!a // true
// but
!b // false
// AND
a && true // false
// but
b && true // true
とにかく、これらのオブジェクトバージョンを使用することの本当の利点はありません。なぜなら、JavaScriptは、それらのオブジェクトでメソッドを呼び出そうとすると、プリミティブを自動ボックス化するからです。そのため、次のように呼び出します。
var s = "HI THERE!".toLowerCase();
s = s.substring(0,2);
可能です。
于 2012-08-15T23:14:33.047 に答える
1
ブール値、数値、および文字列はオブジェクトのような型です。メソッドはありますが、不変です。
于 2012-08-15T23:16:48.113 に答える