Javascript高階之操作符
阿新 • • 發佈:2020-12-18
操作符
一元操作符
- 概念
- 只操作一個值的操作符叫一元操作符
- 一元運算會直接修改原始變數的資料
遞增/遞減操作符
-
字首操作運算
字首++
先加1,後參與運算字首--
先減1,後參與運算- 無論使用字首遞增還是字首遞減操作符,變數的值都會在語句被求值之前改變
- 在電腦科學中,這通常被稱為具有副作用
-
字尾操作運算
字尾++
先參與運算,後加1字尾--
先參與運算,後減1
一元加和減
- 一元加
- 對數值沒有任何影響
- 一元加應用到非數值,則會執行與使用Number()轉型函式一樣的型別轉換
let s1= '01', s2= '1.1', s3= 'z', b= false, f= 1.1, o= { valueOf(){ return -1; } }; console.log(+s1); console.log(+s2); console.log(+s3); console.log(+b); console.log(+f); console.log(+o);
- 一元減
- 用於把數值變為負值
- 一元減應用到非數值,會遵循一元加的規則,再取負值
let s1= '01',
s2= '1.1',
s3= 'z',
b= false,
f= 1.1,
o= {
valueOf(){
return -1;
}
};
console.log(-s1);
console.log(-s2);
console.log(-s3);
console.log(-b);
console.log(-f);
console.log(-o);
布林操作符
-
邏輯非
- 邏輯非操作首先將運算元轉換為布林值,再對其取反
- 邏輯非操作符可以用於把任何值轉換為布林值
-
邏輯與
- 邏輯與操作符可用於任何型別的運算元,不限於布林值
- 如果運算元不是布林值,則邏輯與並不一定會返回布林值
- 如果第一個運算元是物件,則返回第二個運算元
- 如果第二個運算元是物件,則只有第一個運算元求值為true才會返回該物件
- 如果兩個運算元都是物件,則返回第二個運算元
- 如果有一個運算元是null,則返回null
- 如果有一個運算元是NaN,則返回NaN
- 如果有一個運算元是undefined,則返回undefined
let res= {'name':'Sunny'} && 'Jerry'; console.log(res); // Jerry let res= 'Jerry' && {'name':'Sunny'}; console.log(res); // { name: 'Sunny' } let res= {'name':'Jerry'} && {'name':'Sunny'}; console.log(res); // { name: 'Sunny' } let res= {'name':'Jerry'} && null; console.log(res); // null let res= {'name':'Jerry'} && NaN; console.log(res); // NaN let res= {'name':'Jerry'} && undefined; console.log(res); // undefined
- 邏輯或
- 如果運算元不是布林值,則邏輯或並不一定會返回布林值
- 如果第一個運算元是物件,則返回第一個運算元
- 如果第一個運算元求值為false,則返回第二個運算元
- 如果兩個運算元都是物件,則返回第一個運算元
- 如果兩個運算元都是null,則返回null
- 如果兩個運算元都是NaN,則返回NaN
- 如果兩個運算元都是undefined,則返回undefined
- 如果運算元不是布林值,則邏輯或並不一定會返回布林值
let res= {'name':'Sunny'} || 'Jerry';
console.log(res); // { name: 'Sunny' }
let res= '' || {'name':'Sunny'};
console.log(res); // { name: 'Sunny' }
let res= {'name':'Jerry'} || {'name':'Sunny'};
console.log(res); // { name: 'Jerry' }
let res= null || null;
console.log(res); // null
let res= NaN || NaN;
console.log(res); // NaN
let res= undefined || undefined;
console.log(res); // undefined
短路現象
-
邏輯與
- 如果第一個運算元決定了結果,那麼不會對第二個運算元求值
- 第一個運算元為false,第二個運算元不作為
-
邏輯或
- 如果第一個運算元決定了結果,那麼不會對第二個運算元求值
- 第一個運算元為true,第二個運算元不作為
-
邏輯或的短路應用
let obj= preObj || bacObj
- 如果首選物件不為空,則返回首選物件,被選物件不作為
乘性操作符
- 分類
- 乘法操作符
- 除法操作符
- 取模操作符
指數操作符
- 指數操作符的表現形式
Math.pow()
**
const num= 4;
console.log(num**2); // 16
console.log(Math.pow(num, 2)); // 16
console.log(num**0.5); // 2
console.log(Math.pow(num, 0.5)); // 2
加性操作符
- 分類
- 加法操作符
- 減法操作符
關係操作符
相等操作符
- 分類
- 等於和不等於:只進行值得比較
- 全等和不全等:型別和值同時相等,則相等
條件操作符
let max= (num1>num2)?num1:num2;
賦值操作符
逗號操作符
- 概念
- 逗號操作符可以用來在一條語句中執行多個操作
- 在賦值時使用逗號操作符分隔值,最終會返回表示式中最後一個值
let num= (1, 2, 3, 4, 5);
console.log(num); // 5
操作符優先順序
- 優先順序從高到底
- 括號 ()
- 一元運算子 ++ -- !
- 乘性運算子 * / %
- 加性運算子 + -
- 關係運算符 > >= < <=
- 相等運算子 == != === !==
- 邏輯運算子 先&& 後||
- 賦值運算子