JavaScript - 計算機(jī)編程語言
JavaScript(簡稱“JS”)?是一種具有函數(shù)優(yōu)先的輕量級,解釋型或即時編譯型的編程語言。雖然它是作為開發(fā)Web頁面的腳本語言而出名,但是它也被用到了很多非瀏覽器環(huán)境中,JavaScript?基于原型編程、多范式的動態(tài)腳本語言,并且支持面向?qū)ο蟆⒚钍?、聲明式、函?shù)式編程范式。
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。

產(chǎn)生背景
JavaScript最初由Netscape的Brendan?Eich設(shè)計,最初將其腳本語言命名為LiveScript,后來Netscape在與Sun合作之后將其改名為JavaScript。JavaScript最初受Java啟發(fā)而開始設(shè)計的,目的之一就是“看上去像Java”,因此語法上有類似之處,一些名稱和命名規(guī)范也借自Java,但JavaScript的主要設(shè)計原則源自Self和Scheme。JavaScript與Java名稱上的近似,是當(dāng)時Netscape為了營銷考慮與Sun微系統(tǒng)達(dá)成協(xié)議的結(jié)果。微軟同時期也推出了JScript來迎戰(zhàn)JavaScript的腳本語言。
發(fā)展初期,JavaScript的標(biāo)準(zhǔn)并未確定,同期有Netscape的JavaScript,微軟的JScript和CEnvi的ScriptEase三足鼎立。為了互用性,Ecma國際(前身為歐洲計算機(jī)制造商協(xié)會)創(chuàng)建了ECMA-262標(biāo)準(zhǔn)(ECMAScript),兩者都屬于ECMAScript的實現(xiàn),盡管JavaScript作為給非程序人員的腳本語言,而非作為給程序人員的腳本語言來推廣和宣傳,但是JavaScript具有非常豐富的特性。1997年,在ECMA(歐洲計算機(jī)制造商協(xié)會)的協(xié)調(diào)下,由Netscape、Sun、微軟、Borland組成的工作組確定統(tǒng)一標(biāo)準(zhǔn):ECMA-262。完整的JavaScript實現(xiàn)包含三個部分:ECMAScript,文檔對象模型,瀏覽器對象模型。
JavaScript是甲骨文公司的注冊商標(biāo)。Ecma國際以JavaScript為基礎(chǔ)制定了ECMAScript標(biāo)準(zhǔn)。JavaScript也可以用于其他場合,如服務(wù)器端編程(Node.js)。
主要功能
1.嵌入動態(tài)文本于HTML頁面。
2.對瀏覽器事件做出響應(yīng)。
3.讀寫HTML元素。
4.在數(shù)據(jù)被提交到服務(wù)器之前驗證數(shù)據(jù)。
5.檢測訪客的瀏覽器信息??刂芻ookies,包括創(chuàng)建和修改等。
6.基于Node.js技術(shù)進(jìn)行服務(wù)器端編程。
語言組成
ECMAScript,描述了該語言的語法和基本對象。
文檔對象模型(DOM),描述處理網(wǎng)頁內(nèi)容的方法和接口。
瀏覽器對象模型(BOM),描述與瀏覽器進(jìn)行交互的方法和接口。
運行模式
JavaScript是一種屬于網(wǎng)絡(luò)的高級腳本語言,已經(jīng)被廣泛用于Web應(yīng)用開發(fā),常用來為網(wǎng)頁添加各式各樣的動態(tài)功能,為用戶提供更流暢美觀的瀏覽效果。通常JavaScript腳本是通過嵌入在HTML中來實現(xiàn)自身的功能的。
是一種解釋性腳本語言(代碼不進(jìn)行預(yù)編譯)。
主要用來向HTML(標(biāo)準(zhǔn)通用標(biāo)記語言下的一個應(yīng)用)頁面添加交互行為。
可以直接嵌入HTML頁面,但寫成單獨的js文件有利于結(jié)構(gòu)和行為的分離。
跨平臺特性,在絕大多數(shù)瀏覽器的支持下,可以在多種平臺下運行(如Windows、Linux、Mac、Android、iOS等)。
JavaScript腳本語言同其他語言一樣,有它自身的基本數(shù)據(jù)類型,表達(dá)式和算術(shù)運算符及程序的基本程序框架。JavaScript提供了四種基本的數(shù)據(jù)類型和兩種特殊數(shù)據(jù)類型用來處理數(shù)據(jù)和文字。而變量提供存放信息的地方,表達(dá)式則可以完成較復(fù)雜的信息處理。
語言特點
JavaScript腳本語言具有以下特點:
- 1腳本語言。JavaScript是一種解釋型的腳本語言,C、C++等語言先編譯后執(zhí)行,而JavaScript是在程序的運行過程中逐行進(jìn)行解釋。
- 2基于對象。JavaScript是一種基于對象的腳本語言,它不僅可以創(chuàng)建對象,也能使用現(xiàn)有的對象。
- 3簡單。JavaScript語言中采用的是弱類型的變量類型,對使用的數(shù)據(jù)類型未做出嚴(yán)格的要求,是基于Java基本語句和控制的腳本語言,其設(shè)計簡單緊湊。
- 4動態(tài)性。JavaScript是一種采用事件驅(qū)動的腳本語言,它不需要經(jīng)過Web服務(wù)器就可以對用戶的輸入做出響應(yīng)。在訪問一個網(wǎng)頁時,鼠標(biāo)在網(wǎng)頁中進(jìn)行鼠標(biāo)點擊或上下移、窗口移動等操作JavaScript都可直接對這些事件給出相應(yīng)的響應(yīng)。
- 5跨平臺性。JavaScript腳本語言不依賴于操作系統(tǒng),僅需要瀏覽器的支持。因此一個JavaScript腳本在編寫后可以帶到任意機(jī)器上使用,前提是機(jī)器上的瀏覽器支?持JavaScript腳本語言,JavaScript已被大多數(shù)的瀏覽器所支持。不同于服務(wù)器端腳本語言,例如PHP與ASP,JavaScript主要被作為客戶端腳本語言在用戶的瀏覽器上運行,不需要服務(wù)器的支持。所以在早期程序員比較青睞于JavaScript以減少對服務(wù)器的負(fù)擔(dān),而與此同時也帶來另一個問題,安全性。
而隨著服務(wù)器的強(qiáng)壯,雖然程序員更喜歡運行于服務(wù)端的腳本以保證安全,但JavaScript仍然以其跨平臺、容易上手等優(yōu)勢大行其道。同時,有些特殊功能(如AJAX)必須依賴JavaScript在客戶端進(jìn)行支持。
編譯模式
JavaScript是一種腳本語言,其源代碼在發(fā)往客戶端運行之前不需經(jīng)過編譯,而是將文本格式的字符代碼發(fā)送給瀏覽器由瀏覽器解釋運行。直譯語言的弱點是安全性較差,而且在JavaScript中,如果一條運行不了,那么下面的語言也無法運行。而其解決辦法就是于使用try{}catch - {},其中,catch - 中會傳入錯誤信息。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
console.log - "a";//這是正確的 console.log - "b";//這是正確的 console.logg - "c";//這是錯誤的,并且到這里會停下來 console.log - "d";//這是正確的 console.log - "e";//這是正確的
/*解決辦法*/ try{console.log - "a";}catch - e{}//這是正確的 try{console.log - "b";}catch - e{}//這是正確的 try{console.logg - "c";}catch - e{}//這是錯誤的,但是到這里不會停下來,而是跳過 try{console.log - "d";}catch - e{}//這是正確的 try{console.log - "e";}catch - e{}//這是正確的 |
JavaScript被歸類為直譯語言,因為主流的引擎都是每次運行時加載代碼并解譯。V8是將所有代碼解譯后再開始運行,其他引擎則是逐行解譯(SpiderMonkey會將解譯過的指令暫存,以提高性能,稱為實時編譯),但由于V8的核心部分多數(shù)用JavaScript撰寫(而SpiderMonkey是用C++),因此在不同的測試上,兩者性能互有優(yōu)劣。與其相對應(yīng)的是編譯語言,例如C語言,以編譯語言編寫的程序在運行之前,必須經(jīng)過編譯,將代碼編譯為機(jī)器碼,再加以運行。
注釋://被稱作行注釋,/*?*/中的內(nèi)容會被注釋。
語言標(biāo)準(zhǔn)
JavaScript已經(jīng)被Netscape公司提交給ECMA制定為標(biāo)準(zhǔn),稱之為ECMAScript,標(biāo)準(zhǔn)編號ECMA-262。最新版為ECMAScript?6。符合ECMA-262?3rd?Edition標(biāo)準(zhǔn)的實現(xiàn)有:
Microsoft公司的JScript.
Mozilla的JavaScript-C(C語言實現(xiàn)),現(xiàn)名SpiderMonkey
Mozilla的Rhino(Java實現(xiàn))
Digital?Mars公司的DMDScript
Google公司的V8
WebKit
版本記錄
|
版本 |
發(fā)布日期 |
基于 |
Netscape Navigator |
Mozilla Firefox |
Internet Explorer |
Opera |
Safari |
Google Chrome |
|
1.0 |
1996年3月 |
2.0 |
||||||
|
1.1 |
1996年8月 |
3.0 |
3.0 |
|||||
|
1.2 |
1997年6月 |
4.0-4.05 |
||||||
|
1.3 |
1998年10月 |
ECMA-262 1 edition / ECMA-262 2 edition |
4.06-4.7x |
4.0 |
||||
|
1.4 |
Netscape Server |
|||||||
|
1.5 |
2000年11月 |
ECMA-262 3 edition |
6.0 |
1.0 |
5.5 - JScript 5.5, 6 - JScript 5.6, 7 - JScript 5.7, 8 - JScript 6 |
6.0, 7.0, 8.0, 9.0 |
||
|
1.6 |
2005年11月 |
1.5 + Array extras + Array and String generics + E4X |
1.5 |
3.0, 3.1 |
||||
|
1.7 |
2006年10月 |
1.6 + Pythonic generators + Iterators + let |
2.0 |
3.2, 4.0 |
1.0 |
|||
|
1.8 |
2008年6月 |
1.7 + Generator expressions + Expression closures |
3.0 |
11.50 |
||||
|
1.8.1 |
1.8 + Native JSON support + Minor Updates |
3.5 |
||||||
|
1.8.2 |
2009年6月22日 |
1.8.1 + Minor updates |
3.6 |
|||||
|
1.8.5?[11]? |
2010年7月27日 |
1.8.1 + ECMAScript 5 Compliance |
4 |
9 |
11.60 |
|||
|
ES2015 |
2015年 |
ECMAScript 2015 |
|
版本 |
說明 |
實現(xiàn) |
|
ECMAScript 1 |
標(biāo)準(zhǔn)化了JavaScript1.1的基本特性,并添加了一些新特性。沒有標(biāo)準(zhǔn)化switch語句和正則表達(dá)式。 |
由Netscape 4.5和IE 4實現(xiàn)。 |
|
ECMAScript 2 |
ECMA v1的維護(hù)版本,只添加了說明 |
由Netscape 4.5和IE 4實現(xiàn)。 |
|
ECMAScript 3 |
標(biāo)準(zhǔn)化了switch語句、異常處理和正則表達(dá)式。 |
由Mozilla、Netscape 6和IE 5.5實現(xiàn)。 |
|
ECMAScript 5 |
添加了“嚴(yán)格模式”。添加了 JSON 支持。添加了 String.trim - 。添加了 Array.isArray - 。添加了數(shù)組迭代方法。 |
|
|
ECMAScript 5.1 |
編輯改變 |
|
|
ECMAScript 2015 |
添加了 let 和 const添加了默認(rèn)參數(shù)值添加了 Array.find - 添加了 Array.findIndex - ? |
|
|
ECMAScript 2016 |
添加了指數(shù)運算符(**)。添加了 Array.prototype.includes |
|
|
ECMAScript 2017 |
添加了字符串填充。添加了新的 Object 屬性。添加了異步功能。添加了共享內(nèi)存。 |
|
|
ECMAScript 2018 |
添加了 rest / spread 屬性。添加了異步迭代。添加了 Promise.finally - 。增加 RegExp。 |
