JavaScript中的布尔对象是?

bet*_*eth 2 javascript boolean

JavaScript中的布尔对象是?JavaScript中的"一切都是对象"是真的吗?

Fel*_*ing 8

基元不是对象,其他所有(任何标准对象)都是对象.但是,大多数原语(除了undefined和之外null)都有一个对象.

所以

var a = false;
Run Code Online (Sandbox Code Playgroud)

不是一个对象,但是

var b = new Boolean(false);
Run Code Online (Sandbox Code Playgroud)

是.

由于两个对象只有在引用同一个对象时才相等,因此最好使用对象版本的基元:

a === false; // is true
b === false // is false   <- this is a problem
Run Code Online (Sandbox Code Playgroud)

或者特别是对于布尔对象,将它们与任何布尔运算符一起使用会产生意外结果.对象引用始终求值为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
Run Code Online (Sandbox Code Playgroud)

无论如何,使用这些对象版本没有任何真正的优势,因为当您尝试在它们上调用方法时,JavaScript是自动装箱原语.这就是为什么叫:

var s = "HI THERE!".toLowerCase();
s = s.substring(0,2);
Run Code Online (Sandbox Code Playgroud)

是可能的.