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()
返回truea==false
返回trueBoolean(a)
如果运行(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()