一個(gè)頁面分成三個(gè)部分,結(jié)構(gòu),樣式,行為。
HTML代表了頁面的結(jié)構(gòu)(骨架),CSS代表了頁面的樣式(皮膚),JavaScript代表了頁面的行為(這種行為是被動(dòng)的)。主動(dòng)的行為需要一個(gè)大腦,后端作為我們的大腦替我們分析執(zhí)行數(shù)據(jù),執(zhí)行行為,我們和大腦之間的聯(lián)系A(chǔ)JAX(中樞神經(jīng))。
1.JavaScript是什么,它能做什么?
對(duì)頁面進(jìn)行渲染,讓頁面有行為。讓頁面動(dòng)起來;
JavaScript簡(jiǎn)史
JavaScript在設(shè)計(jì)之初只是為了做表單驗(yàn)證的。但是現(xiàn)如今,JavaScript已經(jīng)成為了一門功能全面的變成語言,已經(jīng)是WEB中不可或缺的一部分,如今的JavaScript是一門既簡(jiǎn)單又復(fù)雜的語言,說它簡(jiǎn)單是因?yàn)閷W(xué)會(huì)它,幾乎只要一個(gè)小時(shí)就可以了。但是如果你想要真正掌握它,需要幾年的時(shí)間。
JavaScript發(fā)展
NetScape公司在1995年著手開發(fā)一種名為liveScript的腳本語言, 為了營(yíng)銷目的搭上當(dāng)時(shí)媒體熱炒的Java順風(fēng)車,臨時(shí)更名liveScript為JavaScript。其實(shí)JavaScript和Java沒有一點(diǎn)關(guān)系。JavaScript1.0獲得巨大成功。
NetScape公司趁熱打鐵繼續(xù)發(fā)布JavaScript1.1版本,使得Web獲得更高的關(guān)注,同時(shí)奠定了自己在瀏覽器界的霸主地位。
如果事情一直這樣下去那么NetScape可能依舊使我們現(xiàn)代瀏覽器的霸主,可是在1996年互聯(lián)網(wǎng)巨頭微軟公司進(jìn)入瀏覽器領(lǐng)域,推出JScript,和NetScape公司開始爭(zhēng)奪霸主地位。
最讓人擔(dān)心的問題也因此出現(xiàn)了,當(dāng)時(shí)的JavaScript和JScript是完全不同的兩個(gè)版本,這門語言沒有一個(gè)標(biāo)準(zhǔn)存在,業(yè)內(nèi)的擔(dān)心(吐槽)日益加劇。終于,多方聯(lián)合共同制定了一個(gè)標(biāo)準(zhǔn),這個(gè)標(biāo)準(zhǔn)也就是ECMAScrip,ECMAScript作為各自JavaScript實(shí)現(xiàn)的基礎(chǔ)。雖然制定標(biāo)準(zhǔn)只花費(fèi)了幾個(gè)月,但是這幾個(gè)月卻對(duì)未來20年的JavaScript發(fā)展起到了不可或缺的作用。
瀏覽器的發(fā)展經(jīng)歷了無數(shù)的坎坷,各個(gè)瀏覽器發(fā)現(xiàn)這塊巨大的蛋糕后誰都不愿放棄,于是激烈的廝殺開始了。
第一次瀏覽器大戰(zhàn):
原始時(shí)期,微軟發(fā)布了IE瀏覽器,和網(wǎng)景netSpace navigator大打出手,最后網(wǎng)景失敗,將公司賣給AOL,核心團(tuán)隊(duì)全部離職,第一回合,微軟獲勝,netSpace昔日霸主隕落。
但是NetScape并沒有放棄,在1998年公開源碼并重新命名為 Mozilla,并重寫全部程序,在2002年發(fā)布了第一個(gè)瀏覽器版本,firefox登場(chǎng)。在2004年已經(jīng)開始叫板IE瀏覽器,iE推出IE7與之抗衡,拉開了第二次瀏覽器大戰(zhàn)的序幕。
第二次瀏覽器大戰(zhàn):
第二次瀏覽器大戰(zhàn)不再是IE和FF的兩家之爭(zhēng),在現(xiàn)代瀏覽器群雄并起,同時(shí)挪威的 Opera ,幾乎所有的智能手機(jī)配備的都是這個(gè)瀏覽器,擁有全世界最快V8引擎的Chrom,以及蘋果公司的Safari,全部加入瀏覽器爭(zhēng)奪。至今戰(zhàn)爭(zhēng)還在進(jìn)行,但是對(duì)于瀏覽器大戰(zhàn)我們看到的結(jié)果大多是推進(jìn)了瀏覽器的發(fā)展,為更好的用戶體驗(yàn)做出了非常積極的貢獻(xiàn)。
JavaScript的組成
ECMAScript 、BOM 、DOM;
ECMAScript:這是一個(gè)標(biāo)準(zhǔn),它規(guī)定了語法、類型、語句、關(guān)鍵字、保留字、操作符、對(duì)象。(相當(dāng)于法律 )
BOM(瀏覽器對(duì)象模型):可以訪問瀏覽器窗口的的瀏覽器對(duì)象模型,對(duì)瀏覽器窗口進(jìn)行操作。
DOM(文檔對(duì)象模型):DOM把整個(gè)頁面映射為一個(gè)多層節(jié)點(diǎn)結(jié)構(gòu)。HTML頁面組成都是某種類型 的節(jié)點(diǎn),這些節(jié)點(diǎn)又包含著不同類型的數(shù)據(jù)。
如何寫JavaScript程序?
script標(biāo)簽使用
<script></script>
src : 外聯(lián)script 標(biāo)簽(立即調(diào)用,不能在該標(biāo)簽內(nèi)寫代碼)
<script>
//在標(biāo)簽內(nèi)書寫內(nèi)容
</script>
<script src='javascript.js'>// 這里面不能寫任何內(nèi)容</script>
一切準(zhǔn)備就緒,讓我們從Hello Word開始吧。
document.write的使用 >>>> HelloWord >>> 原樣輸出標(biāo)簽。
注釋 (一份好的代碼,要有三分之二的注釋)
單行注釋: // 要注釋的內(nèi)容。
多行注釋:/* 注釋的內(nèi)容寫在這里 */
原樣輸出標(biāo)簽內(nèi)容
如果我想在頁面中打印出:<strong>標(biāo)簽怎么辦?
如果按照正常的打印方式進(jìn)行打印,毫無疑問,標(biāo)簽會(huì)被瀏覽器解析。當(dāng)我們要打印標(biāo)簽的時(shí)候要對(duì)對(duì)標(biāo)簽進(jìn)行轉(zhuǎn)義。
< 代表 <
> 代表 >
document.write('<strong>強(qiáng)大的</strong>');
變量(別稱)
他叫翠花,他是一只熊。
熊的底層是什么那? 熊皮、熊掌、熊骨...., 那我們每次呼叫這只熊的時(shí)候都要叫她什么?有一張熊皮,500公斤熊肉,第三塊小腳趾骨斷過的,那個(gè)玩意?
不!我們叫她翠花!這就是這只熊的別稱!放在計(jì)算機(jī)里,這就是把這只熊塞入了一個(gè)叫做翠花的變量里。
怎么聲明一個(gè)變量那?
關(guān)鍵字 var 變量名 a = '<strong>強(qiáng)壯的</strong>'
var 聲明變量的底層原理:我們所寫的程序運(yùn)行在內(nèi)存中,當(dāng)我們使用關(guān)鍵字var 聲明一個(gè)變量的時(shí)候,計(jì)算機(jī)會(huì)從內(nèi)存中留出一定儲(chǔ)存空間,為我們存放不同類型的內(nèi)容。
分清左右兩側(cè)的意義:
JavaScript中的 ‘’=‘’ 和我們數(shù)學(xué)中的 ‘’ = ‘’不一樣,在JavaScript中‘’=‘’的作用是賦值(取別稱)。
var a = '<strong></strong>'; 這句話分成兩個(gè)部分。
左值:在等號(hào)左側(cè),是變量名(同時(shí)被賦值)
右值 :在等號(hào)右側(cè),是存放進(jìn)變量中的東西(給變量賦值)
變量的類型(因?yàn)榇娣胚M(jìn)變量中的數(shù)據(jù)是放在內(nèi)存中的,計(jì)算機(jī)只識(shí)別0,1,所以需要對(duì)不同類型的數(shù)據(jù)進(jìn)行轉(zhuǎn)義,轉(zhuǎn)義的結(jié)果會(huì)導(dǎo)致所需空間不同,所以JavaScript中分成很多種數(shù)據(jù)類型,以便計(jì)算機(jī)儲(chǔ)存時(shí)使用)
數(shù)字類型(number):1234567890
字符類型(string):'123456','字符串類型',.....(有單引號(hào)或者雙引號(hào))
未定義類型(undefined):這是一種特殊類型,當(dāng)變量被聲明但是沒有被賦值的時(shí)候,那么該變量的類型為undefined;
布爾值類型:true,false;
對(duì)象類型:object;
怎樣直觀地區(qū)分不同的數(shù)據(jù)類型那?
一個(gè)關(guān)鍵字 typeof
變量使用小技巧: 聲明一串變量:var a=1,b=2,c=3;(不推薦初學(xué)者使用這樣的變量聲明方式,因?yàn)檫@樣的變量聲明方式會(huì)導(dǎo)致注釋不明確。)
變量命名規(guī)范:(匈牙利命名法:駝峰命名法)
為什么要存在命名規(guī)范那?
你的代碼并不是只有你一個(gè)人看,變量既然是別稱,那么別稱就要有特殊的含義:
舉個(gè)栗子:翠花,我們能從這個(gè)名字中得到什么信息那?
(這個(gè)名字的主人性別應(yīng)該是女的,家中父母的一個(gè)美好愿景);
我們從這些名字中能夠讀出很多的含義,是因?yàn)槲覀兊恼Z言常識(shí),同樣,變量也有一套類似的標(biāo)準(zhǔn),代表了各種各樣的含義,這些含義如下:
第二個(gè)規(guī)則:
開頭必須為字母或者$ 或 _
想要用break作為變量可不可以那?
關(guān)鍵字:
這些關(guān)鍵字用于執(zhí)行特定操作等。按照規(guī)則,關(guān)鍵字也是語言保留的,不能用作標(biāo)識(shí)符。
保留字:未來可能作為,標(biāo)識(shí)符存在。
alert()方法
alert()使用 。 停止瀏覽器加載代碼。
瀏覽器解析代碼順序。(從上到下,從左到右);
邏輯運(yùn)算符:
var a=1,b=2;
a+b=3
a - b=-1
a * b=2
a / b=0.5
a % b=1
var a='1', b='2';
a * b=2 ;
a / b=0.5;
a - b=-1;
a + b =???
不同:和我們概念里的邏輯運(yùn)算符很多都是不一樣的。
- = == === 這些都不一樣。
避免問題出現(xiàn)(一眼就看出來了):
讓計(jì)算機(jī)告訴我:typeof 關(guān)鍵字;(數(shù)據(jù)類型的檢測(cè),意義在于確認(rèn)是否能夠被使用);
編程習(xí)慣:分號(hào),雖然不加分號(hào)在JavaScript語法上沒有問題,但是建議不要省略分號(hào),加了分號(hào)之后可以用軟件壓縮。良好的變成習(xí)慣(JavaScript權(quán)威指南)上的理由。
浮點(diǎn)數(shù):
你的電腦做著正確的二進(jìn)制浮點(diǎn)運(yùn)算,但問題是你輸入的是十進(jìn)制的數(shù),電腦以二進(jìn)制運(yùn)算,這兩者并不是總是轉(zhuǎn)化那么好的,有時(shí)候會(huì)得到正確的結(jié)果,但有時(shí)候就不那么幸運(yùn)了;
alert(0.7+0.1); //輸出0.7999999999999999
類型轉(zhuǎn)換:alert(0.6+0.2); //輸出0.8;
var a=3,b='10',c=true;
alert(a+b);
alert(b+c);
alert(a+c);
運(yùn)算結(jié)果好像并不是我們想要的:應(yīng)該怎么辦那?當(dāng)我們想做數(shù)學(xué)運(yùn)算的時(shí)候,應(yīng)該先對(duì)所有的數(shù)據(jù)類型進(jìn)行統(tǒng)一(統(tǒng)一成數(shù)字格式),這時(shí)候我們就該用到數(shù)據(jù)類型的轉(zhuǎn)換。
數(shù)據(jù)類型轉(zhuǎn)換方法:
parseInt();
parseFloat();
我們嘗試一下數(shù)據(jù)轉(zhuǎn)換的結(jié)果:
認(rèn)識(shí)NaN:他是一種特殊的Number類型結(jié)果,代表意外轉(zhuǎn)換的數(shù)字,NaN和任何東西都是不等的。
關(guān)于浮點(diǎn)數(shù):Math.round()四舍五入取整浮點(diǎn)數(shù)。
賦值操作:(JavaScript中存在非常多的簡(jiǎn)寫)
var a=1;
a=a+1;
a+=1;
alert(a)
這些當(dāng)然還包括 -= 、*=、/=、%=
這些賦值操作符的結(jié)果都是什么?
一個(gè)更簡(jiǎn)便的寫法 a++ ; a - -;
本文作者祈澈姑娘,轉(zhuǎn)載請(qǐng)標(biāo)明作者和文章出處,創(chuàng)作不易。