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