skip to main |skip to sidebar

2008-06-07

[AS3]逻辑和(&&)与逻辑或(||)的妙用

使用 &&|| 可以简化代码,提高可读性。比如以下代码:

var foo:Boolean = true;
var bar:Object = {};
trace(foo && bar);  // -> [object Object]
trace(foo || bar);  // -> true

&&|| 的结果是由运算符的左边的项目(这里是 foo )来决定的。简单地说,规则为:

A && B : 如果 Boolean(A) 为 false 则返回 A,否则返回 B。
A || B : 如果 Boolean(A) 为 true 则返回 A,否则返回 B。

所以实际上并没有进行真正数学意义上的逻辑运算,返回值也不一定是 Boolean 值。

Boolean(A) 的转换规则如下:

Undefiend  : false
Null   : false
Boolean  : 与转换前相同
Number   : 0 或 NaN 为 false 替其他的为 true
String   : 空串为 false  其他的为 true
Object   : true

使用逻辑运算符简化代码

使用逻辑运算符可以简化简单的逻辑判断(if)。

//1. 使用 if
if (foo) {
  doSomething();
}
if (!bar) {
  doSomething2();
}

//2. 使用逻辑运算符
foo && doSomething();
bar || doSomething2();

多重 if 的写法:

//1. 使用 if
if (foo) {
  if (bar) {
    sayHello();
  }
}
 
//2. 使用 if 与逻辑运算符
if (foo && bar) {
  sayHello();
}

//3. 只使用逻辑运算符
foo && bar && sayHello();     

虽然 else 也可以实现,但代码有可能变得难一閲读。

&&= 与 ||=

在需要代入结果时,使用 &&=||= 更方便。

//1. 使用 if
if (foo) {
  foo =  "<" + foo + "/>";
}

//2. 使用逻辑运算
foo &&= "<" + foo + "/>";

没有评论: