在这个上下文中使用了什么叫javascript中的双管道?

时间:2014-02-13 23:36:01

标签: javascript

人们经常写这个来指定默认值:

var thing = this || that;

,即AFAIK,与此相同:

var thing = !!this ? this : that;

您如何称呼用于在第一个代码块中指定默认值的技术?

注意:我不是在问什么是逻辑OR。我问的是什么替代三元符号(如第一个代码块中所写)被调用。

4 个答案:

答案 0 :(得分:4)

我打电话给:

var a = A || B;

条件分配,因为它是有效的:

if (!!A) {
  a = A;
} else {
  a = B;
}

它取代了conditional operator : ?

var a = A? A : B;

它也可能被称为“逻辑分配”,因为它涉及逻辑OR表达式,但它似乎不适合它正在做的事情。

答案 1 :(得分:1)

如其他地方所述,这是一个合乎逻辑的OR。

有问题的评估是short-circuit evaluation

这样看起来可能会有所帮助:

if ((foo = bar)) {

} else {
    foo = baz;
}

if语句的计算结果为bar。如果bar为false,则为null,则评估将为false。


编辑:注意:

评估作业完全有效。如果我们说:

if ((a = b)) { ...

请注意,它不是:

if (a === b) { ...

对分配结果进行评估。在这里,它将评估为真if (b)

然而,应该总是将它们包装在括号中。这清楚地表明我们正在评估分配而不是比较变量。

如果一个人喜欢它这是公平的,(我很习惯从C开始),但在这种情况下,它仅仅是为了回答问题。


以同样的方式:

if ((foo = foo)) {

} else {
     foo = baz;
}


var x = false;
console.log((x = x)); // False

因此我们可以说:

(x = x) || (x = y)

简而言之:

x = (x || y);

或更短:

x = x || y;

答案 2 :(得分:-1)

双管称为'或'运算符。

答案 3 :(得分:-1)

双重管道是JavaScript中的Logical OR operator

如果该技术有一个名称,我猜它将是“(ab)使用逻辑OR运算符的短路”