一、運(yùn)算符
(1)算術(shù)運(yùn)算符:
+:求和
-:求差
*:求積
/:求商
%:取模(取余數(shù))
1、優(yōu)先級(jí)
JavaScript中 優(yōu)先級(jí)越高越先被執(zhí)行,優(yōu)先級(jí)相同時(shí)以書(shū)從左向右執(zhí)行。
a、乘、除、取余優(yōu)先級(jí)相同
b、加、減優(yōu)先級(jí)相同
c、乘、除、取余優(yōu)先級(jí)大于加、減
d、使用 () 可以提升優(yōu)先級(jí)
總結(jié): 先乘除取余,后加減,有小括號(hào)先算小括號(hào)里面的
(2)賦值運(yùn)算符:
= 將等號(hào)右邊的值賦予給左邊, 要求左邊必須是一個(gè)變量
+= 、 -= 、 *= 、 /= 、 %=
其他賦值運(yùn)算符:
debugger//可以通過(guò)這個(gè)來(lái)一行一行運(yùn)行查看值的變化
//num = num+1 ( += )
num += 1;//num == 2
console.log(num);
// num = num-1 (-=)
num -= 1;//num == 1
console.log(num);
// num = num*2 (*=)
num *= 2;//num == 2
console.log(num);
//num = num/2 (/=)
num /= 2;//num == 1
console.log(num);
// num = num%2 (%=)
num %= 2;//num == 1
console.log(num);
(3)一元運(yùn)算符
眾多的 JavaScript 的運(yùn)算符可以根據(jù)所需表達(dá)式的個(gè)數(shù),分為一元運(yùn)算符、二元運(yùn)算符、三元運(yùn)算符
// 前置自增 后置自增
let num = 1;
// 前置自增:先自增,再返回自增結(jié)果;然后再繼續(xù)計(jì)算 + 2
console.log(++num + 2);//4
// 后置自增:先返回變量的值:然后再自增: 然后,再根據(jù)返回的值繼續(xù)計(jì)算
// 重置一下
num = 1;
console.log(num1++ + 2);//3
前置自增:先自加再使用(記憶口訣:++在前 先加)++i
先自增,再返回自增結(jié)果
后置自增:先使用再自加(記憶口訣:++在后 后加)i++
自減同理
(4)擴(kuò)展一下
面試題:
let i = 1;
console.log(i++ + ++i + i);//從左至右,i++經(jīng)過(guò)之后i=2,經(jīng)過(guò)++i后i=3,所以1+3+3=7
(5)比較運(yùn)算符
1、比較結(jié)果為boolean類(lèi)型,即只會(huì)得到true或false
: 左邊是否大于右邊
<: 左邊是否小于右邊
=: 左邊是否大于或等于右邊
<=: 左邊是否小于或等于右邊
==: 左右兩邊是否相等,將兩邊的數(shù)據(jù)進(jìn)行轉(zhuǎn)換為數(shù)值
===: 左右兩邊是否類(lèi)型和值都相等
!==: 左右兩邊是否不全等
!=:左右兩邊不等
2、=與==與===的區(qū)別
賦值: =賦值
等于:==不比較類(lèi)型,只比較數(shù)值
全等:===要求全等,類(lèi)型和數(shù)值都要相等
3、比較運(yùn)算符細(xì)節(jié)
1、字符串的比較
(1)從左往右一次比較
(2)如果第一位一樣再比較第二位,以此類(lèi)推
2、NaN不等于任何值,包括自身
3、盡量不要比較小數(shù),因?yàn)樾?shù)有精度問(wèn)題
(1)小數(shù)在內(nèi)存存儲(chǔ)方式,會(huì)導(dǎo)致精度問(wèn)題
(2)前端進(jìn)行計(jì)算的時(shí)候,使用計(jì)算函數(shù)庫(kù)
4、不同類(lèi)型之間比較會(huì)發(fā)生隱式轉(zhuǎn)換
最終把數(shù)據(jù)隱式轉(zhuǎn)換轉(zhuǎn)成number類(lèi)型再比較
所以開(kāi)發(fā)中,如果進(jìn)行準(zhǔn)確的比較我們更喜歡 === 或者 !==
(6)邏輯運(yùn)算符
邏輯運(yùn)算符.png

