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