操作符和表達式
1.操作符
定義:
- 操作符是js程序中操作值的符號躏尉。
- 通過操作符可以構建復雜表達式
操作數(shù)
- 操作數(shù)指操作符可以操作值的數(shù)量
一元操作符:可以操作一個值
-100
a++
++a
二元操作符:可以操作兩個值
1+2
a = 100
a === b
let a
三元操作符:可以操作三個值
a ? 100 : -100
操作符的結果
- 所有的操作符在操作值的時候必須返回值
操作符的分類
操作符是否有破壞性
- 破壞性的操作符:指操作符的運算結果會修改之前的值
所有的賦值操作符都是破壞性的
++ -- 一元操作符也是破壞性的 - 非破壞性的操作符
不會對原有的值產(chǎn)生影響
從功能角度分類
第一組:算數(shù)操作符
- 一元操作運算符 :
定義:對一個值進行操作返回操作后的值,特點:它擁有最高優(yōu)先級后众,右結合性的特點胀糜。
-(負號)
+(正號):將操作的值轉換為數(shù)值并返回轉換后的值。它通過調(diào)用Number()內(nèi)置函數(shù)
--
++
- 二元運算操作符:+ - * / % **
第二組:關系操作符
通過操作符比較兩個值的關系:是否相等蒂誉,大于教藻,小于還是等
相等不等操作符:== === != !==
true == false
比較操作符: < > <= >=
1> 2
a => b
in操作符 :檢查對象的屬性
instanceof操作符
第三組:邏輯操作符
通過操作符對兩個值進行邏輯的判斷
邏輯與 &&
邏輯非 !
邏輯或 ||
第四組:賦值操作符
通過操作符為變量賦值
+=
-=
*=
/=
%=
**=
第五組:其他操作符
鏈接操作符:+
檢測數(shù)據(jù)類型的操作符:typeof
刪除操作符:delete
逗號操作符:右锨,
void操作符
操作符的喜好
操作符在操作值的時候是對值有要求的括堤,有些操作符喜歡數(shù)值,有些操作符來者不拒绍移。
操作符的優(yōu)先級
操作符是有優(yōu)先級的
1+ 2 * 3//先乘除后加減
2*3**2//18
- 小括號操作符優(yōu)先級最高
- 一元操作符優(yōu)先級第二
- 逗號操作符優(yōu)先級最低
- 賦值操作符優(yōu)先級倒數(shù)第二低
- 冪操作符的優(yōu)先級高于乘除取余
- 乘除取余高于加減
- 算數(shù)運算符優(yōu)先級高于關系運算符
- 關系運算符優(yōu)先級高于邏輯運算符
操作符的結合性
操作的結合性指:操作符在操作值的時候的計算方向
- 左結合:從左向右執(zhí)行計算
- 右結合:從右向左執(zhí)行計算
//大多數(shù)操作符都具有左結合性
1+2+3
//少量的操作符具有右結合性:冪 悄窃,賦值運算符,三元運算符
2**3**2//512右結合
let c = 2//右結合
a? "hello" : (b ? 1: 0)
2.表達式
定義:表達式是一個可以求值的js短語蹂窖。(表達式是有返回值的)
1.所有的表達式都必須計算出一個值
2.表達式是可以嵌套的
表達式分類
1.字面量表達式:常量表達式 => js中最簡單的表達式
100
"abc"
true
false
undefined
null
2.變量表達式:返回的是之前賦值給變量的值
i //變量表達式
mm //變量表達式
let srt //let 是一個關鍵字轧抗,用于聲明變量
3.數(shù)組定義表達式
[1,2,3]
4.對象定義表達式
{
x = 1,
y = 2
}
5.函數(shù)定義表達式
let fn = function(a,b){
return a ** b
}
6.數(shù)組訪問表達式
arr[0]
arr[arr.length - 1]
7.屬性訪問表達式
let obj = {
name = "張三"
age = "18"
}
student.name
8.函數(shù)調(diào)用表達式
fn()
fn(2,3)
9.賦值表達式
a = 100
a += 100//a = a +100
a -= 10//a = a -100
a /= 100//a = a/ 100
a %= 100//a = a % 100
a *= 100//a = a* 100
a **= 100//a = a** 100
10.算數(shù)表達式
1* 1
1%1
1**1
1-1
1+1
11.關系表達式
1 > 2//比較表達式
2 < 1//比較表達式
unll == undefined//相等表達式
a != b//不等表達式
12.邏輯表達式
100 && "hello"
true || false
!1
13.求值表達式
14.其他表達式
數(shù)據(jù)類型轉換
- 原始類型
數(shù)值
字符串
undefined
unll
symbol - 對象類型
數(shù)據(jù)類型指把任意一種數(shù)據(jù)類型轉換為數(shù)值瞬测,字符串横媚,布爾值類型
顯示數(shù)據(jù)類型轉換
ECMAScript為我們做顯示數(shù)據(jù)轉換有三個函數(shù)
1.顯示轉數(shù)值
- 任何一種數(shù)據(jù)類型都可以轉成數(shù)值
-
方法一:Number()
- 接受任意類型的值
工作原理:
1.內(nèi)置函數(shù)
2.整體轉換
3.接收任意的值
4.可以轉首尾空格和小數(shù)點
5.空都轉成0纠炮,[] unll ""
6.NaN : [1,2,3] undefined {}
語法:
new Nunber(thing)
Number(thing)
定義:
1.Number()作為函數(shù)調(diào)用時,它將傳入的值轉為數(shù)值
2.Number()用于構造函數(shù)
語法規(guī)則:
- Number是整體轉換分唾,對傳入的每一個字符進行檢測抗碰,只要有一個字符無法轉換它就返回NaN
- Number是js的一個內(nèi)置的構造函數(shù)
- 調(diào)用Number方法的時候,它可以把任意類型的值轉換為數(shù)值型
規(guī)則:
1.Number()方法是整體1轉換:對傳入的每一個字符進行轉換
轉換成功:有一個字符無法轉換绽乔,那么它就返回nan
轉換失敾∮:全部字符通過檢測,則返回檢測到的數(shù)值
2.字符串:Nunber()方法可以轉換小數(shù)點
3.字符串:可以轉首尾空格
4.字符串:Number()方法無法轉換字母特殊符號
5.布爾值:true 轉為 1 false 轉為0
6.對象 : 空對象{} 轉為nan
7.null 轉為0
8.undefined 轉為nan
9.空字符串 “” 轉為0
- 數(shù)組 : 空數(shù)組[ ]轉為0
11.數(shù)組:[100]轉為100
12.數(shù)組:[1,2,3]轉為nan
n =true //1
n =undefined//nan
n = {}//nan
n = null // 0
n = false//0
n = !true//0
n = "" //0
n = []//0
n = Number(n)
console.log(n,typeof n)
方法2:parselnt()
定義:parselnt()函數(shù)解析字符串參數(shù)并返回指定基數(shù)(數(shù)學數(shù)字系統(tǒng)中的基數(shù))的整數(shù)
- 該方法的對象是字符串
- 對字符串從左到右逐一檢測折砸,遇到非數(shù)值(包括小數(shù)點)就停止檢測看疗,返回檢測到的數(shù)值,如果沒有則返回NaN
語法:
parselnt(string)
parselnt(string,radix)
- 參數(shù)1 :字符串
- 參數(shù)2:指定基數(shù)
let v = "100"
v = "3.14"http://3
v = "10.5px"http://10
v = "10px"http://10
v = "px"http://對字符串從左到右逐一檢測睦授,遇到非數(shù)值就停止檢測
v = {}//nan
v = true //nan
v = parseInt(v)
console.log(v,typeof v)
工作原理:
先將參數(shù)使用內(nèi)置函數(shù)轉為字符串两芳,然后對字符串從左到右逐一檢測,遇到非數(shù)值就停止檢測去枷,返回檢測的數(shù)值怖辆,沒有檢測到返回nan。
方法3:parseFloat()
定義:parseFloat()函數(shù)解析一個字符串參數(shù)并返回一個浮點數(shù)
- 對字符串從左到右逐一檢測删顶,遇到非數(shù)值(不包括小數(shù)點)就停止檢測
2.顯示轉字符串
- 任何一種數(shù)據(jù)類型都可以轉成字符串
-
方法一:String()
定義:
1.String()作為函數(shù)調(diào)用時竖螃,它將傳入的值轉為字符串
2.String()用于構造函數(shù)
new String(thing)
String(thing)
let a = 100
a = String(a)//a
a = []//""
a = [100]//100
a = true//true
a= -0//0
a=[1,2,3]//1,2,39
a= {} //[object object]
a = {name:"nh"}//[object object]
console.log(a typeof a)
方法二:值.toString()函數(shù)
值.toString()是所有數(shù)據(jù)類型的方法(null和undefined除外)
let a = 100
a = a.toString()
console.log(a typeof a)//100 string
3.顯示轉布爾值
-
Boolean()
- 任何一種數(shù)據(jù)類型都可以轉成布爾值
做數(shù)據(jù)類型轉換,請建立2個概念:傳入的值 返回的值
- 可以傳入任意類型的值
- 返回值我們只關注:字符串逗余、數(shù)值特咆、布爾值
- 數(shù)據(jù)類型轉換指把任意一種數(shù)據(jù)類型轉換成為數(shù)值、字符串或布爾值類型录粱。