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