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"。

 

發佈了24 篇原創文章 · 獲贊 7 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章