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