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 什么情况下断句...

编辑:好的,现在我看到了这句话如何与运算符一起使用,但是是否有任何没有返回值的指令被评估为真?

而且您似乎无法评估您想要的任何指令,例如:

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

编辑: ||如果为真或可以转换为真,则返回表达式1,否则返回表达式2

&&“如果表达式 1 为假或可以转换为假,则返回表达式 1,否则返回表达式 2。可以转换为假的值的示例有 0、NaN、null 和未定义”。

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

4

2 回答 2

6

这称为短路评估。基本上,当可以确定其结果时,就会停止和/或表达式评估。

例如,当评估和 (&&) 评估可以在发现第一个 false 时停止。false && true && true && true...始终为假,无论您在末尾添加多少真值。or 和真值也是如此。

于 2012-11-02T21:22:06.007 回答
5

ActionScript 3 是 ECMAScript 变体,这意味着它基于与 JavaScript 相同的标准。

正因为如此&&||与其他 C 风格的语言不相似。

a || ba如果为真则返回a,否则返回b

a && ba如果为假则返回a,否则返回b

这使得||本质上等同于a ? a : b,并且&&本质上等同于!a ? a : b

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

于 2012-11-02T21:24:19.797 回答