邏輯運(yùn)算符里的短路

只會(huì)發(fā)生在 && || 里面
// 2、短路表達(dá)式:有返回值
let res = false && 1;
console.log('res', res);//false
res = true && 1;
console.log('res', res);//1 1其實(shí)代表著true,真值
res = 1 || false;
console.log('res', res);//1
邏輯上為假的數(shù)據(jù)類(lèi)型有:false null undefined " " 0 NaN
邏輯上為真的數(shù)據(jù)類(lèi)型有:true "字符串里有值" 數(shù)字非0(包括負(fù)數(shù)) Array Object
非0值都是真的true , 0值為假false
(5)運(yùn)算符優(yōu)先級(jí)
口訣:計(jì)算 比較 判斷 邏輯

一元運(yùn)算符里面的邏輯非優(yōu)先級(jí)最高
邏輯與比邏輯或優(yōu)先級(jí)高
二、語(yǔ)句
(1)表達(dá)式和語(yǔ)句
第一:表達(dá)式
1、會(huì)在原地返回一個(gè)值
2、代碼較短
第二:語(yǔ)句
1、js整句或命令,用來(lái)描述一件事情
2、代碼量比較長(zhǎng)
(2)分支語(yǔ)句
- 順序結(jié)構(gòu): 從上往下執(zhí)行幾句
- 分支結(jié)構(gòu):根據(jù)條件選擇執(zhí)行代碼
- 循環(huán)結(jié)構(gòu):某段代碼被重復(fù)執(zhí)行
1、if分支語(yǔ)句
單分支、雙分支、多分支
單分支使用語(yǔ)法:
if (條件) {
滿(mǎn)足條件后要執(zhí)行的代碼
}
(括號(hào)內(nèi)的結(jié)果如果不是布爾類(lèi)型時(shí),會(huì)發(fā)生隱式轉(zhuǎn)換轉(zhuǎn)為布爾類(lèi)型)
單分支使用語(yǔ)法:
if (條件) {
滿(mǎn)足條件后要執(zhí)行的代碼
}else{
不滿(mǎn)足條件執(zhí)行的代碼
}
多分支使用語(yǔ)法:

2、三元運(yùn)算符(三元表達(dá)式)
語(yǔ)法:
條件 ?滿(mǎn)足條件執(zhí)行的代碼 :不滿(mǎn)足條件時(shí)執(zhí)行的代碼
三元表達(dá)式案例.png
(3)循環(huán)語(yǔ)句
1、斷點(diǎn)調(diào)試
斷點(diǎn):在某句代碼上加的標(biāo)記就叫斷點(diǎn),當(dāng)程序執(zhí)行到這句有標(biāo)記的代碼時(shí)會(huì)暫停下來(lái)a、瀏覽器打開(kāi)調(diào)試界面
第一種方法:瀏覽器打開(kāi)調(diào)試界面步驟:
a、按F12打開(kāi)開(kāi)發(fā)者工具
b、點(diǎn)到sources一欄
c、選擇代碼文件
斷點(diǎn)調(diào)試.png
第二種方法:手動(dòng)添加斷點(diǎn)(debugger)
手動(dòng)斷點(diǎn)調(diào)試.png
2、while循環(huán)
(1)循環(huán)語(yǔ)法:
while(循環(huán)條件){
要重復(fù)執(zhí)行的代碼(循環(huán)體)
}
while大括號(hào)里代碼執(zhí)行完畢后不會(huì)跳出,而是繼續(xù)回到小括號(hào)里判斷條件是否滿(mǎn)足,若滿(mǎn)足又執(zhí)行大括號(hào)里的代碼,然后再回到小括號(hào)判斷條件,直到括號(hào)內(nèi)條件不滿(mǎn)足,即跳出
(2)while循環(huán)注意事項(xiàng):
具備的三要素:
1、變量起始值
2、終止條件(沒(méi)有終止條件,循環(huán)會(huì)一直執(zhí)行,造成死循環(huán))
3、變量變化量(用自增或者自減)
循環(huán)案例.png
總結(jié)
NaN和任何值都不相等,都會(huì)返回false
兩次取反的作用:把數(shù)據(jù)轉(zhuǎn)換為布爾型



