2

JavaScriptのブールオブジェクトですか?JavaScriptの「すべてがオブジェクト」というのは本当ですか?

4

2 に答える 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 に答える