JavaScript歷史
要了解JavaScript,我們首先要回顧一下JavaScript的誕生。
在上個世紀的1995年,當時的網(wǎng)景公司正憑借其Navigator瀏覽器成為Web時代開啟時最著名的第一代互聯(lián)網(wǎng)公司。
由于網(wǎng)景公司希望能在靜態(tài)HTML頁面上添加一些動態(tài)效果,于是叫Brendan Eich這哥們在兩周之內(nèi)設計出了JavaScript語言。你沒看錯,這哥們只用了10天時間。
為什么起名叫JavaScript?原因是當時Java語言非常紅火,所以網(wǎng)景公司希望借Java的名氣來推廣,但事實上JavaScript除了語法上有點像Java,其他部分基本上沒啥關系。
ECMAScript
因為網(wǎng)景開發(fā)了JavaScript,一年后微軟又模仿JavaScript開發(fā)了JScript,為了讓JavaScript成為全球標準,幾個公司聯(lián)合ECMA(European Computer Manufacturers Association)組織定制了JavaScript語言的標準,被稱為ECMAScript標準。
所以簡單說來就是,ECMAScript是一種語言標準,而JavaScript是網(wǎng)景公司對ECMAScript標準的一種實現(xiàn)。
那為什么不直接把JavaScript定為標準呢?因為JavaScript是網(wǎng)景的注冊商標。
不過大多數(shù)時候,我們還是用JavaScript這個詞。如果你遇到ECMAScript這個詞,簡單把它替換為JavaScript就行了。
JavaScript版本
JavaScript語言是在10天時間內(nèi)設計出來的,雖然語言的設計者水平非常NB,但誰也架不住“時間緊,任務重”,所以,JavaScript有很多設計缺陷,我們后面會慢慢講到。
此外,由于JavaScript的標準——ECMAScript在不斷發(fā)展,最新版ECMAScript 6標準(簡稱ES6)已經(jīng)在2015年6月正式發(fā)布了,所以,講到JavaScript的版本,實際上就是說它實現(xiàn)了ECMAScript標準的哪個版本。
由于瀏覽器在發(fā)布時就確定了JavaScript的版本,加上很多用戶還在使用IE6這種古老的瀏覽器,這就導致你在寫JavaScript的時候,要照顧一下老用戶,不能一上來就用最新的ES6標準寫,否則,老用戶的瀏覽器是無法運行新版本的JavaScript代碼的。
不過,JavaScript的核心語法并沒有多大變化。我們的教程會先講JavaScript最核心的用法,然后,針對ES6講解新增特性。
使用javaScript能做什么?
數(shù)據(jù)可視化
移動端應用: Cordova
服務端:Node.js
桌面應用: NW.js 和 Electron
游戲
VR
AR
硬件
物聯(lián)網(wǎng)javaScript語言特點?
JavaScript是一門動態(tài)的,弱類型,基于原型的腳本語言。在JavaScript中“一切皆對象”,在這一方面,它比其他的OO語言來的更為徹底,即使作為代碼本身載體的function,也是對象,數(shù)據(jù)與代碼的界限在JavaScript中已經(jīng)相當模糊。雖然它被廣泛的應用在WEB客戶端,但是其應用范圍遠遠未局限于此。下面就這幾個特點分別介紹:
動態(tài)性
動態(tài)性是指,在一個Javascript對象中,要為一個屬性賦值,我們不必事先創(chuàng)建一個字段,只需要在使用的時候做賦值操作即可,如下例:
//定義一個對象
var obj = new Object();
//動態(tài)創(chuàng)建屬性name
obj.name = "an object";
//動態(tài)創(chuàng)建屬性sayHi
obj.sayHi = function(){
return "Hi";
}
obj.sayHi();
假如我們使用Java語言,代碼可能會是這樣:
class Obj{
String name;
Function sayHi;
public Obj(Sting name, Function sayHi){
this.name = name;
this.sayHi = sayHi;
}
}
Obj obj = new Obj("an object", new Function());
弱類型
與Java,C/C++不同,Javascript是弱類型的,它的數(shù)據(jù)類型無需在聲明時指定,解釋器會根據(jù)上下文對變量進行實例化,比如:
//定義一個變量s,并賦值為字符串
var s = "text";
print(s);
//賦值s為整型
s = 12+5;
print(s);
//賦值s為浮點型
s = 6.3;
print(s);
//賦值s為一個對象
s = new Object();
s.name = "object";
print(s.name);
結果為:
text
17
6.3
Object
可見,Javascript的變量更像是一個容器,類似與Java語言中的頂層對象Object,它可以是任何類型,解釋器會根據(jù)上下文自動對其造型。
弱類型的好處在于,一個變量可以很大程度的進行復用,比如String類型的name字段,在被使用后,可以賦值為另一個Number型的對象,而無需重新創(chuàng)建一個新的變量。不過,弱類型也有其不利的一面,比如在開發(fā)面向對象的Javascript的時候,沒有類型的判斷將會是比較麻煩的問題,不過我們可以通過別的途徑來解決此問題。
解釋與編譯
通常來說,Javascript是一門解釋型的語言,特別是在瀏覽器中的Javascript,所有的主流瀏覽器都將Javascript作為一個解釋型的腳本來進行解析,然而,這并非定則,在Java版的Javascript解釋器rhino中,腳本是可以被編譯為Java字節(jié)碼的。
解釋型的語言有一定的好處,即可以隨時修改代碼,無需編譯,刷新頁面即可重新解釋,可以實時看到程序的結果,但是由于每一次都需要解釋,程序的開銷較大;而編譯型的語言則僅需要編譯一次,每次都運行編譯過的代碼即可,但是又喪失了動態(tài)性。
- javaScript的學習階段?
基礎語法結構
頁面瀏覽器操作
深入學習---數(shù)據(jù)交互、組件實現(xiàn)、框架使用等
javaScript出現(xiàn)的位置
行間
<input type="button" onclick="alert(1);" value="Click" />
優(yōu)點:直接,簡單明了
缺點:可讀性差,不易維護,不易擴展
內(nèi)嵌
<script>
alert(1)
</script>
優(yōu)點: js和html分離,可以復用代碼
缺點:代碼不能多文件使用
外鏈js文件
<script src="demo.js"></script>
優(yōu)點:多文件共用
js變量
我們?yōu)榱藚^(qū)分盒子,可以用BOX1,BOX2等名稱代表不同盒子,BOX1就是盒子的名字(也就是變量的名字)。
我們趕快給變量取個好名字吧!變量名字可以任意取,只不過取名字要遵循一些規(guī)則:
1.必須以字母、下劃線或美元符號開頭,后面可以跟字母、下劃線、美元符號和數(shù)字。如下:
正確: mysum mychar $numa1
錯誤: 6num //開頭不能用數(shù)字 %sum //開頭不能用除( $)外特殊符號,如(% + /等) sum+num //開頭中間不能使用除(_ $)外特殊符號,如(% + /等)
2.變量名區(qū)分大小寫,如:A與a是兩個不同變量。
3.不允許使用[JavaScript]關鍵字和保留字做變量名。
