AS3&& ||经营者的指示

时间:2012-11-02 21:13:44

标签: actionscript-3

运营商对指令的评价是什么?

像:

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

2 个答案:

答案 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

他们还有一个短路评估机制。如果要返回第一个参数,则不执行第二个参数。