在 javascript 中是否真的有一个很好的理由从不检查布尔值 true || false 例如 if(var){}else{}?

In javascript is there really a good reason to never check for boolean true || false such as if(var){}else{}?

我很确定这不是重复的,所以请多多包涵。

我在编程中理所当然地使用 if() 检查布尔值 true||false。我使用 PHP 进行了大量编程,一些使用 C# ASP.NET,一些使用 Java,很久以前使用 C++,并涉足其他一些。检查布尔值 true||false 一直非常简单(据我所知)。但是在 Java 我听过、读过或者被告知它不好的脚本中。那代替:

if(var){}else{}

我应该这样做:

if(typeof(var) !== 'undefined' || typeof(var) !== null || var !== ''){}else{}

我一直是 JavaScript 的涉猎者,直到最近 6 个月我才开始沉浸其中。在厌倦了编写和重写上面显示的布尔测试的长版本之后,我终于问了一位多年从事大量 js 开发的朋友。我的朋友支持我读到的内容,我永远不应该像以前那样测试布尔值真或假。然而,经过那次讨论后,我更加相信 if(var){}else{} 在 js 中实际上完全没问题,因为它的工作方式完全符合我的直觉预期 (my jsfiddle testing this)

我环顾四周,找到了各种链接。以下似乎更相关:

最让我相信我的使用是安全的并且可以正常工作的事情是我在上面链接的第一个 SO 问题的第三个答案,由 Incognito 给出。 js 规范非常清楚什么会和不会评估为布尔值 true||false,这又完全符合我的预期(尽管必须提醒一个空数组是一个对象......但这是特定的Java脚本,而其余部分完全符合我的预期)。

谁能提供一个明确的理由不检查 JavaScrpt 中的布尔值 true 或 false,意识到我知道布尔值检查和相等性检查之间的区别?

提前致谢!

如果 var 是未定义的、null 或空字符串,则它是假的。您可以依赖它,因为它是语言规范的一部分。通过检查其真实性来检查某物是否未定义是完全可以接受并广泛实践的。

怎么样:

if (!!variable) {
    //Some code
}

编辑:

我的错,不要用这个。 这 return 与

完全相同
if (variable) {
    //Some code
}

首先:

function test(someVar)
{
    return typeof(someVar);
}

test();      // return: "undefined"
test(null);  // return: "object"
test(false); // return: "false"
test(0);     // return: "number"
test("hi");  // return: "string"
test({});    // return: "object"
  • "undefined"既不是真也不是假;它是未定义的
  • 如果某事不存在,怎么可能是真或假?
  • false、null、0 和 "" 都等于 false
  • 其他都是真的

typeof(var) 的思想是检查变量是否被定义。变量可以定义为空值 var blah = null,在这种情况下变量 被定义为 但空值

使用 typeof(var) 完全取决于您的代码和您在做什么。有时我检查,有时我不检查。

Checking for boolean true||false has always been pretty straightforward. But in JavaScript I've heard, read, and otherwise been told it's bad.

没有。在 JavaScript 中检查布尔值与在所有其他语言中一样简单。

如果 var 是一个布尔值(即 truefalse),那么用 if (var) {…} else {…} 检查是好的并且完全安全。没有额外的东西要考虑。

您链接的所有文章提到的问题都与 var 不是布尔值有关。 JavaScript 将它们强制转换为布尔值,并且需要记住其规则(臭名昭著的 "falsey" 值)。请放心,这些比在不同类型的值上使用 == 的规则要容易得多(这就是第一个链接的内容,另请参阅 Which equals operator (== vs ===) should be used in JavaScript comparisons?)。

但是有一种简单的方法可以避免麻烦。您知道程序中的变量可以取哪些可能的值(至少,它们应该取的值)。确保只将布尔值(包括比较等布尔表达式的结果)传递给条件语句,并确保永远不要将不同类型的值相互比较。