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