ActionScript中false==0, true==1

 今天听同事说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"。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值