1 數據類型轉換
1.1 轉換規(guī)則
① 其他類型轉為 number 類型
string -> number
① 純數字(也包括十六進制和科學計數法)可轉為一個有效的number數字
② 空字符串轉為 0
③ 其他形式的字符串轉為NaN
注:字符串轉換時會去掉兩邊的空格。
boolean -> number:
true 轉為 1,false 轉為 0
null -> number:
轉為0
undefined -> number:
轉為NaN
② 其他類型轉為 string 類型
數據長啥樣就轉成啥樣
③ 其他類型轉為 boolean 類型
number -> boolean:
NaN 和 0 轉為 false,其他都轉為 true
string -> boolean:
空字符串轉為 false,其他都轉為 true(不會去掉空格,空格也轉為true)
null、undefined -> boolean:
轉為 false
1.2 強制類型轉換(顯式轉換)
① 其他類型轉為 number 類型
Number() 標準,自動轉換的規(guī)則與之一致
parseInt() 提取字符串中的整型(直接舍去小數部分,可利用此特性取整)
parseFloat() 提取字符串中的浮點數
注:
- 純數字(含十六進制,不含科學計數法)字符串、以數字開頭的字符串可有效提取并轉為number,其他字符串都轉為NaN。
- 如果要轉換的數據類型不是字符串,統(tǒng)統(tǒng)轉為 NaN。
② 其他類型轉為 string 類型
String()
③ 其他類型轉為 boolean 類型
Boolean()
1.3 自動類型轉換(隱式轉換)
數據參與運算的時候,不符合該運算對數據類型的要求,數據會自動進行類型轉換。
運算對數據類型的要求是由運算符決定
自動類型轉換的規(guī)則與強制類型轉換是一致的
1.4 NaN的特點:
- NaN 與任何數據進行任何運算,結果仍然是 NaN。
- NaN 與任何數據都不相等,包括自己。
1.5 isNaN() 的特點:
- isNaN() 用于判斷一個數據是否是 NaN,是 NaN 返回
true,否則返回false。 - isNaN 也可以判斷 number 類型以外的數據,如果該數據能夠轉為
NaN,返回結果也是true
2 運算符
2.1 運算符和表達式
① 運算符
- 按需要的操作數個數分類:一目運算符、二目運算符、三目運算符
- 按運算符功能分類:算數運算符、關系運算符、邏輯運算符、位運算符、賦值運算符、其他運算符
② 表達式
- 由運算符與數據組成的式子,稱之為表達式; 表達式有一個計算結果,稱為表達式的值。
- 最簡單的表達式叫“原始表達式”,一個變量、一個直接量。
- 多個簡單的表達式可以組成一個復雜的表達式。
- 有些表達式具有副作用,副作用指的是會改變參與運算的變量; 副作用由運算符決定。
2.2 運算符按功能分類
① 算數運算符
| 運算符 | 含義 | 操作數個數 | 操作數類型要求 | 組成表達式的值的類型 | 有無副作用 |
|---|---|---|---|---|---|
| + | 加號 | 2 | number | number | 無 |
| - | 減號 | 2 | number | number | 無 |
| * | 乘號 | 2 | number | number | 無 |
| / | 除號 | 2 | number | number | 無 |
| % | 取余(模) | 2 | number | number | 無 |
| + | 正號 | 1 | number | number | 無 |
| - | 負號 | 1 | number | number | 無 |
| ++ | 累加(符號不變) | 1 | number(變量形式) | number | 有 |
| -- | 累減(符號取反) | 1 | number(變量形式) | number | 有 |
注:
根據數據類型自動轉換的原理,可利用
+正號來進行數據類型轉換,把其他數據類型轉為 number,作用類似Number()函數。在實踐中,可用于轉換用戶輸入的字符串數據。-
++和--在操作數前或后,對操作數的累加或累減效果是一樣的,不同的是表達式的值:n++/n--:表達式的值為n累加或累減前的值;++n/--n:表達式的值為n累加或累減后的值;
② 關系運算符
| 運算符 | 含義 | 操作數個數 | 操作數類型要求 | 組成表達式的值的類型 | 有無副作用 |
|---|---|---|---|---|---|
| > | 大于 | 2 | number、string | boolean | 無 |
| >= | 大于等于 | 2 | number、string | boolean | 無 |
| < | 小于 | 2 | number、string | boolean | 無 |
| <= | 小于等于 | 2 | number、string | boolean | 無 |
| == | 等于 | 2 | number、string | boolean | 無 |
| != | 不等于 | 2 | number、string | boolean | 無 |
| === | 全等 | 2 | 沒要求 | boolean | 無 |
| !== | 不全等 | 2 | 沒要求 | boolean | 無 |
注:
-
比較大小的規(guī)則如下:
- 如果兩個操作數類型不一致,轉為 number 之后才進行比較。
- NaN 與任何數據進行任何比較得到都是 false。
- 如果兩個操作數都是字符串,會按照字符串的比較規(guī)則進行比較:取每個字符的unicode 編碼按位比較大小。
-
判斷相等(==) 和不相等(!==)的規(guī)則:
如果兩個操作數類型不一致,轉為 number 之后才進行比較。
NaN 與任何數據都不相等,包括自己。
如果兩個操作數都是字符串,會使用字符串的比較規(guī)則進行比較:兩個字符串完全一致就相等。
-
null 與其他類型的數據進行判斷相等操作,具有自己的特殊規(guī)則:
null == ''; //空字符串,false null == false; //false null == 0; //false null == undefined; //true
-
判斷全等(===)和不全等(!==)的規(guī)則:
- 如果兩個操作數類型不一致,全等不成立,類型一致且值相同才成立。
- 與相等相比,不會發(fā)生數據類型的自動轉換。
③ 邏輯運算符
| 運算符 | 含義 | 操作數個數 | 操作數類型要求 | 組成表達式的值的類型 | 有無副作用 |
|---|---|---|---|---|---|
| && | 邏輯與 | 2 | 沒要求 | 取其中一個操作數的值 | 無 |
| || | 邏輯或 | 2 | 沒要求 | 取其中一個操作數的值 | 無 |
| ! | 邏輯非 | 2 | boolean(不是則自動轉換) | boolean | 無 |
注:
-
&& 組成的表達式的取值規(guī)則如下:
若第一個操作數成立,則取第二個操作數的值;
若第一個操作數不成立,則取第一個操作數的值,第二個操作數不再繼續(xù)運算。
-
|| 組成的表達式的取值規(guī)則如下:
若第一個操作數成立,則取第一個操作數的值,第二個操作數不再繼續(xù)運算。
若第一個操作數不成立,則取第二個操作數的值。
④ 賦值運算符
| 運算符 | 含義 | 操作數個數 | 操作數類型要求 | 組成表達式的值的類型 | 有無副作用 |
|---|---|---|---|---|---|
| == | 賦值 | 2 | 無 | 變量賦值之后的值作為表達式的值,因此類型同賦值后的變量 | 有 |
| += | 求和賦值 | 2 | number | number | 有 |
| -= | 求差賦值 | 2 | number | number | 有 |
| *= | 求積賦值 | 2 | number | number | 有 |
| /= | 求商賦值 | 2 | number | number | 有 |
| %= | 求余賦值 | 2 | number | number | 有 |
| += | 字符串連接賦值 | 2 | string | string | 有 |
注意:操作數必須是變量的形式。
⑤ 位運算符
| 運算符 | 含義 | 操作數個數 | 組成表達式的值的類型 | 有無副作用 |
|---|---|---|---|---|
| & | 按位與 | 2 | integer | 無 |
| | | 按位或 | 2 | integer | 無 |
| ^ | 按位異或 | 2 | integer | 無 |
⑥ 其他運算符
| 運算符 | 含義 | 操作數個數 | 操作數類型要求 | 組成表達式的值的類型 | 有無副作用 |
|---|---|---|---|---|---|
| + | 字符串連接符 | 2 | string | string | 無 |
| typeof | 數據類型判斷 | 1 | 無 | string | 無 |
| , | 逗號運算符 | 2 | 無 | 無 | |
| ?: | 比較運算符(JS中唯一一個三目運算符 | 3 | 無 | 第一個操作數成立,則為第二個操作數值的類型,否則為第三個操作數值的類型 | 無 |
+號的總結:
- 如果只有一個操作數,則
+號為正號;- 如果有兩個操作數,至少有一個為字符串,則
+號為字符串連接符;- 如果有兩個操作數,且都不是字符串,+`號為相加;
2.3 運算符優(yōu)先級
- 一元運算符:++、--、+、-、!、typeof等等
- 算數運算符:*、/、% 大于 +、-
- 關系運算符
- 邏輯運算符
- 三元運算符:?:
- 賦值運算符
- 逗號運算符