JavaScript:運算符 – JAVA編程語言程序開發技術文章

我們講到瞭JavaScript中的數據類型和類型轉換.今天,我們接著講一下JavaScript中的每個運算符到底是如何進行類型轉換的.下面會依次講解六個最常用的運算符的工作機制:
typeof
typeof運算符會返回操作數類型的字符串表示.主要有兩個需要註意的地方:
●未定義或未聲明的變量將會返回"undefined", 比如.如果a沒有被聲明,那麼typeof a將會返回"undefined".
●typeof在操作數是null或函數的種情況下會"撒謊".
除瞭這些, 操作數和對應的類型字符串可以從下表查出:
Undefined                            ”undefined”
Null          ”object”
Boolean       “boolean”
Number       “number”
String        ”string”
Object,不可以被調用     “object”
Object,可以被調用      ”function”
我標記“⚠”的兩處地方就是上面提到的typeof誤導我們的地方:type of null應該返回"Null”,而任意函數的類型應該是”object”.
減法(-) www.aiwalls.com
將兩邊的操作數都轉換為數字. "8" – true 會被轉換為 8 – 1.的確非常的簡單,不過下面的加法可就不是瞭.
加法(+)
加法是JavaScript中最麻煩的運算符瞭.讓我們看看在執行a + b的時到底發生瞭什麼:
1. 兩邊的操作數首先被轉換成原始值.這裡我們稱之為A 和 B.
2.如果有任意一個原始值是字符串,則把另一個也轉換成字符串,執行A和B的連接操作並返回連接後的字符串.
3.否則把A和B都轉換為數字,返回兩個數字的和.
例如:
8 + “5″ ➙ “8″ + “5″ ➙ “85″; //”5″是字符串,所以把8也轉換成字符串,連接後值為”85″
8 + true ➙ 8 + 1 ➙ 9; //沒有字符串,兩邊都轉換成數字,true轉換成數字為1,返回相加的和9
“8″ + true ➙ “8″ + “true” ➙ “8true”; //”8″是字符串,把true也轉換成字符串”true”,連接後值為”8true”
小於(<)
和加法運算符不同,小於運算符隻在兩個操作數都為字符串的時候才將他們作為字符串來比較.下面是正式的操作步驟:
1.兩邊的操作數都轉換成原始值.這裡我們稱之為A 和 B.
2.如果這個兩個原始值都為字符串,則把A和B按照字符串來比較.
3.否則將他們都轉換位數字,按照數字大小比較.
例如:
8 > “5″ ➙ 8 > 5 ➙ true; //兩邊不都是字符串,”5″轉換為數字5
8 > true ➙ 8 > 1 ➙ true; //兩邊不都是字符串,true轉換成數字1
“8″ > “18″ ➙ true; //兩邊都是字符串,8的ascii碼大於1的ascii碼
嚴格相等(===)
許多運算符中最讓人省心的一個,也被稱為三等號(===),它的操作很簡單:檢查兩個操作數的類型是否相等,如果相等的話,檢查他們的值是否相等.他的兄弟運算符(==)就比較復雜瞭.
相等(==)
JavaScript中最讓人討厭的運算符.它的工作機制是這樣的:
1.首先檢查兩個操作數的類型,如果他們是相同的類型,那麼繼續執行嚴格相等比較.
2.如果兩個操作數都是null或者是undefined,返回true.
3.如果其中一個操作數是字符串另外一個是數字,則將他們都轉換數字,再執行嚴格相等比較.
4.如果其中一個操作數是佈爾值,把它轉換成數字,然後回到步驟1繼續執行.
5.如果其中一個操作數是字符串或者數字,另外一個是對象值,把這個對象值轉換成原始值,然後回到步驟1繼續執行.
6.返回false.
這基本上意味著,如果兩個操作數的類型不同,則判斷的工作機制類似於小於<比較,如果類型相同,則類似於嚴格相等比較.總結一下就是:當類型不同時,將兩個操作數都轉換為原始值,除非兩個原始值都是字符串,否則再次將兩個原始值轉換成數字再比較,還有就是null == undefined是true.
8 == “5″ ➙ 8 == 5 ➙ false; //”5″轉換成數字5
1 == true ➙ 1 == 1 ➙ true; //true轉換成數字1
0 == “” ➙ 0 == 0 ➙ true; //”"轉換成數字0
0 == “0″ ➙ 0 == 0 ➙ true; //”0″轉換成數字0
“” == “0″ ➙ false; //字符串直接判斷是否相等
“1000″ == “1e3″ ➙ false;        //字符串直接判斷是否相等
1000 == “1e3″ ➙ true; //”1e3″轉換成1000,科學計數法
5 == {valueOf: function () { return 5; }} ➙ 5 == 5 ➙ true; //對象值轉換成原始值5
這六個運算符並不是全部的運算符,但肯定是最麻煩的幾個瞭.
 

發佈留言