概念
網(wǎng)頁:?jiǎn)为?dú)的html
網(wǎng)站:多個(gè)html和后端文件
應(yīng)用程序:可以和用戶交互缴啡,并實(shí)現(xiàn)某種功能
javascript的應(yīng)用場(chǎng)景
名稱 | 定義 |
---|---|
html 結(jié)構(gòu)層 | 從語義角度描述頁面結(jié)構(gòu) |
css 樣式層 | 從美觀角度描述頁面展示(展示) |
javascript 行為層 | 從交互角度描述頁面行為 |
應(yīng)用場(chǎng)景
- 網(wǎng)頁特效
- 服務(wù)端開發(fā) node.js
- 命令行工具 node.js
- 桌面程序 Electron
- app Cordova
- 控制硬件-物聯(lián)網(wǎng) ruff
- 游戲開發(fā) coco2d-js等等
瀏覽器就是js的運(yùn)行客戶端疆偿,js引擎是瀏覽器的一部分
js的組成
ECMAscript含衔、DOM掩完、BOM
dom文檔對(duì)象模型
bom瀏覽器對(duì)象模型 對(duì)瀏覽器進(jìn)行操作的api
JS的書寫位置
行內(nèi)
script標(biāo)簽
script標(biāo)簽引入: <script src=""></script>
js的內(nèi)部函數(shù)
alert():在瀏覽器中彈出警示框
prompt(設(shè)置的提示內(nèi)容召廷,默認(rèn)輸入的信息)
控制臺(tái)作用說明
數(shù)據(jù)類型
字面量表示固定值得常量弹惦,對(duì)變量是反義詞就對(duì)了霎挟,比如:數(shù)字柬焕、字符串审残、undefined、布爾類型的字面值
數(shù)字字面量:
整數(shù)字面量斑举、浮點(diǎn)數(shù)字面量搅轿、特殊值(infinity)
整數(shù)進(jìn)制說明:
- 十進(jìn)制是最基本的數(shù)字字面量格式,直接輸入數(shù)字即可
- 八進(jìn)制字面量需要在前邊加上0富玷、0O璧坟、0o;八進(jìn)制整數(shù)只有0-7
- 十六進(jìn)制前綴0x赎懦、0X雀鹃,包含數(shù)字0-9和a-f/A-F
進(jìn)行算數(shù)計(jì)算式,統(tǒng)一以十進(jìn)制計(jì)算
浮點(diǎn)數(shù)字面量:
- 大于0小于1的小數(shù)可以不寫0励两,例如:“.1”
- 公式栗子:console.log(1.2e4) == 1.2 *10四次方
- 浮點(diǎn)數(shù)精度問題:
- 浮點(diǎn)數(shù)最高精度是17位黎茎,例如:
0.1+0.2 = 0.30000000000000004 - 無窮 infinity表示一個(gè)數(shù)字高于能計(jì)算的最大值
- 最小值,Number.MIN_VALUE当悔,表示5e-324傅瞻,表示
- 最大值,Number.MAX_VALUE盲憎,表示1.7976931348623157e+308
- infinity 無窮大
- -infinity 無窮小
- NaN 表示是一個(gè)不正常的嗅骄,但是屬于number類型不等于任何數(shù),包括打本身
- 浮點(diǎn)數(shù)最高精度是17位黎茎,例如:
字符串字面量
''焙畔,""要交叉使用不能使用相同引號(hào)嵌套掸读,例如單引號(hào)中嵌套單引號(hào)
- 轉(zhuǎn)義符號(hào) \
- \n 換行
- \t 制表符
- ' 輸出一個(gè)單引號(hào)
- \ 輸出一個(gè)斜杠
變量
使用關(guān)鍵字var聲名變量
若直接a =1 ,表示聲名了一個(gè)全局變量a
規(guī)則:
- 由數(shù)字、字母儿惫、下劃線澡罚、特殊符號(hào)組成,不能數(shù)字開頭
- 字母區(qū)分大小寫
- 不能使用保留字和關(guān)鍵字
一次聲名多個(gè)變量的方法
var a = 1,b =2 ,c =3
簡(jiǎn)單數(shù)據(jù)類型
number 數(shù)字類型 int float
string 字符串
undefined undefined類型肾请,未定義
boolean 布爾類型
null null類型:表示空值留搔,可以后期賦值
另外還要復(fù)雜類型:object 對(duì)象類型
檢測(cè)數(shù)據(jù)類型的函數(shù):typeof()
轉(zhuǎn)換成字符串類型的方法
- a.tostring
- String(a),無法使用toString方法的可以使用,例如null和undefined
- 使用“+”拼接
轉(zhuǎn)換成數(shù)值類型
Number()
空白和空字符串轉(zhuǎn)換成0铛铁,有內(nèi)容的字符串轉(zhuǎn)換成NaN
true轉(zhuǎn)換成1隔显,false轉(zhuǎn)換成0
undefined轉(zhuǎn)換成 NaN
null轉(zhuǎn)換成0字符串轉(zhuǎn)換數(shù)值的默認(rèn)函數(shù)
-
parseInt():轉(zhuǎn)換成整數(shù)
作用:對(duì)浮點(diǎn)數(shù)取證,第二字符串轉(zhuǎn)換成整數(shù)數(shù)字- 直接舍棄小數(shù)部分
parseFloat():轉(zhuǎn)換成浮點(diǎn)數(shù)
轉(zhuǎn)換成布爾類型
- Boolean():
轉(zhuǎn)換成false:NaN饵逐、0括眠、""、空字符串倍权、null掷豺、undefined
轉(zhuǎn)換成true:非空、非NaN數(shù)字薄声、非空字符串
空字符串 var a = ""
空白字符串 var A = " "
操作符
算符運(yùn)算符
- + 当船、—、*默辨、/德频、%、()
- % a/b = c 余 d,a % b = d
- ()數(shù)學(xué)方法缩幸,先算小括號(hào)
異常情況:
NaN參與的運(yùn)算結(jié)構(gòu)都為NaN
Infinity看情況
隱式轉(zhuǎn)換:計(jì)算機(jī)會(huì)將其他數(shù)據(jù)類型轉(zhuǎn)換成數(shù)字類型進(jìn)行計(jì)算
字符串類型除了加法之外都會(huì)進(jìn)行隱式轉(zhuǎn)換壹置,加法是連字符,其他類型規(guī)則如上
栗子:"1234" 轉(zhuǎn)換成整數(shù)1234進(jìn)行計(jì)算
轉(zhuǎn)換0:null桌粉、空蒸绩、空白字符串、false
轉(zhuǎn)換成NaN铃肯、undefined、非空传蹈、非純數(shù)字字符串("we1212")
比較運(yùn)算符
>押逼、<、>=惦界、 <=挑格、 == 、!=沾歪、 ===漂彤、 !==NaN參與的只有不等于和不全等于為true,其余為false
Infinity看情況
也會(huì)進(jìn)行隱式轉(zhuǎn)換類似運(yùn)算符
null與0判斷,等于為false挫望,<= 立润、 >=為true
null == undefined
eg:
nan做運(yùn)算只有不等于或不全等于為true、
infinity做運(yùn)算包含等好的媳板,大于等于桑腮,小于等于,等于蛉幸,全等為true其余flase
字符轉(zhuǎn)之間不會(huì)進(jìn)行隱式轉(zhuǎn)換而是比較字符編碼順序0-9破讨、A-Z、a-z奕纫,前面小于后面
邏輯運(yùn)算符
也會(huì)進(jìn)行隱式轉(zhuǎn)換
&&且提陶、||或、匹层!非
image-20220126210945862.png
邏輯運(yùn)算順序:非搁骑、與、或
賦值運(yùn)算符
=又固、+=仲器、-=、*=仰冠、/=乏冀、%=、++洋只、--
一元運(yùn)算符
++辆沦、--
a++,a++的值等于a识虚,但是再次調(diào)用a的時(shí)候才會(huì)+1
++a = 變量+1
運(yùn)算優(yōu)先級(jí):
()肢扯、一元運(yùn)算符、算數(shù)運(yùn)算符担锤、比較運(yùn)算符蔚晨、相等運(yùn)算符(==,===肛循,!=铭腕,!==)、邏輯運(yùn)算符多糠、賦值
表達(dá)式
一個(gè)表達(dá)式可以產(chǎn)生一個(gè)值累舷,可能是運(yùn)算、函數(shù)調(diào)用夹孔、字面量被盈∥瞿酰可以放在任何需要值得地方
if語句
if(判斷條件){
代碼塊:if(判斷條件){
代碼塊
}else{
代碼塊
}
}else if(判斷條件){
代碼塊
}else{
代碼塊
}
多分子if語句的跳樓現(xiàn)象:
滿足某個(gè)分支的條件后,不會(huì)再執(zhí)行下面的語句只怎,直接完成if語句袜瞬。
三元表達(dá)式
也叫三元運(yùn)算符,必須有三個(gè)操作數(shù)參與運(yùn)算
操作符號(hào):尝盼?:
判斷條件吞滞?為真時(shí)的結(jié)果:為假是的結(jié)果
Switch語句
default相當(dāng)于if語句的else
break是為了模擬跳樓現(xiàn)象,不顯匹配后還是會(huì)執(zhí)行下面的代碼
for循環(huán)語句
for(定義循環(huán)變量盾沫;循環(huán)最大值或最小值裁赠;步長(zhǎng)){
代碼塊
}
執(zhí)行過程:
注意事項(xiàng):
for循環(huán)小括號(hào)必須有兩個(gè)分號(hào)
{}后邊不用加分號(hào)
不設(shè)置最大最小值會(huì)形成死循環(huán)
栗子:
var i =1;
for (console.log("hahh") ; i<10;){
console.log(i);
i++;
}
do while循環(huán)
do{
代碼塊
}while{
條件表達(dá)式
}
先執(zhí)行代碼塊,等條件表達(dá)式為真時(shí)可以繼續(xù)執(zhí)行
注意事項(xiàng):
- 變量參與循環(huán)時(shí)赴精,要將變量寫在循環(huán)外面佩捞,否則會(huì)被重置
-
do while語句第一次運(yùn)行就為false時(shí),也會(huì)執(zhí)行一次結(jié)構(gòu)體蕾哟。
image-20220205172727554.png
while循環(huán)
是一種前測(cè)試循環(huán)語句一忱,開始循環(huán)前驗(yàn)證條件,為真執(zhí)行谭确,為假跳出
語法:
while(){
代碼塊
}
總結(jié):必須執(zhí)行一次循環(huán)體的語句用do while
先驗(yàn)證條件的用while
break語句
跳出循環(huán)帘营,若嵌套循環(huán)的話,break語句只終止自己所在的那個(gè)循環(huán)逐哈,不影響外部循環(huán)
例如:
for (var i =1 ; i < 100;i++){
for (var j =1 ; i < i; j++){
if(j > 80){
break
}
}
}
//若想break外部循環(huán)可以使用label標(biāo)簽方法:
out:for (var i =1 ; i < 100;i++){
for (var j =1 ; i < i; j++){
if(j > 80){
break out;
}
}
}
continue語句
作用:跳過這次循環(huán)
與break使用方法一致芬迄。
var i =1
var a =6
for (;i <= 300; i++){
zhu: if (100 % i == 0){
if (i > 6){
break zhu;
}
console.log(`${i}是6的約數(shù)`)
}
}
數(shù)組
可以理解為時(shí)js中的list類型
var a =[]
獲取數(shù)組元素
var a =[4,3,45,6,76,78];
console.log(a.length);
for(var i = 0; i < a.length; i++){
console.log(a[i]);
}
//數(shù)組程度從1開始算,數(shù)組下邊從0開始
函數(shù)
使用function關(guān)鍵字聲明函數(shù)
函數(shù)的數(shù)據(jù)類型時(shí)function昂秃,可以作為參數(shù)傳給其他函數(shù)
function 函數(shù)名(參數(shù)){
代碼塊
}
//調(diào)用函數(shù)
函數(shù)名()
//添加函數(shù)參數(shù)
//定義在函數(shù)內(nèi)容的參數(shù)a禀梳,b叫形參,本質(zhì)時(shí)變量
function sum(a,b){
console.log(a+b)
}
//調(diào)用函數(shù)
sum(2,3)//傳入函數(shù)的參數(shù)2肠骆,3叫實(shí)參
var a = parseFloat(prompt('輸入a'))
var b = parseFloat(prompt('輸入b'))
sum(a,b)
//匿名函數(shù)
var foo = function(){
代碼塊
}
//調(diào)用
foo()
//或者直接將函數(shù)矮化成表達(dá)式
var foo1 = function fun(){
代碼塊
}
//調(diào)用
foo1()
//使用fun()調(diào)用會(huì)報(bào)錯(cuò)
函數(shù)命名規(guī)則:
- 不能數(shù)字開頭
- 區(qū)分大小寫算途、不能使用關(guān)鍵字和保留字
arguments對(duì)象
函數(shù)中內(nèi)置的存儲(chǔ)實(shí)參的偽數(shù)組,可以遍歷
funciton foo(){
//打印全部實(shí)參控制臺(tái)會(huì)顯示一個(gè)list
console.log(arguments)
console.log(arguments.length)
}
throw:拋出
new:新的
error()錯(cuò)誤
函數(shù)的返回值
使用return關(guān)鍵字蚀腿,可以執(zhí)行反函數(shù)后返回一個(gè)值
- 執(zhí)行到return后不會(huì)在執(zhí)行后面的代碼
- 可以return 字面量/表達(dá)式
函數(shù)的遞歸
在函數(shù)內(nèi)部調(diào)用他自己即為遞歸嘴瓤,大多用來解決數(shù)學(xué)問題,例如斐波那契數(shù)列
function fun(a){
if (a == 1 || a == 2){
return 1;
}else{
return fun(a-1) + fun(a-2);
}
}
console.log(fun(1))
console.log(fun(8))
函數(shù)的作用域
es6之前的定義
函數(shù)作用域內(nèi)容變量只在函數(shù)內(nèi)部生效
全局變量可以在函數(shù)內(nèi)部使用
es6新增:
每個(gè){}中的結(jié)果體屬于一個(gè)塊唯咬,在{}中定義的變量外部不能使用
變量退出作用域之后會(huì)銷毀纱注,全局變量關(guān)閉網(wǎng)頁才會(huì)銷毀。
函數(shù)的作用域鏈
遮蔽效應(yīng)
多層函數(shù)作用域的機(jī)構(gòu)胆胰,查找變量會(huì)從里到外開始找,使用找到的第一定義的變量刻获,會(huì)發(fā)生內(nèi)層變量遮蔽外層的效果蜀涨。
預(yù)解析
js代碼由瀏覽器的js解析器執(zhí)行
順序:預(yù)解析————執(zhí)行代碼
預(yù)解析過程:
1.把變量聲明提升到最前面瞎嬉,注意:只提升聲明不賦值
2.把函數(shù)聲明提升到最前面,只提升不調(diào)用
3.先提升var厚柳、function
4氧枣、解析完之后,根據(jù)代碼順序别垮,從上往下執(zhí)行
變量聲明提升:
因?yàn)轭A(yù)解析把變量聲明提升到最前面便监,因此代碼中在定義變量前調(diào)用變量會(huì)默認(rèn)返回undefined值
函數(shù)聲明提示:
因?yàn)轭A(yù)解析把函數(shù)聲明提升到最前面,所以在前面調(diào)用后面的函數(shù)可以成功
注意:變量名和函數(shù)名相同時(shí)碳想,先提升的變量名會(huì)被后提升的函數(shù)名覆蓋
函數(shù)表達(dá)式的提升
函數(shù)表達(dá)式進(jìn)行的時(shí)變量聲明的提升
IIFE自調(diào)用函數(shù)
函數(shù)矮化成表達(dá)式烧董,可以實(shí)現(xiàn)自調(diào)用
矮化函數(shù):
數(shù)學(xué)運(yùn)算符:+、-胧奔、()
邏輯運(yùn)算符:逊移!
IIFE結(jié)構(gòu)可以關(guān)住函數(shù)的作用域,不能在外面調(diào)用函數(shù)
IIFE最常用的矮化方式是()龙填,配合匿名函數(shù)
(funciton(a){
console.log(a);
})(1);