JavaScript(簡稱“JS”)是一種具有函數(shù)優(yōu)先的輕量級(jí),解釋型或即時(shí)編譯型的編程語言。雖然它是作為開發(fā)Web頁面的腳本語言而出名,但是它也被用到了很多非瀏覽器環(huán)境中,JavaScript基于原型編程、多范式的動(dòng)態(tài)腳本語言,并且支持面向?qū)ο蟆⒚钍?、聲明式、函?shù)式編程范式。
JavaScript在1995年由Netscape公司的Brendan Eich,在網(wǎng)景導(dǎo)航者瀏覽器上首次設(shè)計(jì)實(shí)現(xiàn)而成。因?yàn)镹etscape與Sun合作,Netscape管理層希望它外觀看起來像Java,因此取名為JavaScript。但實(shí)際上它的語法風(fēng)格與Self及Scheme較為接近。
JavaScript的標(biāo)準(zhǔn)是ECMAScript。截至2012年,所有瀏覽器都完整的支持ECMAScript 5.1,舊版本的瀏覽器至少支持ECMAScript 3標(biāo)準(zhǔn)。2015年6月17日,ECMA國際組織發(fā)布了ECMAScript的第六版,該版本正式名稱為ECMAScript 2015,但通常被稱為ECMAScript 6或者ES2015。
JavaScript最初由Netscape的Brendan Eich設(shè)計(jì),最初將其腳本語言命名為LiveScript,后來Netscape在與Sun合作之后將其改名為JavaScript。JavaScript最初受Java啟發(fā)而開始設(shè)計(jì)的,目的之一就是“看上去像Java”,因此語法上有類似之處,一些名稱和命名規(guī)范也借自Java,但JavaScript的主要設(shè)計(jì)原則源自Self和Scheme。JavaScript與Java名稱上的近似,是當(dāng)時(shí)Netscape為了營銷考慮與Sun微系統(tǒng)達(dá)成協(xié)議的結(jié)果。微軟同時(shí)期也推出了JScript來迎戰(zhàn)JavaScript的腳本語言。
發(fā)展初期,JavaScript的標(biāo)準(zhǔn)并未確定,同期有Netscape的JavaScript,微軟的JScript和CEnvi的ScriptEase三足鼎立。為了互用性,Ecma國際(前身為歐洲計(jì)算機(jī)制造商協(xié)會(huì))創(chuàng)建了ECMA-262標(biāo)準(zhǔn)(ECMAScript),兩者都屬于ECMAScript的實(shí)現(xiàn),盡管JavaScript作為給非程序人員的腳本語言,而非作為給程序人員的腳本語言來推廣和宣傳,但是JavaScript具有非常豐富的特性。1997年,在ECMA(歐洲計(jì)算機(jī)制造商協(xié)會(huì))的協(xié)調(diào)下,由Netscape、Sun、微軟、Borland組成的工作組確定統(tǒng)一標(biāo)準(zhǔn):ECMA-262。完整的JavaScript實(shí)現(xiàn)包含三個(gè)部分:ECMAScript,文檔對(duì)象模型,瀏覽器對(duì)象模型。
JavaScript是甲骨文公司的注冊商標(biāo)。Ecma國際以JavaScript為基礎(chǔ)制定了ECMAScript標(biāo)準(zhǔn)。JavaScript也可以用于其他場合,如服務(wù)器端編程(Node.js)。
ECMAScript,描述了該語言的語法和基本對(duì)象。
文檔對(duì)象模型(DOM),描述處理網(wǎng)頁內(nèi)容的方法和接口。
瀏覽器對(duì)象模型(BOM),描述與瀏覽器進(jìn)行交互的方法和接口。
JavaScript是一種屬于網(wǎng)絡(luò)的高級(jí)腳本語言,已經(jīng)被廣泛用于Web應(yīng)用開發(fā),常用來為網(wǎng)頁添加各式各樣的動(dòng)態(tài)功能,為用戶提供更流暢美觀的瀏覽效果。通常JavaScript腳本是通過嵌入在HTML中來實(shí)現(xiàn)自身的功能的。
是一種解釋性腳本語言(代碼不進(jìn)行預(yù)編譯)。
主要用來向HTML(標(biāo)準(zhǔn)通用標(biāo)記語言下的一個(gè)應(yīng)用)頁面添加交互行為。
可以直接嵌入HTML頁面,但寫成單獨(dú)的js文件有利于結(jié)構(gòu)和行為的分離。
跨平臺(tái)特性,在絕大多數(shù)瀏覽器的支持下,可以在多種平臺(tái)下運(yùn)行(如Windows、Linux、Mac、Android、iOS等)。
JavaScript腳本語言同其他語言一樣,有它自身的基本數(shù)據(jù)類型,表達(dá)式和算術(shù)運(yùn)算符及程序的基本程序框架。JavaScript提供了四種基本的數(shù)據(jù)類型和兩種特殊數(shù)據(jù)類型用來處理數(shù)據(jù)和文字。而變量提供存放信息的地方,表達(dá)式則可以完成較復(fù)雜的信息處理。
JavaScript腳本語言具有以下特點(diǎn):
(1)腳本語言。JavaScript是一種解釋型的腳本語言,C、C++等語言先編譯后執(zhí)行,而JavaScript是在程序的運(yùn)行過程中逐行進(jìn)行解釋。
(2)基于對(duì)象。JavaScript是一種基于對(duì)象的腳本語言,它不僅可以創(chuàng)建對(duì)象,也能使用現(xiàn)有的對(duì)象。
(3)簡單。JavaScript語言中采用的是弱類型的變量類型,對(duì)使用的數(shù)據(jù)類型未做出嚴(yán)格的要求,是基于Java基本語句和控制的腳本語言,其設(shè)計(jì)簡單緊湊。
(4)動(dòng)態(tài)性。JavaScript是一種采用事件驅(qū)動(dòng)的腳本語言,它不需要經(jīng)過Web服務(wù)器就可以對(duì)用戶的輸入做出響應(yīng)。在訪問一個(gè)網(wǎng)頁時(shí),鼠標(biāo)在網(wǎng)頁中進(jìn)行鼠標(biāo)點(diǎn)擊或上下移、窗口移動(dòng)等操作JavaScript都可直接對(duì)這些事件給出相應(yīng)的響應(yīng)。
(5)跨平臺(tái)性。JavaScript腳本語言不依賴于操作系統(tǒng),僅需要瀏覽器的支持。因此一個(gè)JavaScript腳本在編寫后可以帶到任意機(jī)器上使用,前提是機(jī)器上的瀏覽器支持JavaScript腳本語言,JavaScript已被大多數(shù)的瀏覽器所支持。不同于服務(wù)器端腳本語言,例如PHP與ASP,JavaScript主要被作為客戶端腳本語言在用戶的瀏覽器上運(yùn)行,不需要服務(wù)器的支持。所以在早期程序員比較傾向于使用JavaScript以減少對(duì)服務(wù)器的負(fù)擔(dān),而與此同時(shí)也帶來另一個(gè)問題,安全性。
而隨著服務(wù)器的強(qiáng)壯,雖然程序員更喜歡運(yùn)行于服務(wù)端的腳本以保證安全,但JavaScript仍然以其跨平臺(tái)、容易上手等優(yōu)勢大行其道。同時(shí),有些特殊功能(如AJAX)必須依賴JavaScript在客戶端進(jìn)行支持。
JavaScript是一種腳本語言,其源代碼在發(fā)往客戶端運(yùn)行之前不需經(jīng)過編譯,而是將文本格式的字符代碼發(fā)送給瀏覽器由瀏覽器解釋運(yùn)行。直譯語言的弱點(diǎn)是安全性較差,而且在JavaScript中,如果一條運(yùn)行不了,那么下面的語言也無法運(yùn)行。而其解決辦法就是于使用try{}catch(){},其中,catch()中會(huì)傳入錯(cuò)誤信息。
JavaScript被歸類為直譯語言,因?yàn)橹髁鞯囊娑际敲看芜\(yùn)行時(shí)加載代碼并解譯。V8是將所有代碼解譯后再開始運(yùn)行,其他引擎則是逐行解譯(SpiderMonkey會(huì)將解譯過的指令暫存,以提高性能,稱為實(shí)時(shí)編譯),但由于V8的核心部分多數(shù)用JavaScript撰寫(而SpiderMonkey是用C++),因此在不同的測試上,兩者性能互有優(yōu)劣。與其相對(duì)應(yīng)的是編譯語言,例如C語言,以編譯語言編寫的程序在運(yùn)行之前,必須經(jīng)過編譯,將代碼編譯為機(jī)器碼,再加以運(yùn)行。
注釋://被稱作行注釋,/**/中的內(nèi)容會(huì)被注釋。
JavaScript已經(jīng)被Netscape公司提交給ECMA制定為標(biāo)準(zhǔn),稱之為ECMAScript,標(biāo)準(zhǔn)編號(hào)ECMA-262。最新版為ECMAScript 6。符合ECMA-262 3rd Edition標(biāo)準(zhǔn)的實(shí)現(xiàn)有:
Microsoft公司的JScript.
Mozilla的JavaScript-C(C語言實(shí)現(xiàn)),現(xiàn)名SpiderMonkey
Mozilla的Rhino(Java實(shí)現(xiàn))
Digital Mars公司的DMDScript
Google公司的V8
WebKit
嵌入動(dòng)態(tài)文本于HTML頁面。
對(duì)瀏覽器事件做出響應(yīng)。
讀寫HTML元素。
在數(shù)據(jù)被提交到服務(wù)器之前驗(yàn)證數(shù)據(jù)。
檢測訪客的瀏覽器信息??刂芻ookies,包括創(chuàng)建和修改等。
基于Node.js技術(shù)進(jìn)行服務(wù)器端編程。