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