如果检查,则使用OR vs进行JavaScript变量赋值

时间:2016-04-05 18:23:53

标签: javascript

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

特别是我有一些具有可选数组输入的函数,如果输入是nullundefined我应该将它设置为空数组[],如果它有内容的话应该采取内容。

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

另一种方法是简单的if检查,一般来说相当安全。

我想知道使用下面看到的||方法是否有任何陷阱我没有考虑,虽然它适用于这种情况我会很高兴知道它是否适用于将来继续使用它,或完全停止使用它。

https://jsbin.com/nozuxiwawa/1/edit?js,console

var myArray = ['Some', 'Strings', 'Whatever'];

// Just assign using OR
var pathOne = function(maybeAnArray) {
    var array = maybeAnArray || [];

    console.log(array);
}

// Assign using IF
var pathTwo = function(maybeAnArray) {
    var array = [];

    // Covers null and undefined
    if (maybeAnArray != null) {
        array = maybeAnArray;
    }

    console.log(array);
}

console.log('Path one:');

pathOne(myArray); // ['Some', 'Strings', 'Whatever']
pathOne(null);    // []

console.log('\nPath two:');

pathTwo(myArray); // ['Some', 'Strings', 'Whatever']
pathTwo(null);    // []

4 个答案:

答案 0 :(得分:2)

在我看来,你应该选择使用第二个选项的原因很少:

  1. 首先,它更具可读性 - 仍在学习的新开发人员可能会遇到像var myArray = someArrayArg || [];
  2. 这样理解符号的问题
  3. 如果您使用某种类型的代码检查程序(如JSLint),则会为Expected a conditional expression and instead saw an assignment.
  4. 语句返回警告和/或错误,例如var myArray = someArrayArg || [];
  5. 我们已经拥有类似var myArray = someArrayArg ? someArrayArg : [];的功能

答案 1 :(得分:1)

我更喜欢第一种选择,它对我来说很明显,但是当我需要与其他人分享我的代码时,会考虑使用第二种选择,对任何人都会更清楚。 现在我正在使用声纳,并且更喜欢第二个选项,在更糟糕的工作中更容易理解机器。 最后的想法是使用

if(maybeAnArray !== void(0))

有两个原因:

  1. 使用演员和类型条件

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

  3. 期待它有助于yopu

答案 2 :(得分:1)

当给出选项时,我更喜欢简洁的代码(必须仍然可读)。

我会说||很常见,它被认为是一种良好的做法。一旦看到它几次,它就会好起来。

答案 3 :(得分:1)

恕我直言,使用OR ||进行分配是完全有效的,也是很好的做法。我们当然在我们的项目中使用它,并且我已经看到它在我们使用的许多第三方项目中使用。

您需要注意的是,某些JavaScript对象如何被强制为其他值。例如,如果您正在对""false0等值进行OR运算,那么它们将被视为false ...这意味着当您拥有以下内容时:< / p>

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

通话:

f(0) 

...将返回-1 ...但是调用

f(1)

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

...说,只要你知道OR运算符将如何处理你使用它的操作数 - 那么使用它就是很好的JavaScript实践。