创建JavaScript布尔变量

创建JavaScript布尔变量,javascript,Javascript,我希望看到虚假警报,但我看到的是真实警报 我读了MDN,它也读了 deletemode = new Boolean(false); if(deletemode) alert("TRUE"); else alert("FALSE"); alert(deletemode); 这就是创建假布尔变量的方法 但是当我运行上面的语句时,我看到“TRUE”,然后在第二个警报中看到false 如果我这样做,它会做我期望它做的事 deletemode = new Boolean(true); 是 Java

我希望看到虚假警报,但我看到的是真实警报

我读了MDN,它也读了

deletemode = new Boolean(false);

if(deletemode) alert("TRUE"); else alert("FALSE");

alert(deletemode);
这就是创建假布尔变量的方法

但是当我运行上面的语句时,我看到“TRUE”,然后在第二个警报中看到false

如果我这样做,它会做我期望它做的事

deletemode = new Boolean(true);


JavaScript语法错误?

这是意外的原因,因为
new Boolean(false)
返回一个对象。在JS中,所有对象的计算结果都是真实值。这就是为什么测试会发出“TRUE”警报,因为“if”构造只是检查表达式是否真实


此外,永远不要使用布尔构造函数创建布尔值。相反,只需使用文本值,
true
false

=
严格相等运算符将返回
false
,因为
布尔值和布尔值不是严格相等的。事实上,即使这样也会返回false,因为两个新创建的对象不是同一个对象:

if(deletemode) 
但是,
deletemode==false
测试将返回
true
,因为它将调用对象上的
.valueOf()
方法,并获取值
false
,从而正确地比较等于
false


alert()
函数总是对其参数调用
.toString()
,因此也会显示
false
,而不是默认的
[对象对象]

我想您可以在下面的链接中找到一些答案。简短的回答是:使用新的Boolean()构造函数在值周围创建一个包装器,以便调用变量总是返回true。如果您只想存储true/false,而不在保存该值的变量上添加任何额外的函数或逻辑,那么您可能应该直接赋值。ie,var deletemode=false


根据MDN,这看起来像是预期的行为。请参见第一个代码示例。在我的浏览器上,
deletemode==false
的计算结果是
false
,而不是
true
@Alnitak我想他说的是如果(deletemode)
返回
true
,这似乎是预期的行为。他说“如果我这样做,它会做我期望它做的事情”,然后有
如果(deletemodemode==false
)@Alnitak对不起,我想我只是误解了你评论的背景。我明白你的意思。那些字符串值是真是假?不,真和假是字面布尔值。字符串“true”和“false”是字符串值。
if(deletemode) 
new Boolean(true) === new Boolean(true)    // is false