带或vs if check的JavaScript变量赋值
在JavaScript中,我最近意识到可以使用OR带或vs if check的JavaScript变量赋值,javascript,Javascript,在JavaScript中,我最近意识到可以使用OR|逻辑运算符进行赋值,我想知道这是否被视为不好的做法 特别是,我有一些具有可选数组输入的函数,如果输入为null或未定义,我应该将其设置为空数组[],如果它有内容,它应该接受内容 我发现使用OR运算符的赋值可以在一行中完美地处理这一点,它是干净的。然而,这感觉像是一种可能被认为是不好的做法,或者可能有一些可怕的陷阱,我没有考虑 另一种方法是简单的if检查,这通常是相当安全的 我想知道使用下面的|方法是否有任何我没有考虑的陷阱,尽管它在这种情况下有
|
逻辑运算符进行赋值,我想知道这是否被视为不好的做法
特别是,我有一些具有可选数组输入的函数,如果输入为null
或未定义
,我应该将其设置为空数组[]
,如果它有内容,它应该接受内容
我发现使用OR运算符的赋值可以在一行中完美地处理这一点,它是干净的。然而,这感觉像是一种可能被认为是不好的做法,或者可能有一些可怕的陷阱,我没有考虑
另一种方法是简单的if
检查,这通常是相当安全的
我想知道使用下面的|
方法是否有任何我没有考虑的陷阱,尽管它在这种情况下有效,但我希望知道它是否能在将来继续使用,或者完全停止使用
我更喜欢第一个选项,这对我的眼睛来说很清楚,但当我需要与他人共享我的代码时,我会考虑使用第二个选项,这对任何人来说都会更清楚。 现在我用的是声纳,我更喜欢第二种选择,它将更容易在不均匀工程中为机器压缩。 最后一个想法是使用
if(maybeAnArray !== void(0))
原因有二:
希望它能帮助yopu如果给我这个选项,我更喜欢简洁的代码(它必须仍然可读)
我想说| | |很普遍,因此被认为是良好的做法。一旦你看过几遍,它就会读得很好。在我看来,有几个理由让你更愿意使用第二个选项:
var myArray=someArrayArg | |[]之类的符号时可能会遇到问题代码>
需要条件表达式,而看到赋值。
对于带有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)