文章配套視頻
進制表示
- 在JS中可以表示不同進制的數(shù)字(得看瀏覽器支持):
- 16進制的數(shù)字,則需要以0x開頭
num = 0x18; num = 0xcf; num = 0xAacf;
- 8進制的數(shù)字推掸,則需要以0開頭
num = 016;
- 2進制的數(shù)字桶蝎,則需要以0b開頭
num = 0b1010;
- 16進制的數(shù)字,則需要以0x開頭
- 注意:
- "010"這種字符串,有些瀏覽器會當成8進制解析谅畅,有些會當成10進制解析
- 可以在parseInt()或parseFloat中傳遞一個第二個參數(shù)登渣,來指定數(shù)字的進制
str = "070"; // str= parseInt(str,10); str = Number(str); console.log(typeof str); console.log(str);
運算符
-
基本定義
- 運算符也叫操作符, 通過運算符可以對一個或多個值進行運算,并獲取運算結(jié)果, 比如:typeof就是運算符,可以來獲得一個值的類型, 它會將該值的類型以字符串的形式返回: number string boolean undefined object
-
作用
- 運算符是告訴程序執(zhí)行特定算術或邏輯操作的符號, 例如告訴程序, 某兩個數(shù)相加, 相減等
-
分類
- 按照功能劃分: 算術運算符, 位運算符, 關系運算符, 邏輯運算符
- 按照操作數(shù)個數(shù)劃分:
單目運算(只有一個操作數(shù) 如 : i++ !),
雙目運算(有兩個操作數(shù) 如 : a+b;),
三目運算(三目運算也稱為問號表達式 a>b ? 1 : 0;)
-
運算符的結(jié)合性
JavaScript中各種運算符的結(jié)合性分為兩種: 左結(jié)合性(自左至右) 和 右結(jié)合性(自右至左)
自左至右,即先左后右
例如表達式: x - y + z;
則y 應先與“-”號結(jié)合,執(zhí)行 x-y 運算,然后再執(zhí)行+z 的運算毡泻。
這種自左至右的結(jié)合 方向就稱為“左結(jié)合性”胜茧。自右至左,即先右后左
例如:如x = y = z = 10
由于“=”的 右結(jié)合性,應先執(zhí)行z = 10; 再執(zhí)行y = z 再執(zhí)行x = y運算。
算術運算符
-
加法運算
加法運算 -
減法運算
減法運算 -
乘法運算
乘法運算 -
除法運算
除法運算 -
取余運算
取余運算
一元運算符
只需要一個操作數(shù)
-
+ 正號不會對數(shù)字產(chǎn)生任何影響
var num = 123; num = +num; console.log(num); // 123
對于非Number類型的值,會將先轉(zhuǎn)換為Number仇味,然后再運算
var bool = true; var res = +bool; console.log(res); // 1 var str = "123"; res = +str; console.log(res); // 123 var str2 = "123abc"; res = +str2; console.log(res); // NaN, 所以內(nèi)部不是調(diào)用parseInt, 而是Number()函數(shù) var temp = null; res = +temp; console.log(res); // 0
- 負號可以對數(shù)字進行負號的取反
var num = 456;
num = -num;
console.log(num); // -456
var result = 1 + -"2" + 3;
console.log("result = "+result);
賦值運算符
- 簡單賦值運算符 =
- 格式: 變量 = 數(shù)據(jù)
// 將等號右邊的常量100賦值給左邊的變量num var num = 100; // 將等號右邊的變量num中存儲的值賦值給左邊的變量value var value = num;
- 賦值運算符左邊只能是變量
110 = 220; // 錯誤寫法 var str = 110; 220 = str; // 錯誤寫法
- 多個賦值運算符可以組成 賦值表達式, 賦值表達式具備右結(jié)合性
// 從右至左計算 // 先將10賦值給變量c, 然后將變量c中存儲的值賦值給變量b // 然后將變量b中存儲的值賦值給變量a, 最后a,b,c存儲的都是10 a = b = c = 10;
- 復合賦值運算符
+= 加后賦值 變量+=表達式 如:a+=1;即a=a+1
-= 減后賦值 變量-=表達式 如:a-=1;即a=a-1
*= 乘后賦值 變量=表達式 如:a=1;即a=a*1
/= 除后賦值 變量/=表達式 如:a/=1;即a=a/1
%= 取模后賦值 變量%=表達式 如:a%=1;即a=a%1
- 復合賦值表達式運算
- 格式: 變量 復合賦值運算符 表達式; 如: a *= 1 + 2;
- 由于賦值運算符是右結(jié)合性, 所以會先計算等號右邊, 然后再進行復合運算
var value = 5; value *= 2 - 2; // 等價于 value = 5 * (2 - 2); console.log(value); // 0
自增/自減運算符
-
自增呻顽、自減運算符介紹
- 在程序設計中,經(jīng)常遇到“i=i+1”和“i=i-1”這兩種極為常用的操作。
- JavaScript語言為這種操作提供了兩個更為簡潔的運算符,即++和--,分別叫做自增運算符和自減運算符丹墨。
-
自增芬位、自減運算符求值過程
- 無論運算符號在前還是在后, 變量在自身基礎上都會改變
var num = 1; num++; // 等價于 num = num + 1; console.log(num); // 2 num = 1; ++num; console.log(num); // 2 num = 1; num--; // 等價于 num = num - 1; console.log(num); // 0 num = 1; --num; console.log(num); // 0
- 后綴表達式:x++, x--; 先用x的當前值作為表達式的值,再進行自增自減1運算。即“先用 后變”,也就是先用變量的值參與運算,變量的值再進行自增自減變化带到。
var a, b; a = 20; b = 30; // ++ 在后, 變量先參與其它運算, 然后再自增 var res = (a++) + (b++); console.log(res); // 50 a = 10; b = 20; // -- 在后, 變量先參與其它運算, 然后再自減 res = (a--) + (b--); console.log(res); // 30 console.log(a); // 9 console.log(b); // 19
- 前綴表達式:++x, --x; 其中x表示變量名,先完成變量的自增自減1運算,再用x的值作為表 達式的值;即“先變后用”,也就是變量的值先變,再用變量的值參與運算昧碉。
var a, b; a = 10; b = 20; // ++ 在前, 變量先自增, 然后再參與其它運算 res = (++a) + (++b); console.log(res); // 32 console.log(a); // 11 console.log(b); // 21 a = 10; b = 20; // ++ 在前, 變量先自增, 然后再參與其它運算 res = (--a) + (--b); console.log(res); // 28 console.log(a); // 9 console.log(b); // 19
邏輯運算符
-
使用目的
- 有時候英染,我們需要在多個條件同時成立的時候才能執(zhí)行某段代碼
- 比如:用戶只有同時輸入了QQ和密碼,才能執(zhí)行登錄代碼被饿,如果只輸入了QQ或者只輸入了密碼四康,就不能執(zhí)行登錄代碼。這種情況下狭握,我們就要借助于JavaScript提供的邏輯運算符闪金。
-
&&(與運算)
- 格式: 條件A && 條件B
- 運算結(jié)果
只有當條件A和條件B都成立時,結(jié)果才為true论颅;其余情況的結(jié)果都為false哎垦。因此,條件A或條件B只要有一個不成立恃疯,結(jié)果都為false
口訣:一假則假 - 邏輯與運算過程
- 總是先判斷條件A是否成立;
- 如果條件A成立漏设,接著再判斷條件B是否成立:如果條件B成立,“條件A && 條件B”的結(jié)果就為true今妄,如果條件B不成立郑口,結(jié)果就為false;
- 如果條件A不成立,就不會再去判斷條件B是否成立:因為條件A已經(jīng)不成立了盾鳞,不管條件B如何結(jié)果肯定是false;
- 如果兩個值都是true則返回true;
var result = true && true; //只要有一個false犬性,就返回false result = true && false; result = false && true; result = false && false;
- 短路測試
//第一個值為true,會檢查第二個值 true && alert("我來了L诮觥乒裆!"); //第一個值為false,不會檢查第二個值 false && alert("我沒有來M评缸兔!");
- 注意點
對于非Boolean類型的數(shù)值, 邏輯與會自動將其轉(zhuǎn)換為Boolean類型來判斷
如果條件A不成立, 則返回條件A的數(shù)值本身
如果條件A成立, 不管條件B成不成立都返回條件B數(shù)值本身
var result = "123" && "abc"; console.log(result); // "abc" result = "123" && 0; console.log(result); // 0 result = null && 0; console.log(result); // null
-
||(或運算)
或運算- 注意點
對于非Boolean類型的數(shù)值, 邏輯或自動會將其轉(zhuǎn)換為Boolean類型來判斷
如果條件A不成立, 則不管條件B成不成立都返回條件B數(shù)值本身
如果條件A成立, 則返回條件A的數(shù)值本身
var result = null || 0; console.log(result); // 0 result = "123" || "abc"; console.log(result); // "123" result = "123" || 0; console.log(result); // "123"
- 注意點
-
!(非運算)
非運算
關系運算符
-
關系運算符存在的意義
- 默認情況下,我們在程序中寫的每一句正確代碼都會被執(zhí)行吹艇。但很多時候惰蜜,我們想在某個條件成立的情況下才執(zhí)行某一段代碼
- 這種情況的話可以使用條件語句來完成,但是學習條件語句之前受神,我們先來看一些更基礎的知識:如何判斷一個條件成不成立抛猖。
-
JavaScript中的真假性
- 在JavaScript中,條件成立稱為“真”鼻听,條件不成立稱為“假”财著,因此,判斷條件是否成立就是判斷條件的“真假”撑碴。
- 在JavaScript已經(jīng)給我們定義好了一個Boolean類型的值, 取值是true和false, true代表真, false代表假
- 而接下來我們要學習的關系運算符它的返回值正好就是Boolean類型的值, 也就是說關系運算符的返回值要么是true,要么是false
-
圖示
關系運算符 示例
var a, b;
a = 20;
b = 20;
console.log(a > b); // false
console.log(a < b); // false
console.log(a >= b); // true
console.log(a <= b); // true
console.log(a == b); // true
console.log(a != b); // false
- 對于非數(shù)值進行比較時撑教,會將其轉(zhuǎn)換為數(shù)值然后在比較
console.log(1 > true);
console.log(1 >= false);
console.log(1 > "0");
console.log(1 > null);
console.log(1 > true); //false
console.log(1 >= false); //true
console.log(1 > "0"); //true
console.log(1 > null); //true
- 如果符號兩側(cè)的值都是字符串時,不會將其轉(zhuǎn)換為數(shù)字進行比較, 而會分別比較字符串中字符的Unicode編碼
- 比較字符編碼時是一位一位進行比較
- 如果兩位一樣醉拓,則比較下一位伟姐,所以借用它來對英文進行排序
- 比較中文時沒有意義
- 測試
console.log("a" < "b"); console.log("abc" < "abd"); console.log("你" > "我");
- null收苏、undefined 、NaN比較
console.log(null == 0); // false
console.log(undefined == 0); // false
// 永遠不要判斷兩個NaN是否相等
console.log(NaN == NaN); // false
/*
* 可以通過isNaN()函數(shù)來判斷一個值是否是NaN
* 如果該值是NaN則返回true愤兵,否則返回false
*/
var num = NaN;
console.log(isNaN(num)); // true
// undefined 衍生自 null, 所以返回true
console.log(null == undefined); // true;
console.log(null === undefined); // false;
// == 判斷值是否相等
// == 會進行數(shù)據(jù)類型轉(zhuǎn)換
console.log("123" == 123); // true
// === 判斷值和類型時候同時相等
// === 不會進行數(shù)據(jù)類型轉(zhuǎn)換
console.log("123" === 123); // false
- 注意
- 比較兩個字符串型的數(shù)字鹿霸,可能會得到不可預期的結(jié)果
- 所以, 在比較兩個字符串型的數(shù)字時,一定要轉(zhuǎn)型
- console.log("1111123" < "124");
逗號運算符
-
在JavaScript中逗號“,”也是一種運算符,稱為逗號運算符秆乳。 其功能是把多個表達式連接起來組成一個表達式, 稱為逗號表達式懦鼠。
- 一般形式形式: 表達式1,表達式2屹堰,… …肛冶,表達式n;
- 例如: a = 1 + 1,b = 3 * 4, c = 10 / 2;
-
求值過程
- 表達式1,表達式2扯键,… …睦袖,表達式n;
- 逗號表達式的運算過程是:先算表達式1,再算表達式2忧陪,依次算到表達式n
- 整個逗號表達式的值是最后一個表達式的值
- 案例
var a, b, c, d; /* 1.先計算表達式1, a = 2 2.再計算表達式2, b = 12 3.再計算表達式3, c = 5 4.將表達式3的結(jié)果返回給d */ d = (a = 1 + 1,b = 3 * 4, c = 10 / 2); console.log(d); // 5
-
使用注意
- 程序中使用逗號表達式, 通常是要分別求逗號表達式內(nèi)各表達式的值,并不一定要求整個逗號表達式的值。
- 并不是在所有出現(xiàn)逗號的地方都組成逗號表達式,例如在變量說明中,函數(shù)參數(shù)表中逗號只是用作各變量之間的間隔符近范。
var a, b, c; //這里的逗號只是分隔符 function sendMessage(num, content) { //這里的逗號只是分隔符 console.log(num, content); } ```
三目運算符(條件運算符)
- 格式: 條件表達式 ? 語句1 : 語句2;
- 求值規(guī)則
如果條件表達式為true嘶摊,則執(zhí)行語句1,并返回執(zhí)行結(jié)果 如果條件表達式為false评矩,則執(zhí)行語句2叶堆,并返回執(zhí)行結(jié)果 // 彈第一個 true?alert("語句1") : alert("語句2"); // 彈第二個 false?alert("語句1") : alert("語句2");
- 注意點
- 條件運算符?和:是一對運算符,不能分開單獨使用
- 如果條件的表達式的求值結(jié)果是一個非布爾值, 會將其轉(zhuǎn)換為布爾值然后在運算
// 彈第二個 null?alert("語句1") : alert("語句2"); // 彈第一個 "abc"?alert("語句1") : alert("語句2");
運算符的優(yōu)先級
- 優(yōu)先級
- JavaScript中,運算符的運算優(yōu)先級共分為15 級。1 級最高,15 級最低斥杜。
- 在表達式中,優(yōu)先級較高的先于優(yōu)先級較低的進行運算虱颗。
先計算優(yōu)先級高的
優(yōu)先級相同則左結(jié)合計算
可以使用()來改變優(yōu)先級
-
圖示
運算符的優(yōu)先級
練習
- 用戶從鍵盤輸入3個整數(shù), 找到最大值并輸出?
// 1.定義3個變量, 接收用戶輸入的值
var num1, num2, num3, max;
// 2.利用prompt()接收用戶輸入的值
num1 = Number(prompt('請輸入第一個數(shù):'));
num2 = +(prompt('請輸入第二個數(shù):'));
num3 = +(prompt('請輸入第三個數(shù):'));
// 3. 定義變量保存最大值
// var max;
// 4. 利用三目運算符進行兩兩比較
/*max = num1 > num2 ? num1 : num2;
max = max > num3 ? max : num3;*/
// 不推薦
max = (num1 > num2 ? num1 : num2) > num3 ? (num1 > num2 ? num1 : num2) : num3;
// 5. 輸出結(jié)果
alert(max);
學習建議
- 多敲代碼, 可結(jié)合視頻一起觀看, 不清楚的加我微信yejh9522溝通交流就好!