經(jīng)過一個月的時間已經(jīng)結(jié)束了第一階段的學(xué)習(xí),接下來就是進入到最費腦子的第二階段—JS的學(xué)習(xí)疆前。
把網(wǎng)頁分為3部分的話肚逸,html代表結(jié)構(gòu)爷辙,CSS代表樣式那么JS就代表網(wǎng)頁的行為‰伲可以理解為女媧造人時捏的一個個泥人就是我們的網(wǎng)頁膝晾,但是沒有女媧吹的那口氣泥人是不會動的,當(dāng)女媧向泥人吹了那口仙氣一個個小泥人就可以活蹦亂跳了务冕。我們的JS就相當(dāng)于那一口仙氣讓我們的網(wǎng)頁靈活起來血当。
1JavaScript的歷史
javascript在設(shè)計之初只是為了做表單的驗證,但是如今已經(jīng)成為了一種功能全面的變成語言禀忆。JAVA和JavaScript有什么關(guān)系呢臊旭?答:毫無關(guān)系。JavaScript最初是NetScape公司在1995年著手研發(fā)的在當(dāng)時叫做liveScript的腳本語言箩退。公司為了營銷目的搭上了當(dāng)時媒體熱炒的Java的順風(fēng)車臨時更名為JavaScript巍扛。但是Javascript1.0獲得了巨大的成功。但是后來1996年微軟公司進入瀏覽器領(lǐng)域推出了JScript開始和NetScript爭當(dāng)博主地位乏德。他們爭奪最終苦的是開發(fā)者,因為沒有一個標(biāo)準的存在。業(yè)內(nèi)的吐槽也日益嚴重喊括,終于多方聯(lián)合共同制定了一個標(biāo)準胧瓜,這個標(biāo)準就是ECMAScript(歐洲計算機制造商協(xié)會)
2JavaScript的組成
1.ECMAScript:ECMAScript是一個標(biāo)準,它規(guī)定了語法郑什,類型府喳,語句。關(guān)鍵字蘑拯,保留子钝满。操作符,對象申窘⊥溲粒可以說它就是一個法律。
2.BOM(瀏覽器對象模型):可以訪問瀏覽器窗口的對象模型剃法,對瀏覽器窗口進行操作碎捺。
3.DOM(文檔對象類型):DOM把整個頁面都映射成一個多層的節(jié)點結(jié)構(gòu)〈蓿可以說整個是整個HTML文檔
3如何編寫和運行JS
JS也是一種腳本語言收厨,它也可以有兩種方式在HTML頁面引入,一種是外聯(lián)一種內(nèi)聯(lián)优构。
1.外聯(lián)的寫法:
<script src=""></>
2.內(nèi)部寫法:
<script>
//在標(biāo)簽內(nèi)寫腳本
</script>
3.錯誤的寫法:
<script src="">
//在標(biāo)簽內(nèi)寫腳本
</>
4.向頁面打印內(nèi)容:
document.write("Hellow word")
5.也可以直接解析標(biāo)簽
document.write("<strong>hellow word</strong>")
同樣用到特殊字符時也需要轉(zhuǎn)義字符
4變量
1.變量的數(shù)據(jù)類型
數(shù)字類型(number):1234567890
字符類型(string):被單引號雙引號包裹的部分都是字符型
未定義類型(undefined):當(dāng)變量被聲明卻沒有被賦值時
布爾類型(boolean):true诵叁,false(真,假)
對象類型(object):{}
數(shù)組類型(array):[]
其中數(shù)組類型是爭議最大的類型钦椭,有人說它是獨立的類型有人說它應(yīng)該劃分到對象類型里
2.變量的命名規(guī)則拧额。
第二開頭必須為字母或者$或者_
第三關(guān)鍵字和保留字不能作為變量名
關(guān)鍵字:以下這些關(guān)鍵字用于執(zhí)行特定操作。按照規(guī)則玉凯,關(guān)鍵字也是語言保留的势腮,不能用作標(biāo)識符
保留字:未來可能作為關(guān)鍵字存在
5運算符
JS的運算符分為:算數(shù)、賦值漫仆、關(guān)系捎拯、邏輯。
1:算數(shù)運算符:+加 -減 乘 /除 %取余
var a = 1;
var b = 2;
a+b=3
a-b=-1
ab=2
a/b=0.5
a%b=1
這里跟數(shù)學(xué)的運算方法一樣盲厌。但是:
var a="1",b="2";
a * b = 2
a / b = 0.5
a - b = -1
a + b = 12
+號有兩層意思第一層當(dāng)左右都為number類型時它就是加法運算署照,當(dāng)有一邊是字符型那么就變成了連接符。這里就用到了數(shù)據(jù)類型的轉(zhuǎn)換:強制轉(zhuǎn)換和隱形轉(zhuǎn)換吗浩。等會就要說道建芙。
2.賦值運算符:= += -= *= /= %=
3.關(guān)系運算符:< <= > >= == !== ===
4.邏輯運算符:&& || !
用數(shù)學(xué)里面學(xué)的說就是
與(and):同假為假懂扼。意思是只有兩個都為假時才為假禁荸。
或(or):同真為真右蒲。意思是只有都為真時才為真。
非(8鲜臁)取反面瑰妄,真就是假,假就是真映砖。
運算順序跟數(shù)學(xué)一樣间坐。
6自增自減運算
運算符:++ --
a++表示在a原有的基礎(chǔ)加1
a--表示在a原有的基礎(chǔ)上減1
感覺很好理解不就是自增自減嗎,其實不然邑退。那么++a和--a又是多少竹宋?
var a =1;
console.log(a)
這個打印結(jié)果為1,毫無疑問地技。
var b =1;
b++;
console.log(b++);
這個打印結(jié)果為2蜈七。因為++意思就是自增1,也毫無疑問乓土。
var c =1;
console.log(c++);
console.log(c);
看到這題估計就有好多人認為跟上面一樣也是自增1宪潮,所以l兩個答案都是2。其實正確的答案是上面的是1趣苏,下面的是2狡相。這是為什么呢?因為我們?yōu)g覽器在解析我們的代碼是都是遵循從上到下從左到右的順序解析食磕。
在變量b那題尽棕,我們先給變量b賦值1,然后我們進行了累加計算彬伦。這時b變成了2滔悉。最后我們把b打印出來,那么打印出來的結(jié)果就是2单绑。
在變量c這題我們在從上往下回官,從左到又的順序解析看看。首先也一樣給變量c賦值1搂橙。然后我們開始打印打印順序是從左到右歉提,所以先把c打印出來(因為++是在c的后面還沒來的急累加c就被打印了出來)。然后打印過后開始了累加最后再次打印c的值区转,這時c就變成了2苔巨。
var d =1;
console.log(++d);
那么這題也按照解析順序來看就好理解了。先賦值废离,然后打印的時候先進行了自增(因為++在前面)侄泽。接著打印出了d的值是2。
拓展:
var k =0;
console.log(k++ + ++k +k+k++)
首先k的初始值為0蜻韭,所以k++時是0悼尾,然后k開始自增k變成了1柿扣,然后加上++k,因為++在前面所以先在增加1诀豁,++k就變成了2窄刘,然后在加k(++k后面沒運算符,所以k還是2)舷胜,然后在加k(k還是2),然后后面還有++瀏覽器就還沒來的急解析就打印了出來結(jié)果就是6(0+2+2+2)活翩。雖然沒打印出來后面的++但是我們也要知道最后k變?yōu)榱?烹骨,后面如果還有k就是以3進行計算了。
自增與自減方法一樣材泄。
7數(shù)據(jù)類型轉(zhuǎn)換
數(shù)據(jù)類型轉(zhuǎn)換分為強制類型轉(zhuǎn)換和隱性轉(zhuǎn)換沮焕。
1:隱性轉(zhuǎn)換,在上面說過拉宗,當(dāng)字符與數(shù)字相加時+變?yōu)榱诉B接符峦树,這里瀏覽器在進行解析的時候就默認把number類型轉(zhuǎn)換成了字符類型。這就是隱形轉(zhuǎn)換旦事。
2:強制轉(zhuǎn)換魁巩,
轉(zhuǎn)換為字符型:toString()
強制把類型轉(zhuǎn)換為字符型。
var str = 123;
str.toString();-
轉(zhuǎn)換成數(shù)值:
parseInt();轉(zhuǎn)換成整數(shù)姐浮,可以接受兩個值
parseFloat();轉(zhuǎn)換成浮點數(shù)兩者的不同:
parseInt();該方法從左向右谷遂,檢測數(shù)字或字符串,當(dāng)?shù)谝淮伟l(fā)現(xiàn)一個不為數(shù)字的字符時卖鲤,把之前的所有進行返回肾扰,如果字符串中第一個就不是數(shù)字,那么返回NaN
例如:parseInt("123abc");a做為第一個不是數(shù)字的字符蛋逾;返回a之前的所有值集晚,則該方法返回123
parseInt("abc123");a做為第一個不是數(shù)字的字符,且處在字符串的第一位区匣,則判定該字符串無法轉(zhuǎn)換為數(shù)字返回NaN
parseFloat();該方法檢索數(shù)字或字符串后面第一個.后的不為數(shù)字的字符偷拔,并對之前所有的結(jié)果進行返回,如果第一個字符不為數(shù)字沉颂,那么返回NaN
例如:parseFloat(“123.456");返回123.456
parseFloat(“123.4a56");返回123.4
parseFloat(“123.00");返回123
parseFloat(“123.0a56");返回123
關(guān)于浮點數(shù):Math.round()四舍五入取整浮點數(shù)条摸。
num.toFixed(n)保留幾位小數(shù)。 Number()為強制數(shù)據(jù)類型轉(zhuǎn)換:
Number("hello world"); //NaN
Number("123456"); //123456
8NAN的概念
NaN:是一種特殊的number類型铸屉,代表意外轉(zhuǎn)換成的數(shù)字钉蒲,NAN和任何東西都不等,甚至都不等于自己彻坛。
isNaN()函數(shù)顷啼,該函數(shù)判斷括號內(nèi)的值是否是NaN踏枣,是就返回true,不是就返回false钙蒙。當(dāng)運算結(jié)果出現(xiàn)了NAN時一定要注意是不是前面的變量獲取出錯了茵瀑。