运营商对指令的评价是什么?
像:
var flag:Boolean=true;
flag && trace("1") && trace("2") && trace("3");
输出: 1 2 3
var flag:Boolean=true;
flag && trace("1") || trace("2") || trace("3");
输出 1
or运算符在idk下打破句子在什么情况下...
编辑:好的,现在我看到句子如何与运算符一起工作,但是任何没有返回值的指令都被评估为true?
似乎你无法评估你想要的任何指令,例如:
private function any():void{
true && return;
}
会抛出编译错误。
编辑:在这种情况下,它的行为与第二个示例不同:
true && one() || two() || three();
功能
private function one():void{
trace("1");
}
private function two():void{
trace("2");
}
private function three():void{
trace("3");
}
输出: 1 2 3
编辑:分配值:
var a:int;
(a=1) || trace("1");
(a=2) && trace("2");
输出: 2
编辑:
||
如果为true,则返回expression1,或者可以将其转换为true,否则返回expression2
&&
“返回expression1,如果它为false或者可以转换为false,则返回expression2。可以转换为false的值的示例是0,NaN,null和undefined”。
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/operators.html#logical_OR
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/operators.html#logical_AND
答案 0 :(得分:6)
这称为短路评估。基本上,当可以确定其结果时,停止和/或表达式评估。
例如,当评估和(&&)评估可以在此时停止,首先发现错误。无论您添加多少真值,false && true && true && true...
始终为false。同样适用于或者是真值。
答案 1 :(得分:5)
ActionScript 3是一种ECMAScript变体,这意味着它基于与JavaScript相同的标准。
由于此&&
和||
与其他C风格的语言不相似。
a || b
returns a
if a
is truthy, otherwise it returns b
.
a && b
returns a
if a
is falsey, otherwise it returns b
.
这使得||
基本上等同于a ? a : b
,而&&
基本上等同于!a ? a : b
。
他们还有一个短路评估机制。如果要返回第一个参数,则不执行第二个参数。