Javascript if语句中的布尔值
今天我得到了一条关于代码的评论,考虑到我在学校作业中检查变量是真是假的方式 我写的代码是这样的:Javascript if语句中的布尔值,javascript,semantics,Javascript,Semantics,今天我得到了一条关于代码的评论,考虑到我在学校作业中检查变量是真是假的方式 我写的代码是这样的: var booleanValue = true; function someFunction(){ if(booleanValue === true){ return "something"; } } var booleanValue = true; function someFunction(){ if(booleanValue){ r
var booleanValue = true;
function someFunction(){
if(booleanValue === true){
return "something";
}
}
var booleanValue = true;
function someFunction(){
if(booleanValue){
return "something";
}
}
他们说这样写更好/更整洁:
var booleanValue = true;
function someFunction(){
if(booleanValue === true){
return "something";
}
}
var booleanValue = true;
function someFunction(){
if(booleanValue){
return "something";
}
}
我得到的关于“==true”部分的评论是,它是不需要的,可能会造成混乱
然而,我的想法是最好检查变量是否为布尔值,特别是因为Javascript是一种松散类型的语言
在第二个示例中,字符串也将返回“something”
所以我的问题,;将来松开“==true”部分是否更整洁,或者检查变量类型是否也是一种好的做法
编辑:
在我的“real”代码中,布尔值表示图像是否已被删除,因此boolValue应该具有的唯一值是true或false
例如,0和1不应该在该变量中。这取决于您的用例。检查类型也可能有意义,但如果它只是一个标志,则没有意义。因为您已经清楚地初始化为bool,我认为不需要使用
==
运算符。一般来说,省略===true
会更干净、更简单
但是,在Javascript中,这些语句是不同的
if(booleanValue)
将在booleanValue
为真时执行–除0
、false
、'
、NaN
、null
和未定义之外的任何内容
if(booleanValue===true)
仅当booleanValue
恰好等于true
时才会执行,因为选中的值是Boolean
,所以最好直接使用它进行较少的编码,并且它的操作与==true
身份(===)
运算符的行为与等式(==)
运算符的行为相同,只是没有进行类型转换,并且类型必须相同才能视为相等 这要看情况而定。如果您担心您的变量最终可能会解析为TRUE。那么,必须进行严格的检查。否则就看你了。但是,我怀疑语法whather==TRUE
是否会让任何知道他们在做什么的人感到困惑。如果变量只能接受布尔值,那么使用较短的语法是合理的
如果它可能被分配到其他类型,并且您需要将true
与1
或“foo”
区分开来,那么您必须使用==true
如果您编写:如果(x==true)
,则只有x=true才会为true
如果您写入:If(x)
,则对于任何不是:“”(空字符串)、false、null、未定义、0、NaN的x都是真的。首先,事实:
if (booleanValue)
对于booleanValue
的任何truthy值,将满足if
语句,包括true
、任何非零数字、任何非空字符串值、任何对象或数组引用等
另一方面:
if (booleanValue === true)
只有当布尔值
与真值
完全相等时,才满足条件。没有其他真实的价值能满足它
另一方面,如果您这样做:
if (someVar == true)
然后,Javascript将要做的是类型强制true
来匹配someVar
的类型,然后比较这两个变量。在很多情况下,这可能不是我们想要的。因此,在大多数情况下,您希望避免使用==
,因为有一套相当长的规则,说明Javascript如何将两种类型强制为同一类型,除非您了解所有这些规则,并且能够预测JS解释器在给定两种不同类型(大多数JS开发人员无法做到)时可能会执行的所有操作,您可能希望完全避免使用=
举一个例子,说明它有多混乱:
varx;
x=0;
console.log(x==true);//正如所料,这是错误的
console.log(x==false);//果然如此
x=1;
console.log(x==true);//果然如此
console.log(x==false);//果然是假的
x=2;
console.log(x==true);//假??
console.log(x==false);//false
在Javascript中,布尔值的概念相当模糊。考虑这一点:
var bool = 0
if(bool){..} //evaluates to false
if(//uninitialized var) //evaluates to false
因此,当您使用if语句(或任何其他控制语句)时,不必使用“boolean”类型的var。因此,在我看来,如果您知道它是boolean,则语句的“===true”部分是不必要的,但如果您的值是不明确的“truthy”,则绝对必要在javscript中可以找到更多关于布尔的信息。我认为你的推理是正确的。但在实践中,我发现省略==
比较要常见得多。我认为有三个原因:
它通常不会增加表达式的含义-这是在已知值为布尔值的情况下
因为JavaScript中存在大量的类型不确定性,当您得到一个意外的未定义
或null
值时,强制进行类型检查往往会让您头疼。在这种情况下,您通常只希望自己的测试失败。(尽管我试图用“快速失败”的座右铭来平衡这一观点)
JavaScript程序员喜欢快速而松散地处理类型,特别是在布尔表达式中,因为我们可以
考虑这个例子:
var someString = getInput();
var normalized = someString && trim(someString);
// trim() removes leading and trailing whitespace
if (normalized) {
submitInput(normalized);
}
我认为这种代码并不少见。它处理getInput()
返回undefined
、null
或空字符串的情况。由于有两个布尔求值,仅当给定输入是包含非空白字符的字符串时才会调用submitInput()
在JavaScript中,&&&
如果是falsy,则返回其第一个参数;如果是第一个argum,则返回其第二个参数
var p=5;
p==5 ? true
p=="5" ? true
p==="5" ? false