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