带或vs if check的JavaScript变量赋值

带或vs if check的JavaScript变量赋值,javascript,Javascript,在JavaScript中,我最近意识到可以使用OR|逻辑运算符进行赋值,我想知道这是否被视为不好的做法 特别是,我有一些具有可选数组输入的函数,如果输入为null或未定义,我应该将其设置为空数组[],如果它有内容,它应该接受内容 我发现使用OR运算符的赋值可以在一行中完美地处理这一点,它是干净的。然而,这感觉像是一种可能被认为是不好的做法,或者可能有一些可怕的陷阱,我没有考虑 另一种方法是简单的if检查,这通常是相当安全的 我想知道使用下面的|方法是否有任何我没有考虑的陷阱,尽管它在这种情况下有

在JavaScript中,我最近意识到可以使用OR
|
逻辑运算符进行赋值,我想知道这是否被视为不好的做法

特别是,我有一些具有可选数组输入的函数,如果输入为
null
未定义
,我应该将其设置为空数组
[]
,如果它有内容,它应该接受内容

我发现使用OR运算符的赋值可以在一行中完美地处理这一点,它是干净的。然而,这感觉像是一种可能被认为是不好的做法,或者可能有一些可怕的陷阱,我没有考虑

另一种方法是简单的
if
检查,这通常是相当安全的

我想知道使用下面的
|
方法是否有任何我没有考虑的陷阱,尽管它在这种情况下有效,但我希望知道它是否能在将来继续使用,或者完全停止使用


我更喜欢第一个选项,这对我的眼睛来说很清楚,但当我需要与他人共享我的代码时,我会考虑使用第二个选项,这对任何人来说都会更清楚。 现在我用的是声纳,我更喜欢第二种选择,它将更容易在不均匀工程中为机器压缩。 最后一个想法是使用

if(maybeAnArray !== void(0))
原因有二:

  • 使用强制转换和类型条件

  • void(0)对所有浏览器都适用


  • 希望它能帮助yopu

    如果给我这个选项,我更喜欢简洁的代码(它必须仍然可读)


    我想说| | |很普遍,因此被认为是良好的做法。一旦你看过几遍,它就会读得很好。

    在我看来,有几个理由让你更愿意使用第二个选项:

  • 首先,它更具可读性-仍在学习的新开发人员在理解诸如
    var myArray=someArrayArg | |[]之类的符号时可能会遇到问题
  • 如果您正在使用某种代码检查器,如JSLint,它们将返回警告和/或错误,如
    需要条件表达式,而看到赋值。
    对于带有
    var myArray=someArrayArg | |[]的语句
  • 我们已经有了类似于
    var myArray=someArrayArg的东西了?Somerarayarg:[]效果很好

  • IMHO在作业中使用OR
    |
    是完全有效的,并且是良好的实践。我们当然在我们的项目中使用它,我也看到它在我们使用的许多第三方项目中使用

    您需要注意的是某些JavaScript对象如何被强制为其他值。因此,例如,如果您正在ORing值,如
    “”
    false
    0
    ,则它们将被视为false。。。这意味着当您有以下情况时:

    function f(o) {
       var x = o || -1;
       return x;
    }
    
    电话:

    f(0) 
    
    …将返回-1。。。但是打电话

    f(1)
    
    将返回1。。。即使在这两种情况下都传递了一个数字-因为0被视为false-1被分配给x


    …也就是说,只要您知道OR运算符将如何处理与它一起使用的操作数,那么使用它是一种很好的JavaScript实践。

    请参见。我在您的阵营中。我只是想指出,胁迫的问题并不是针对| |的。在使用if语句时,您仍然需要知道和考虑强制问题。谢谢。我试图让答案尽可能简单——我知道它只触及表面,但我只是想试着说出我能想到的最明显的陷阱!)1.这是一个常见的论点,我不喜欢这种推理。有了这种逻辑,新开发人员就不会学到他们还不知道的东西。更糟糕的是,一个团队将由其最低公分母来定义。您正在使用哪个版本/选项?我没有收到任何这样的警告。我觉得这很奇怪。实际上,您有两个选项| |和三元运算符。当你只需要一个带两个参数的三元运算符时,为什么你更喜欢带三个参数的三元运算符呢。甚至eslint本身的源代码也在使用||
    f(1)