ActionScript中false==0, true==1

来源:互联网 发布:php加密网站 编辑:程序博客网 时间:2024/04/29 04:07

 今天听同事说AS的语法很奇怪,可以进行连续判断,比如:
var num:Number = 98.45;
if(97.0<num<100.0)
 trace("正确");
调试时居然能够输出"正确"!

感觉有点奇怪,印象中一般的编程语言是不支持这种写法的。于是写了几行代码测试了一下:
1、
var num:Number = 101;
if(97.0<num<100.0)
 trace("正确");
调试时还是输出"正确"!

2、
var num:Number = 50
if(97.0<num<100.0)
 trace("正确");
调试时仍然输出"正确"!

这就怪了,难道这种连续判断的结果始终为true?
3、
var num:Number = 50
if(97.0<num<-100)
 trace("正确");
这一次没有输出了。

看来连续判断的结果并不是总为true,那到底是什么原因呢?想了半天,猜测其原因是大概这样的:
AS中true在内存中用1表示,false用0表示,进行数学判断时,true==1, false==0;
从左往右运算时,97.0<num<100,与下面的代码等效:
var temp:Boolean = 97.0<num;
temp<100;
即先判断97.0<num是否为真,结果存到temp里,再拿temp和100进行比较。
97.0<num的结果只有两种,要么为true,要么为false, true和falsse分别为0和1,所以不管怎么样,temp始终小于100,所以if(97.0<num<100.0) trace("正确");始终输出”正确“;而if(97.0<num<-100) trace("正确");始终没有输出。

最后再测试一下:
4、
if(false == 0)
 trace("false == 0");
if(true == 1)
 trace("true == 1");
if(true == 2)
 trace("true == 2");
输出
false == 0
true == 1
由此可见,AS中,false == 0; true == 1。后来看查看AS API,更确定了这一猜测,API中的有关true,false的说明如下:
true:代表 true 的布尔值。布尔值可以为 true 或 false,true 与 false 是对立的。如果自动数据类型转换将 true 转换为数字,则为 1;如果将 true 转换为字符串,则为 "true";
false:代表 false 的布尔值。布尔值可以为 true 或 false;false 与 true 是对立的。如果自动数据类型转换将 false 转换为数字,则为 0;如果将 false 转换为字符串,则为 "false"。

 

原创粉丝点击