運算符
運算符優先級
1、成員訪問:尋找對象裏的屬性名所對應的屬性值就是成員訪問(19)
Fn.aa
2、new(帶參數列表):就是構造函數執行有括號(19)
3、new(無參數列表):就是構造函數執行沒有括號(18)
優先級一樣,從左到右運算
符號:&&、||、%、+=/-=、i++/i–、 ==/===、!/!!
- && 邏輯且 : && 左右兩邊都成立,這個條件成立
- 如果前邊轉布爾是true,那就取後邊的,反之就取前邊的。
let num = 1&&2;
console.log(num);//2
let num1 = 0&&1;
console.log(num1)//0
if(1=="1"&&2==="2"){
console.log(100)
}
- || : 或 只有左右兩邊一個成立的,整體結果就是true;
- 如果前邊轉布爾是false,就取後面的,反之就是前面的
let num = 1||2;
console.log(num);//1
let num1 = 0||1;//1
let num3 = 0&&1||1&&2;//2
if(1==true||2===3){
console.log(200)
}
-
% 在語句執行中,%代表取模,俗稱取餘數
-
+=/-=
- let num =2;
- num+=3 =>num=num+3
- console.log(num);
-
i++ : 在自身的基礎上+1,正常運算;
- i++ : 先取值,後運算
- ++i : 先運算,後賦值
-
= : 賦值 先算等號右側,再算等號左側
-
== : 會進行比較,返回一個布爾值:會默認進行數據類型之間的轉換
-
!= 不等
-
=== :全等,絕對比較;不進行數據類型轉換,只要數據類型不一樣,返回false
-
!== 絕對不等
-
[]獲取變量只能用中括號
- 中括號法可以用變量作爲屬性名,而點方法不可以;
- 中括號法可以用數字作爲屬性名,而點語法不可以;
-
!/!!
- !:把其他數據類型先轉布爾,然後取反
- !null//true
- !! 把其他數據類型轉布爾,然後取反再取反
- !:把其他數據類型先轉布爾,然後取反
ES2020
可選鏈操作符(Optional Chaining)
- 當檢查嵌套對象內部的屬性時,通常必須檢查中間對象的存在。
- ES2020的可選鏈接運算符讓我們可以新加一個?(可選鏈操作符語法?.),檢查對象深處是否存在值。
- 不用像以前用&&去判斷前一項是否存在或者部分情況用三元去判斷。
const res = {
"result": true,
"message": "success",
"data": {
"id": 726,
"title": "你要努力的去生活,因爲你只有努力了,才知道自己真的不行。",
"hits": 31,
"status": 1,
"user_id": 1 ,
"obj":{
"name":"zhainanya"
}
}
}
let a=res.data?.obj?.name;
//如果返回的對象中有data,就取res.data.obj,沒有返回undefined
//如果data中有obj,就取res.data.obj.name,沒有返回undefined
console.log(a);
空位合併運算符(Nullish coalescing Operator)
- 空位合併運算符是一個非常簡單的名稱,使我們能夠檢查一個值是否爲null或undefined,如果是,則默認爲另一個值,僅此而已。
- 轉布爾爲false是下面五種情況
- null
- undefined
- 空字符串 “”
- 0
- 沒有數字-NaN
const result={
"result":true,
"message":"success",
"data":{
"a":0,
"b":"",
"c":null,
"d":undefined,
"e":NaN,
}
}
let b=result.data.a?result.data.a:"";
console.log(b);//想要0但是結果是""
let c=result.data.a??""
console.log(c);//0
let d=result.data.c??"";
console.log(d);//""
let f=result.data?.c??"";
console.log(f);//""
let e=result.data?.a??"";
console.log(e);//0
//如果result.data存在,就取result.data.a
// 如果result.data.a其值不爲null或undefined,就取自身,反之取??後面的"""