1.8. 逻辑运算

tag:ActionScript 3 CookBook 简体中文

1.8. 逻辑运算
 
问题
我想检测两个值的大小
解决办法
使用==号来比较两个值,使用 isNaN( ) 来检测是否是有效值.
讨论
==号表达式总是返回布尔值来表示两个值是否相等。当两个数类型不同时,比较时会自动转换为相同的类型再进行比较,如字符型的6和数字型的6比较的话被认为相等。
trace(5 == 6);    // : false
trace(6 == 6);    // : true
trace(6 == "6");  // : true
trace(5 == "6");  // : false
默认的工程项目,在运行上面的代码会出错。因为编译器被设置为强类型编译检测。关掉强类型检测,会把数字型转换为字符型,然后再进行比较。一般不推荐关闭强类型检测,这样可能会引发一些隐蔽的错误不利于程序稳定。
当两个数值不相等时,!=操作符将返回true,否则为false
trace(5 != 6);    // : true
trace(6 != 6);    // : false
trace(6 != "6");  // : false
trace(5 != "6");  // : true
同样,只有在关闭强类型检测后才能编译通过。

平时要注意不要把==写成=,否则会出现无法预料的错误。比如:
var quantity:int = 5;
// 下面的代码是错误的,正确应为 if (quantity == 6)
if (quantity = 6) {
  trace("Rabbits are bunnies.");
}
trace("quantity is " + quantity);  // 输出: quantity is 6
 
可以使用 is 操作符来检测数据类型
var quantity:int = 5;
if (quantity is int) {
  trace("Yippee. It's an integer.");
}
然而有些数值是非法的。下面的代码中quantity 等于 NaN (一个表示无效数字的常数)
var quantity:Number = 15 - "rabbits";
NaN 虽然是无效的数值,但它的数据类型仍属于 Number ,
trace(typeof quantity);   // 显示: "number"
所以,为了测试有个number变量类型不是数字,但又是合法的number,尝试下这么写:
var quantity:Number = 15 - "rabbits";
if (quantity is Number) {
 
  //看起来好像正确,实际上是错误的,因为quantity != NaN 结果被认为都是false
  if (quantity != NaN) {
    trace("Yippee. It's a number.");
  }
}

为了检测一个数字是不合法的,要使用指定的函数isNaN( ) 看下面的例子:
var quantity:Number = 15 - "rabbits";
if (isNaN(quantity)) {
  trace("Sorry, that is not a valid number.");
}
如果要检测相反条件,只要取反就可以,比如为了检测一个变量是个合法的number,使用!isNAN( ),如下:
var quantity:Number = 15 - "rabbits";
if (!isNaN(quantity)) {
 trace ("That is a valid number.");
}
当然了你还可以使用<和>比较符号来比较两个值得大小。
trace(5 < 6);    // 显示: true
trace(5 > 5);    // 显示: false
还有<= 和>= 符号
trace(5 <= 6);   // 显示: true
trace(5 >= 5);   // 显示: true
ActionScript 数据类型的比较有两个情况。在ActionScript中,数据类型分为两类:基本类型
 (string, number, and Boolean) 和复合类型(object, sprite, and array)。当比较基本类型时,是比较他们的值,下面的例子中 quantity 和 total 被认为是相等的因为他们包含相同的值6
var quantity:Number = 6;
var total:Number = 6;
trace (quantity == total);         // 显示: true
然而,当比较符合数据类型时是通过他们的“引用”来比较。当两个引用所指向的对象完全相同才被认为是相等的,而不仅仅是对象的内容相同。例如,两个数组包含相同的内容,但是他们却不相等:
// 用相同的内容创建两个数组
var arrayOne:Array = new Array("a", "b", "c");
var arrayTwo:Array = new Array("a", "b", "c");
trace(arrayOne == arrayTwo);          // 显示: false
只要当引用指向同一个object, array, 或 sprite 才相等. 例子:
// 创建一个简单的数组
var arrayOne:Array = new Array("a", "b", "c");
// 创建另一个变量指向同一个数组
var arrayTwo:Array = arrayOne;
trace(arrayOne == arrayTwo);          // 显示: true
 

加支付宝好友偷能量挖...


评论(0)网络
阅读(73)喜欢(0)flash/flex/fcs/AIR