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