六個最經常使用的運算符的工做機制:
函數
typeof
spa
typeof運算符會返回操做數類型的字符串表示
.主要有兩個須要注意的地方:code
●未定義或未聲明的變量將會返回"undefined"
, 好比.若是a沒有被聲明,那麼typeof a將會返回
"undefined"
.對象
●typeof在操做數是
n
ull或函數的
種狀況下會"撒謊"
.ip
除了這些, 操做數和對應的類型字符串能夠從下表查出:ci
Undefined 」undefined」字符串
Null 」object」get
Boolean 「boolean」string
Number 「number」io
String 」string」
Object,不能夠被調用 「object」
Object,能夠被調用 」function」
我標記「⚠」的兩處地方就是上面提到的typeof誤導咱們的地方:type of null應該返回"
Null」,而任意函數的類型應該是」object」.
將兩邊的操做數都轉換爲數字. "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
這六個運算符並非所有的運算符,但確定是最麻煩的幾個了.