Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript if语句中的布尔值_Javascript_Semantics - Fatal编程技术网

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