JavaScript(簡稱(cheng)“JS”)是(shi)一(yi)種具有(you)函數優先的(de)輕(qing)量級,解釋(shi)型(xing)或即時編(bian)(bian)譯型(xing)的(de)編(bian)(bian)程(cheng)(cheng)語(yu)言。雖然它是(shi)作為開發Web頁面的(de)腳本語(yu)言而出名,但是(shi)它也被用(yong)到了很多(duo)非瀏覽器環境中,JavaScript基于原型(xing)編(bian)(bian)程(cheng)(cheng)、多(duo)范(fan)式(shi)的(de)動態腳本語(yu)言,并(bing)且支持面向(xiang)對象、命令式(shi)、聲明式(shi)、函數式(shi)編(bian)(bian)程(cheng)(cheng)范(fan)式(shi)。
JavaScript在(zai)1995年由(you)Netscape公司的(de)Brendan Eich,在(zai)網景(jing)導(dao)航(hang)者瀏覽器上首次設計實現而成。因(yin)為(wei)(wei)Netscape與Sun合作,Netscape管理層希望(wang)它外觀看起來像(xiang)Java,因(yin)此取名(ming)為(wei)(wei)JavaScript。但實際上它的(de)語法風格與Self及Scheme較為(wei)(wei)接近(jin)。
JavaScript的標準是ECMAScript。截至(zhi)2012年,所有(you)瀏(liu)覽器都完整(zheng)的支持(chi)(chi)ECMAScript 5.1,舊版本的瀏(liu)覽器至(zhi)少支持(chi)(chi)ECMAScript 3標準。2015年6月17日,ECMA國際組織發布(bu)了ECMAScript的第六版,該版本正(zheng)式名稱為(wei)ECMAScript 2015,但通常被(bei)稱為(wei)ECMAScript 6或(huo)者ES2015。
JavaScript最(zui)初(chu)由Netscape的(de)Brendan Eich設(she)計(ji),最(zui)初(chu)將(jiang)其(qi)腳本語言命(ming)(ming)名(ming)為LiveScript,后(hou)來Netscape在(zai)與(yu)Sun合作(zuo)之后(hou)將(jiang)其(qi)改名(ming)為JavaScript。JavaScript最(zui)初(chu)受Java啟發而開始設(she)計(ji)的(de),目的(de)之一就是“看上去像Java”,因此語法(fa)上有類似(si)之處,一些名(ming)稱(cheng)(cheng)和命(ming)(ming)名(ming)規范(fan)也借自(zi)Java,但JavaScript的(de)主(zhu)要設(she)計(ji)原則源自(zi)Self和Scheme。JavaScript與(yu)Java名(ming)稱(cheng)(cheng)上的(de)近似(si),是當時Netscape為了(le)營(ying)銷考慮與(yu)Sun微(wei)系統達成協議的(de)結(jie)果。微(wei)軟同時期也推出(chu)了(le)JScript來迎戰JavaScript的(de)腳本語言。
發展初期,JavaScript的(de)標準(zhun)(zhun)并未確(que)定,同期有(you)Netscape的(de)JavaScript,微(wei)軟(ruan)的(de)JScript和(he)CEnvi的(de)ScriptEase三(san)足鼎立。為(wei)了互用性,Ecma國際(前身為(wei)歐洲計(ji)算機制造(zao)商協會(hui)(hui))創建(jian)了ECMA-262標準(zhun)(zhun)(ECMAScript),兩(liang)者都屬于(yu)ECMAScript的(de)實現,盡管JavaScript作為(wei)給非程序人(ren)(ren)員的(de)腳本語言,而非作為(wei)給程序人(ren)(ren)員的(de)腳本語言來推廣和(he)宣傳,但是JavaScript具有(you)非常豐富的(de)特性。1997年,在ECMA(歐洲計(ji)算機制造(zao)商協會(hui)(hui))的(de)協調下,由Netscape、Sun、微(wei)軟(ruan)、Borland組成的(de)工作組確(que)定統一標準(zhun)(zhun):ECMA-262。完整的(de)JavaScript實現包(bao)含三(san)個部(bu)分:ECMAScript,文檔對(dui)象模(mo)型,瀏覽器(qi)對(dui)象模(mo)型。
JavaScript是甲骨文公司的注冊商標。Ecma國際(ji)以JavaScript為基礎制定了ECMAScript標準。JavaScript也可以用于其他場合,如服(fu)務器端(duan)編程(Node.js)。
ECMAScript,描(miao)述(shu)了該語(yu)言的語(yu)法(fa)和基(ji)本對象。
文檔(dang)對象模型(DOM),描述處理網頁(ye)內容的方法(fa)和接口。
瀏覽器對象模型(BOM),描述與瀏覽器進行交互的方法和接口。
JavaScript是(shi)(shi)一(yi)種屬于網(wang)絡(luo)的高級腳(jiao)本(ben)語言,已經被廣泛用(yong)于Web應用(yong)開發,常(chang)(chang)用(yong)來(lai)為網(wang)頁添加(jia)各式各樣(yang)的動態(tai)功(gong)能,為用(yong)戶提供更流暢美觀(guan)的瀏覽效果。通(tong)常(chang)(chang)JavaScript腳(jiao)本(ben)是(shi)(shi)通(tong)過嵌入在HTML中來(lai)實現自身的功(gong)能的。
是一(yi)種解(jie)釋性腳本語言(代碼不進行預編譯)。
主要(yao)用(yong)來向HTML(標準(zhun)通用(yong)標記語(yu)言下的一個應(ying)用(yong))頁面添加交互行為。
可以直接嵌入HTML頁(ye)面,但寫(xie)成單獨的(de)js文件(jian)有利(li)于結構和行為的(de)分(fen)離。
跨平臺特性,在絕(jue)大(da)多數瀏覽器的支持下,可以在多種平臺下運行(如Windows、Linux、Mac、Android、iOS等)。
JavaScript腳本(ben)語(yu)言同(tong)其他(ta)語(yu)言一(yi)樣,有(you)它自身的(de)基本(ben)數據類型(xing)(xing),表達(da)式和算(suan)術運(yun)算(suan)符及程(cheng)序的(de)基本(ben)程(cheng)序框(kuang)架。JavaScript提(ti)供了四種(zhong)基本(ben)的(de)數據類型(xing)(xing)和兩種(zhong)特殊數據類型(xing)(xing)用來處理數據和文字。而變(bian)量提(ti)供存放信(xin)息的(de)地方,表達(da)式則可以完成較復雜的(de)信(xin)息處理。
JavaScript腳(jiao)本語言具(ju)有以下特點:
(1)腳本語(yu)(yu)言(yan)(yan)。JavaScript是一(yi)種解釋型(xing)的腳本語(yu)(yu)言(yan)(yan),C、C++等語(yu)(yu)言(yan)(yan)先編譯后(hou)執行(xing),而JavaScript是在程(cheng)序的運行(xing)過程(cheng)中逐行(xing)進行(xing)解釋。
(2)基于對象(xiang)。JavaScript是一種基于對象(xiang)的(de)腳(jiao)本語言,它不僅可以(yi)創建對象(xiang),也能使用現有的(de)對象(xiang)。
(3)簡單。JavaScript語言(yan)中采用(yong)的是弱(ruo)類(lei)型的變量類(lei)型,對使用(yong)的數據類(lei)型未做出嚴格的要(yao)求(qiu),是基于Java基本語句和控制的腳本語言(yan),其設計簡單緊湊。
(4)動(dong)態性。JavaScript是一種采用事(shi)件(jian)驅動(dong)的(de)腳本(ben)語言,它不需要經過Web服務器(qi)就可以對(dui)用戶的(de)輸入(ru)做出響應。在訪(fang)問(wen)一個(ge)網頁時,鼠標在網頁中進(jin)行鼠標點擊或上下移(yi)(yi)、窗口(kou)移(yi)(yi)動(dong)等操作(zuo)JavaScript都可直接對(dui)這些事(shi)件(jian)給出相應的(de)響應。
(5)跨平臺性(xing)。JavaScript腳(jiao)本(ben)(ben)語(yu)言(yan)不依賴于操作系(xi)統,僅(jin)需要瀏覽(lan)器(qi)的(de)支持(chi)。因此(ci)一個JavaScript腳(jiao)本(ben)(ben)在(zai)編寫后可以帶到任意機(ji)器(qi)上(shang)使用,前提是機(ji)器(qi)上(shang)的(de)瀏覽(lan)器(qi)支持(chi)JavaScript腳(jiao)本(ben)(ben)語(yu)言(yan),JavaScript已(yi)被(bei)大多數的(de)瀏覽(lan)器(qi)所(suo)支持(chi)。不同(tong)于服(fu)務(wu)器(qi)端腳(jiao)本(ben)(ben)語(yu)言(yan),例(li)如PHP與ASP,JavaScript主要被(bei)作為客戶端腳(jiao)本(ben)(ben)語(yu)言(yan)在(zai)用戶的(de)瀏覽(lan)器(qi)上(shang)運行(xing),不需要服(fu)務(wu)器(qi)的(de)支持(chi)。所(suo)以在(zai)早期程序員比較傾向于使用JavaScript以減少對服(fu)務(wu)器(qi)的(de)負擔,而與此(ci)同(tong)時也帶來另一個問題,安(an)全(quan)性(xing)。
而隨著服(fu)務器的強壯,雖(sui)然(ran)程序員更喜歡(huan)運(yun)行于服(fu)務端(duan)的腳本以保(bao)證(zheng)安全(quan),但JavaScript仍然(ran)以其跨平臺、容易上手等優勢大(da)行其道。同(tong)時(shi),有些(xie)特殊功能(如AJAX)必須(xu)依賴JavaScript在(zai)客戶端(duan)進行支持。
JavaScript是一(yi)種腳(jiao)本語(yu)言,其(qi)源代碼(ma)在(zai)發往客戶端運行(xing)之前不需經過(guo)編譯(yi),而是將文本格式(shi)的字符代碼(ma)發送給(gei)瀏覽器(qi)由瀏覽器(qi)解釋運行(xing)。直譯(yi)語(yu)言的弱點是安全性較(jiao)差,而且在(zai)JavaScript中,如果一(yi)條運行(xing)不了,那么下(xia)面的語(yu)言也無法(fa)運行(xing)。而其(qi)解決辦(ban)法(fa)就是于使用try{}catch(){},其(qi)中,catch()中會傳入錯誤(wu)信息。
JavaScript被歸類(lei)為(wei)(wei)直譯(yi)(yi)語(yu)言(yan)(yan),因為(wei)(wei)主流(liu)的引擎都是(shi)每次運行(xing)時加(jia)載(zai)代碼(ma)并解(jie)譯(yi)(yi)。V8是(shi)將所有(you)代碼(ma)解(jie)譯(yi)(yi)后再(zai)開始運行(xing),其他引擎則是(shi)逐行(xing)解(jie)譯(yi)(yi)(SpiderMonkey會將解(jie)譯(yi)(yi)過(guo)的指(zhi)令暫存,以提高性(xing)(xing)能,稱為(wei)(wei)實時編譯(yi)(yi)),但由(you)于(yu)V8的核心部分(fen)多(duo)數用(yong)JavaScript撰寫(而SpiderMonkey是(shi)用(yong)C++),因此在不同(tong)的測試上(shang),兩者性(xing)(xing)能互有(you)優(you)劣。與(yu)其相對(dui)應的是(shi)編譯(yi)(yi)語(yu)言(yan)(yan),例如(ru)C語(yu)言(yan)(yan),以編譯(yi)(yi)語(yu)言(yan)(yan)編寫的程(cheng)序在運行(xing)之前(qian),必須(xu)經過(guo)編譯(yi)(yi),將代碼(ma)編譯(yi)(yi)為(wei)(wei)機器碼(ma),再(zai)加(jia)以運行(xing)。
注(zhu)釋://被(bei)稱(cheng)作(zuo)行注(zhu)釋,/**/中的內容會被(bei)注(zhu)釋。
JavaScript已經被(bei)Netscape公(gong)司提交給ECMA制定為標(biao)準(zhun),稱之為ECMAScript,標(biao)準(zhun)編號ECMA-262。最新版為ECMAScript 6。符合ECMA-262 3rd Edition標(biao)準(zhun)的實現有:
Microsoft公司(si)的JScript.
Mozilla的JavaScript-C(C語言實(shi)現),現名SpiderMonkey
Mozilla的Rhino(Java實現)
Digital Mars公司的DMDScript
Google公司(si)的(de)V8
WebKit
嵌入動態(tai)文本于HTML頁面。
對瀏(liu)覽器事(shi)件做出響應。
讀寫HTML元素。
在數據被提交到服務器之前驗證數據。
檢測訪客的瀏覽器信息。控(kong)制(zhi)cookies,包括創建(jian)和修改等。
基于Node.js技術進行服務(wu)器端編(bian)程。