上節(jié)課給大家展現(xiàn)了很多實(shí)例欧穴,這節(jié)我們正式接觸基礎(chǔ)知識
JavaScript組成
ECMAScript是js解釋器,負(fù)責(zé)翻譯給計(jì)算機(jī)互相溝通
DOM:DocumentObjectModel文檔對象模型吩案,我們之前查找元素就是用的document,其實(shí)就是html文檔帝簇,關(guān)于對象和模型我們后面會講解
BOM:BrowserObjectModel瀏覽器對象膜徘郭,我們操作瀏覽器相關(guān)的操作靠益,window是其相關(guān)的
兼容性問題
ECMAScript為核心部分,功能比較簡單残揉,幾乎沒有兼容性問題
DOM有一些操作不兼容
BOM沒有兼容性(完全不兼容)
變量類型
為了看類型胧后,我們先看下面的代碼
其中,a為數(shù)字類型number抱环,b為字符串string壳快,c為布爾類型boolean,d是函數(shù)類型镇草,我們定義函數(shù)眶痰,那其就是此類型,e我們賦值document梯啤,其默認(rèn)的就是object對象類型竖伯,我們沒定義aa,其類型就是undefined因宇,還有我們定義變量f七婴,但是沒賦值,其類型也是undefined
這里我們使用typeof 變量名 ? ?獲得變量的類型察滑,也可以使用typeof(變量名)
變量類型轉(zhuǎn)換
比如說我們在2個input表輸入數(shù)字打厘,然后點(diǎn)擊按鈕,彈出求和贺辰,如果我們只是講2個input簽的value相加婚惫,那結(jié)果只能是字符串拼接,我們就需要將其轉(zhuǎn)換為數(shù)字
如上圖魂爪,我們就通過parseInt(x)將字符串x內(nèi)容轉(zhuǎn)換成整數(shù)
我們就繼續(xù)分析下parseInt()
我們嘗試給內(nèi)部傳入'12xxdas'字符串先舷,發(fā)現(xiàn)返回12,這是為什么呢,parseInt()會從左到右滓侍,直到遇到非數(shù)字部分蒋川,將左側(cè)數(shù)字部分返回
我們又干脆不給寫數(shù)字,直接傳入字符串撩笆,則返回的是NaN,這是Js的Not a Number的縮寫捺球,提示不是一個數(shù)字
我們之前的加法如果一個輸入數(shù)字,另一個輸入使內(nèi)容NaN的純字母字符串夕冲,則結(jié)果還是NaN,即數(shù)字和NaN計(jì)算還是NaN
JS里NaN有個特性氮兵,就是NaN之間不相等,如上圖會提示false
JS里如何判斷其為NaN呢歹鱼,我們可以使用isNaN(變量)
這里用了或邏輯||泣栈,我們判斷有一個isNaN()為true,就提示錯誤,
我們?nèi)脒^parseInt('3.5')就會返回3南片,如果我們想得到小數(shù)掺涛,就需要他的兄弟parseFloat();
我們使用parseInt,parseFloat都是強(qiáng)制類型轉(zhuǎn)換,也叫顯式轉(zhuǎn)換
還有一種就是隱式轉(zhuǎn)換(偷偷的給變了類型)
我們看到a是數(shù)字5疼进,b是字符串‘5’,a==b結(jié)果是true薪缆,這里==兩側(cè)被默認(rèn)轉(zhuǎn)換成相同類型比較
我們改用===三個等號,會發(fā)現(xiàn)結(jié)果是false伞广,三個等號的作用是不轉(zhuǎn)換類型直接比較
又一個例子如上拣帽,我們定義字符串a(chǎn),b分別為數(shù)字字符串嚼锄,加法當(dāng)然是拼接了减拭,但是減法呢,結(jié)果卻是得到12-5的7,這就是做了隱式轉(zhuǎn)換灾票,同理還有乘除法,這里的解釋是+可以是拼接也可以是數(shù)字加法茫虽,因?yàn)楹笳咭D(zhuǎn)換刊苍,所以選擇最簡單的拼接,而其他的就是給數(shù)字用的濒析,所以要轉(zhuǎn)換類型
變量作用域
我們嘗試執(zhí)行這個代碼正什,會發(fā)現(xiàn)網(wǎng)頁報(bào)錯,提示a沒有定義号杏,這是因?yàn)閍定義在函數(shù)aaa內(nèi)部婴氮,是個局部變量,只能在定義他的函數(shù)里使用
我們把var定義的地方換個位置盾致,就會發(fā)現(xiàn)可以提示12主经,這是因?yàn)槎x了全局變量
閉包
當(dāng)我們把函數(shù)定義到另一個函數(shù)內(nèi)部,就實(shí)現(xiàn)了閉包(子函數(shù)可以使用父函數(shù)的局部變量)庭惜,這種情況把a(bǔ)aa叫父函數(shù)罩驻,bbb叫子函數(shù)
JS命名規(guī)范
可讀性,別人能見名知意
規(guī)范性护赊,可以使用前綴+首字母大寫的拼接(匈牙利命名法)惠遏,前綴可以使我們一看就知道其類型
前綴表如上
運(yùn)算符
+-*/%加減乘除取模(/除法得到的是小數(shù))
取模%可以用于隔行變色,
像秒數(shù)轉(zhuǎn)換成xx分xx秒等等等骏啰,
!=和判耕!==的關(guān)系就和==與===的關(guān)系一樣透绩,我們前者隱式轉(zhuǎn)換都不等則不等,后者類型不等也不行
&&,||渺贤,雏胃!與或非js邏輯運(yùn)算(前2個是雙字符)
流程控制
首先我們講if瞭亮,之前也說過if else统翩,這里提下更高級的寫法
if(條件){}else if{條件}else{}這種結(jié)構(gòu),python也見過類似的此洲,沒啥說的
switch語句,對于多值情況
switch(變量名){
? ? 值1:
? ? ? ? 語句1;
? ? ? ? break;
? ???值2:??
????????語句1呜师;
? ? ? ? break;
? ? default:
? ? ? ? 語句n衷畦;
}
每個條件下祈争,break不能缺省,default是都不滿足進(jìn)的地方
三元運(yùn)算符 ?條件扁藕?語句1:語句2;如果條件滿足執(zhí)行語句1亿柑,否則執(zhí)行語句2
根據(jù)變量a奇偶數(shù)提示如上
循環(huán)中break是結(jié)束最近的一層循環(huán),continue則是結(jié)束當(dāng)次循環(huán)秘症,繼續(xù)下次循環(huán)
JS的‘真’和‘假’
js里用于邏輯判斷
非0數(shù)字,非空對象和true同等地位乡摹,
0和false聪廉,空對象框全,空字符串,null(空對象)津辩,undefined一樣
JSON
var json={};符號是花括號,里面是用鍵值對的方式存儲蚜印,我們訪問元素可以用json.鍵名或json[鍵名]訪問值,也可以通過訪問的對象修改值忆绰,
arr=[1,2,3,4]這樣的數(shù)組也能存儲多值孝赫,我們可以用數(shù)字索引來訪問红符,而json格式是用字符串訪問预侯,
json沒有l(wèi)ength屬性(不能通過長度遍歷)
關(guān)于遍歷我們之前訪問數(shù)組是用for循環(huán),i和arr.length設(shè)置條件,其實(shí)我們還可以這么寫
for(each in arr){
? ? alert(each);
};
當(dāng)然我們json也可以用for in的方法萎馅,每個遍歷的是json的鍵值飒货,