我不明白正在发生什么。
var x=new Boolean(false)
if(x){
console.log('plus')
}
console.log(x==false) //true
为什么
if(x)
返回true
呢?我不明白正在发生什么。
var x=new Boolean(false)
if(x){
console.log('plus')
}
console.log(x==false) //true
if(x)
返回true
呢?任何值不为undefined或null的对象,包括其值为false的Boolean对象,在传递给条件语句时都会被视为true。例如,以下if语句中的条件将被视为true。
x = new Boolean(false);
if (x) {
// ...this code is executed
}
var x = new Boolean();
使用关键字new
创建的变量是对象类型,对象类型的值始终为true
。
对象为真值。
请参见http://james.padolsey.com/javascript/truthy-falsey/
因此,在不进行隐式类型转换的情况下进行评估(与false
进行比较)结果为true。
你正在错误地使用布尔函数:http://www.w3schools.com/js/js_booleans.asp
你需要的是:
var x = false;
if (Boolean(x)){
}
然而,由于你已经知道 x 是 true 还是 false,并且你不需要评估一个表达式来判断它是 true 还是 false(根据链接),所以你不需要使用函数 Boolean()
布尔类不是原始值。当您进行检查时
if (someObject)
它将返回true,因为
Boolean(someObject)
将始终返回true。
这里有几个选项: 1. 使用
if (valueOf(x))
获取原始值
2. 去掉 'new' 关键字
x = Boolean(false)
所以你得到了布尔函数的值
x !== false
的意思是“x 不等于 false”。 - user2357112