Javascript 布尔构造函数返回奇数数据

Javascript 布尔构造函数返回奇数数据,javascript,Javascript,为什么调用a=new Boolean() a==false返回true Boolean(a)返回true 如果运行(a){} 它们不应该都相同吗?new关键字返回一个布尔对象,它与false不完全相同 var a = new Boolean(); // a is a Boolean object typeof a === 'object'; // using equality operator, a appears to be false a == false; // using id

为什么调用
a=new Boolean()

  • a==false
    返回true
  • Boolean(a)
    返回true
  • 如果运行(a){}

它们不应该都相同吗?

new关键字返回一个布尔对象,它与false不完全相同

var a = new Boolean();

// a is a Boolean object
typeof a === 'object';

// using equality operator, a appears to be false
a == false;

// using identity, a is not actually false
a !== false;

// casting your Boolean object results in true,
// similar to casting any other object
Boolean(a) === true;
Boolean({}) === true;
看看这本书。您将看到,将对象传递给Boolean会创建一个值为true的对象

如有必要,作为第一个参数传递的值将转换为布尔值。如果值被省略或为0、-0、null、false、NaN、undefined或空字符串(“”),则对象的初始值为false。所有其他值,包括任何对象或字符串“false”创建初始值为true的对象

作为第一个参数传递的值将转换为布尔值 值,如果需要。如果值被省略或为0,-0,null,false, NaN、undefined或空字符串(“”),对象的首字母为 虚假的价值。所有其他值,包括任何对象或字符串 “false”,创建初始值为true的对象

不要将基本布尔值true和false与 布尔对象的真值和假值

新构造的布尔对象的[[PrimitiveValue]]内部属性设置为ToBoolean(值)

这意味着a是一个基本值为
false
ToBoolean(未定义)
)的
Boolean
对象


如果类型(x)是布尔值,则返回比较结果tonNumber(x)==y

ToNumber(a)
将为
0
,因为
a
的原始值为
false
<代码>0==错误


当布尔函数作为函数而不是构造函数调用时,它将执行类型转换

由于
a
是一个对象,
Boolean(a)
true
。所有对象都转换为
true



如上所述,a是一个对象,因此在if语句中强制为true。

因为
typeof a==object
new Boolean()
返回一个对象,
Boolean()
返回一个基元值。
a = new Boolean()
a == false // true
Boolean(a) // true
if (a) doStuff()