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