3

我经常在 Javascript 中使用以下构造:

var foo = other_var || "default_value";

在 Javascript 中,如果左侧是假的,则分配右侧的值。

它非常方便,并且可以节省编写更长且不必要的显式三元表达式的时间。

这种结构有名称吗?

奖励:在不使用三元运算符的情况下,在 Php 中是否有这样做的技巧?

PS:另一个变体是如果你没有得到一个真实的值就会抛出一个错误,而不是给出一个默认值:

var foo = something || alert("foo is not set!");
4

5 回答 5

2

逻辑或(通常||)运算符在许多语言中截然不同。

在某些(如C、C++)中,它的工作方式类似于:“评估左侧;如果为真,则返回 true,否则评估右侧,如果为 true 或 false,则返回 true。” 结果在这里总是布尔值。

在其他情况下(如Javascript、Python,我也相信 PHP),它更像是:“评估左侧;如果为真,则返回它,否则评估右侧并返回结果。” 然后结果可以是任何类型,您可以执行以下构造:

a = (b || c); // equivalent to a = b ? b : c;

或者很花哨:

function compare(A, B) { // -1 if A<B, 0 if A==B, 1 if A>B
    return B.x - A.x || B.y - A.y;
}
于 2010-11-15T18:19:59.997 回答
1

我相信它只是被称为 OR 构造。这里有很多关于使用分配的好例子:http: //php.net/manual/en/language.operators.assignment.php

于 2010-11-15T18:00:32.683 回答
1

只是一个逻辑 OR 运算符。点击链接以获取更多关于 javascript 的信息。

从文档中的示例:

o1=true || true       // t || t returns true
o2=false || true      // f || t returns true
o3=true || false      // t || f returns true
o4=false || (3 == 4)  // f || f returns false
o5="Cat" || "Dog"     // t || t returns Cat
o6=false || "Cat"     // f || t returns Cat
o7="Cat" || false     // t || f returns Cat

编辑:关于奖金,您似乎可以通过执行以下操作对最近版本的 PHP 中的三元进行类似的操作:

expr1 ?: expr3

来自 PHP 文档:

从 PHP 5.3 开始,可以省略三元运算符的中间部分。表达式expr1 ?:如果expr1的计算结果为TRUE,则expr3返回expr1 ,否则返回 expr3。

我不熟悉 PHP,所以我很想知道结果。

于 2010-11-15T18:02:02.807 回答
1

这有效:

$mytruevalue = true;
$foo = $mytruevalue or $foo = "20";
echo $foo;

上面的打印"1"是因为那是true($mytruevalue为真) 的字符串表示。

$myfalsevalue = false;
$foo = $myfalsevalue or $foo = "20";
echo $foo;

然而,这打印了"20"因为$myfalsevalue是假的。

如果两个值都等于false,则不打印任何内容。

希望这可以帮助。

于 2010-11-15T18:16:47.987 回答
0

这种结构有名称吗?

它是逻辑 OR 运算符

奖励:在不使用三元运算符的情况下,在 Php 中是否有这样做的技巧?

不,使用 PHP,您只能在 ternay 运算符的帮助下这样做。

于 2010-11-15T18:04:05.023 回答