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