[[toc]]
一、表達式和運算符
1. 表達式
- 表達式種類
- 算術、關系、邏輯、賦值、綜合
二、JS
基本表達式
1. 算術運算符
意義 | 運算符 |
---|---|
加 | + |
減 | - |
乘 | * |
除 | / |
取余 | % |
-
加減乘除
- 加減的符號和數學一致,乘號是
*
號,除法是/
號 - 默認情況,乘除法的優先級高于加法和減法;必要時可以使用圓括號來改變運算的順序。
- 加減的符號和數學一致,乘號是
-
加號的兩種作用
- 加號有"加法"和"連字符"兩種作用
- 如果加號兩邊的操作數都是數字,則為"加法",否則為連字符。
-
取余運算
- 取余運算也叫作“求模運算”,用百分號
%
表示 a%b
表示求a
除以b
的余數,它不關心整數部分,只關心余數11 % 4; //3, 因為11除以4余數是320 % 6; //2, 因為20除以6余數是212 % 3; //O, 因為能夠整除,余數是03 % 9; //3, 因為商0,余數是3
- 取余運算也叫作“求模運算”,用百分號
-
隱式類型轉換
- 如果
參與數學運算
的某操作數不是數字型
,那么JavaScript
會自動將此操作數轉換為數字型
3 * '4' // 12
- 隱式轉換的本質是內部調用
Number()
函數Number(true)// ---> 1 true + true // 2 Number(false)//---> 0 false + 2 // 2 3 * '2天' // NaN
- 如果
-
有關IEEE754
- 在
JavaScript
中,有些小數的數學運算不是很精準0.1 + 0.2 // 0.30000000000000004
JavaScript
使用了IEEE754
二進制浮點數算術標準,這會使一些個別的小數運算產生丟失精度
問題- 解決辦法:在進行小數運算時,要調用數字的
toFixed()
方法保留指定的小數位數
- 解決辦法:在進行小數運算時,要調用數字的
- 在
-
冪和開根號
JavaScript
中沒有提供冪計算、開根號的運算符。需要使用Math
對象的相關方法進行計算。Math.pow(2,3) // 8 Math.pow(3,2) // 9Math.sqrt(81) // 9Math.sqrt(-81) // NaN
-
向上取整和向下取整
Math.ceil()
向上取整;Math.floor()
向下取整Math.ceil(2.4) // 3Math.floor(2.4) // 2 Math.ceil(-2.4) // -2Math.floor(-2.4) // -3 Math.ceil(2) // 2Math.floor(2) // 2
2. 關系運算符
意義 | 運算符 |
---|---|
大于 | > |
小于 | < |
大于或等于 | >= |
小于或等于 | <= |
等于 | = |
不等于 | != |
全等于 | === |
不全等于 | !== |
-
大于和小于
- 大于
>
、小于<
兩個符號和數學相同
- 大于
-
"大于等于"運算符是
>=
,"小于等于"運算符是<=
-
判斷是否相等
- 如果想比較兩個值是否相等,此時應該使用
==
運算符 JavaScript
中等號=
表示賦值,而并不是相等,判斷相等應該使用==
運算符。- 相等和全等
- 兩個等號
==
運算符不比較值的類型
,它會進行隱式轉換后比較值是否相等 - 三個等號
===
運算符,不僅比較值是否相同,也比較類型是否相同
。1 == true // true1 === true // false0 == false // true0 === false // false0 == undefined // false0 === undefined // falseundefined == null // trueundefined === null // false
null
和undefined
用==
進行比較涉及隱式強制類型轉換,ES5
規范中規定:- 如果
x
為null
,y
為undefined
,則結果為true
- 如果
x
為undefined
,y
為null
,則結果為true
- 如果
null
和undefined
用===
比較時結果為false是因為類型不同:typeof null --> object
typeof undefined --> undefined
NaN
不自等NaN
作為一個特殊的數字類型值,它在用==
比較的時候也有特殊的結果NaN == NaN // falseNaN === NaN // false
- 如何判斷某變量值為
NaN
isNaN()
函數可以用來判斷變量值是否為NaN
isNaN(NaN) // trueisNaN(5) // false
- 但
isNaN()
也不好用,它的機理是:只要該變量傳入Number()
的執行結果是NaN
,則isNaN()
函數都會得到true
isNaN(undefined) // trueisNaN('3天') // trueisNaN(null) // false
- 不相等和不全等
!=
表示不相等!==
表示不全等
5 != 6 // true5 !== 6 // true5 != '5' // false5 !== '5' // true
js
中沒有連比,絕對不可能存在3 <= a <= 15
- 兩個等號
- 如果想比較兩個值是否相等,此時應該使用
3. 邏輯運算符
非:
!
與:&&
或:||
- !表示"非",也可以稱為"置反運算"
- !是一個"單目運算符",只需要一個操作數
- 置反運算的結果一定是布爾值
!true // false!false // true !0 // true !undefined // true!'' // true!'zhangsan' // false!!true // true!!0 // false!!'' // false!!'zhangsan' // true
4. 與運算符
&&
表示"并且",稱為"與運算",全真才為真
- 短路原則
a && b
運算中:a
真,表達式值為b
,a
假,表達式值為a
3 && 6 // 6undefined && 15 // undefined15 && undefined // undefinednull && 2 // null'' && 16 // ''NaN && undefined // NaN
5. 或運算符
||
表示"或者",稱為"或運算",有真就真
a || b
運算中:a
真,表達式值為a
,a
假,表達式值為b
3 || 6 // 30 || 6 // 6null || undefined // undefined'a' || 'b' // 'a'NaN || null // null
- 邏輯值運算
true && true // truetrue && false // falsefalse && true // falsefalse && false // false true || true // truetrue || false // truefalse || true // truefalse || false // false
- 邏輯運算順序
- 邏輯運算的優先級是:
非--> 與--> 或
!true || true // ture3 && 4 || 5 && 6 // 4
- 邏輯運算的優先級是:
6. 賦值表達式
意義 | 運算符 |
---|---|
賦值 | = |
`````` | += |
-= | |
快捷賦值 | *= |
/= | |
`````` | %= |
自增運算 | ++ |
自減運算 | – |
JS
中,=
表示賦值,==
判斷是否相等(不判斷類型),===
判斷是否全等。- 賦值運算符會將等號右邊的數值,賦予等號左邊的變量。
- 賦值運算也會產生值
- 快捷賦值
7. 自增/自減運算法
8. 綜合表達式
- 運算順序
- 變量的范圍表示
9. 重點內容
- 表達式有哪幾種? 每種表達式分別有哪些運算符?
- 每種表達式中運算順序是什么?綜合運算順序是什么?
- 什么是短路計算? 3 && 11 的結果是多少? 3 || 13 呢?
- a ++ 和 ++ a 有什么區別?
var a = 3;var b = 4;console.log(a++ + b++ + ++a + ++b); // 18