我经常在Javascript中使用以下构造:
var foo = other_var || "default_value";
在Javascript中,如果左侧是假的,则会分配右侧的值。
它非常方便,可以节省更长时间和不必要的显式三元表达式。
这种结构有名称吗?
额外奖励:在不使用三元运算符的情况下,有没有在Php中执行此操作的技巧?
PS:另一种变体是如果你没有获得真值,而不是给出默认值,则会抛出错误:
var foo = something || alert("foo is not set!");
答案 0 :(得分:2)
逻辑或(通常||
)运算符在许多语言中都有很大不同。
在某些(例如 C,C ++ )中,它的工作方式如下:“评估左侧;如果是,则返回true,否则评估右侧并返回true如果它是真的或否则。“结果总是布尔在这里。
在其他方面(比如 Javascript,Python ,我相信PHP也是如此)它更像是:“评估左侧;如果是真的,则返回它,否则评估正确-hand side并返回结果。“然后结果可以是任何类型,你可以做类似的构造:
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;
}
答案 1 :(得分:1)
我相信它只是被称为OR构造。这里有很多关于使用作业的好例子: http://php.net/manual/en/language.operators.assignment.php
答案 2 :(得分:1)
是just a logical OR operator。请点击链接获取有关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 5.3开始,可以省略三元运算符的中间部分。表达式 expr1?:expr3 返回 expr1 ,如果 expr1 评估为 TRUE , expr3 否则。
我不熟悉PHP,所以我很想知道结果。
答案 3 :(得分: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
,则不会输出任何内容。
希望这有帮助。
答案 4 :(得分:0)