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