【18】JavaScript(數據類型轉換、運算符)

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的特點:

  1. NaN 與任何數據進行任何運算,結果仍然是 NaN。
  2. NaN 與任何數據都不相等,包括自己。

1.5 isNaN() 的特點:

  1. isNaN() 用于判斷一個數據是否是 NaN,是 NaN 返回 true,否則返回 false
  2. 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ī)則如下:

    1. 如果兩個操作數類型不一致,轉為 number 之后才進行比較。
    2. NaN 與任何數據進行任何比較得到都是 false。
    3. 如果兩個操作數都是字符串,會按照字符串的比較規(guī)則進行比較:取每個字符的unicode 編碼按位比較大小。
  • 判斷相等(==) 和不相等(!==)的規(guī)則:

    1. 如果兩個操作數類型不一致,轉為 number 之后才進行比較。

    2. NaN 與任何數據都不相等,包括自己。

    3. 如果兩個操作數都是字符串,會使用字符串的比較規(guī)則進行比較:兩個字符串完全一致就相等。

    4. null 與其他類型的數據進行判斷相等操作,具有自己的特殊規(guī)則:

      null == '';            //空字符串,false
      null == false;     //false
      null == 0;             //false
      null == undefined; //true
      
  • 判斷全等(===)和不全等(!==)的規(guī)則:

    1. 如果兩個操作數類型不一致,全等不成立,類型一致且值相同才成立。
    2. 與相等相比,不會發(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 第一個操作數成立,則為第二個操作數值的類型,否則為第三個操作數值的類型

+號的總結:

  1. 如果只有一個操作數,則+號為正號;
  2. 如果有兩個操作數,至少有一個為字符串,則+號為字符串連接符;
  3. 如果有兩個操作數,且都不是字符串,+`號為相加;

2.3 運算符優(yōu)先級

  1. 一元運算符:++、--、+、-、!、typeof等等
  2. 算數運算符:*、/、% 大于 +、-
  3. 關系運算符
  4. 邏輯運算符
  5. 三元運算符:?:
  6. 賦值運算符
  7. 逗號運算符
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容