JavaScript
JavaScript(一般縮寫為JS)係一間門基於原型摎頭等函式个多範式進階直譯程式語言,佢支援物件導向程式設計、指令式編程還有函式語言程式設計。佢提供方法來操控文字、陣列、日期摎正規表示式等。毋支援 I / O,比論講網路、儲存摎圖形這兜,毋過這兜都做得由厥个宿主環境提供支援。佢由 ECMA(歐洲電腦製造商協會)透過 ECMAScript 實作語言个標準化。目前嗬,佢分世界項个絕大多數網站使用,也分世界主流瀏覽器(Chrome、IE、Firefox、Safari 摎 Opera)所支援。
JavaScript 摎 Java 在名仔同語法上都蓋相像,毋過這兩個門程式語言對設計先生就會有當大無共樣。JavaScript 在語言設計項主要受著吔 Self(一種原型程式設計語言)摎 Scheme(一門函式語言程式設計語言)个影響,在語法結構項佢同 C 語言當相像(像係 if 條件語句、switch 句話、while 迴圈摎 do-while 迴圈這兜)。
對於客戶个人來講,JavaScript 一般分人實作為一門解釋語言,毋過這下佢已經做得分即時編譯(JIT)。 跈等 HTML 五和 CSS 三語言標準个推行,佢還做得拿來搞遊戲、桌面摎行動應用程式个開發,還有在伺服器端網路環境執行(像係 Node . js)。
歷史
發生在網路項
一九九三年,國家超級電腦應用中心(NCSA)發表了 NCSA Mosaic,這係最早流行个圖形介面網頁瀏覽器,佢在全球資訊網个普及上發揮了重要作用。一九九四年,Mosaic 个主要開發人員創立了 Netscape 公司,還過請了當多原來个哦 NCSA Mosaic 開發者用來開發Netscape Navigator,這隻公司个目標係取代 NCSA Mosaic 變做世界第一个網頁瀏覽器。在四隻月以內,已經佔吔四分之三个瀏覽器市場,還過成為一九九零年代網際網路个主要瀏覽器。
在網路發展个這恁多年,網頁淨做得係靜態个,缺乏在瀏覽器當中載入網頁過後个動態行為能力。公司个創始人馬克 ・ 安德森認為 HTML 需要一種膠水語言,分網頁設計師摎兼職程式設計師做得當該來使用佢來組裝圖片還有外掛个程式這兜元件,還過程式碼做得直接編寫在網頁標記裡肚。一九九五年,網景招募吔布蘭登 ・ 艾克,目標係愛同 Scheme 語言嵌入到位 NetscapeNavigator 瀏覽器當中。毋過早進前,網景已經摎昇陽合作,計劃在 Netscape Navigator 中嵌入來 Java 語言,這時節網景內部產生激烈个爭論,
網景公司管理層當遽決定,最好个方案係由艾克設計一種新个語言,厥个語法異像 Java,毋係異像 Scheme 或者其他現存个腳本語言。為著在其他个競爭提案當中捍衛 JavaScript 這個想法,公司需要有一個做得運作个原型。艾克在一九九五年五月淨花了十日个時間就摎原型設計出來了。頭下碼安名做Mocha,一九九五年九月仔在 Netscape Navigator二章零个 Beta 版本當中改名安做LiveScript,同年十二月,Netscape Navigator 二側零 Beta 三中部署个時節分人重新安名安到JavaScript。該央時網景公司摎昇陽電腦公司組成个開發聯盟為著愛這門語言坐著 Java 這個程式語言「熱詞」,故所摎佢臨時改名安做 JavaScript,下二擺這民眾對這門語言有當多誤解个原因之一。
Microsoft採納
微軟公司在一九九五年第一擺推出 Internet Explorer,引發了與 Netscape 个瀏覽器大戰。微軟著 Netscape Navigator 直譯器進行了逆向工程,建立吔 JScript,摎處於市場領導地位个網景產品共樣臺灣競爭。JScript 乜係一種 JavaScript 實作,這兩個 JavaScript 語言版本在瀏覽器兜共存意語言標準化个缺失。一開始發展,JavaScript 个標準並無確定,同期就有網景个 JavaScript 摎微軟个 JScript。除此之外,微軟也在網頁技術項加入吔蓋多專屬个物件,使得有當多網頁使用毋係微軟平台還有瀏覽器無法度正常顯示。這導致在瀏覽器大戰期間網頁設計者一般會摎「用 Netscape 做得達到最好个效果」抑係「用 IE 做得達到最好个效果」个標誌放啊在首頁。
標準化
一九九六年十一月,網景正式向 ECMA(歐洲電腦製造商協會)提交語言个標準。一九九七年六月,ECMA 以 JavaScript 語言為基礎制定了 ECMAScript 標準規範 ECMA 兩百六十二。JavaScript 成為了 ECMAScript 頭名最有名个實現之一。除此之外,ActionScript 摎 JScript 乜都係 ECMAScript 規範个實作語言。做你 JavaScript 做為分非程式人員个腳本語言,毋係做為分程式人員个程式語言來推廣摎宣傳,毋過好 JavaScript 有當豐富个特性。
概論
一般來講,完整个 JavaScript 包括以下幾下個部分:
- ECMAScript,描寫了該語言个語法還有基本物件;
- 文件東西模型(DOM), 描寫處理網頁內容个方法摎介面;
- 瀏覽器物件模型(BOM), 描述和瀏覽器進行互動个方法和介面。
JavaScript 个基本特點就像係下:
- 係一種解釋性腳本語言(代碼毋進行預譯个編譯);
- 主要用來向 HTML 頁面加添互動个行為;
- 做得直接嵌入來 HTML 頁面,寫做單獨个 js 檔案有利於結構摎行為个分離。
JavaScript 輒輒用來完成以下任務:
- 嵌入動態文字在 HTML 頁面;
- 對瀏覽器事件个作出回應;
- 讀寫 HTML 元素;
- 在資料分人提交著伺服器之前驗證資料;
- 檢測訪客个瀏覽器資訊;
- 控制 Cookie,包含建立摎修改這兜;
特性
無共樣於伺服器端腳本語言(像係 PHP 摎 ASP), JavaScript 主要係分做客戶端腳本語這就係講用者看著看个東西,無需要伺服器个支援。故所在早期程式設計師較喜歡 JavaScript 來減少對伺服器个負擔,在這個同時又在安全性頂項出現吔問題。跈等伺服器變到當強,這下个程式員還較好運行在伺服器頂項个指令用保證安全,毋過 JavaScript 佢還係跨平台、較會用手這兜優勢大行厥个路。同時,有兜仔特殊功能(像係 AJAX)必須愛依賴 JavaScript 在客戶端提供支援。跈等引擎(像係 V 八)還有框架(像係 Node . js)个發展,還有事件个驅動摎異步 IO 這兜特性,JavaScript 也分人漸漸仔用來編寫伺服器端程式。
以下係 ECMAScript 一般所實作个特性。
表示式摎結構化
JavaScript 支援當多 C 語言个結構化編程語法(像係 if 條件語句、while 迴圈、switch 句話摎do-while 迴圈這兜), 毋過作用个域係一個例外。JavaScript 在過去淨支援用 ` var ` 關鍵字來定義變數个函式作用域,毋過 ECMAScript 二千空一十五中加入吔 `let ` 關鍵字來支援塊級个作用域。這表示講 JavaScript 這下既經支援函式作用域又支援塊級作用域。JavaScript 還支援自動在語句尾添加分號,允許忽略語句末尾个分號。===弱形別===
Javascript 係弱型別个,這就係表示講變个做得分佢隱式轉換變做另外一個類型。
- 二元運算子 ` + ` 會摎兩隻運算元轉換為字串,除非兩個運算元都係數字類型。這係因為 ` + ` 乜表示字串連接操作;
- 二元運算子 ` - ` 會摎兩個運算元轉換做數字類型;
- 一個銀運算子,包含 ` + ` 摎 ` - `,都會摎運算元轉換為數字。
下列做變數轉換為字串个例仔:
- 字串類型不變;
- 數字會轉換做佢个字串表示;
- 陣列个元素會轉換做字串,過吔連接成透過著逗號 ` , ` 分隔个長字串;
- 其他个物件會轉換為 ` [objectObject] `,其中 ` Object ` 中間物件个建構函式名。
類型个隱藏轉換係 JavaScript 受著批評个原因之一,因為隱藏轉換增加咧規則个複雜度摎發生毋著个可能性。===動態化===
類型
JavaScript 係動態型別个語言,這个類型摎值毋係摎變數相關聯。比論講變數做得為數字,隨後又使得分人值係字串。JavaScript提供吔包含鴨仔型別在內个方法來檢測變數个類型。
執行个時節估值
Javascript 提供 ` eval ( ) ` 函式,做得在執行个時節直接執行 Javascript 句話。
因為原型个物件導向
在 JavaScript 中,物件係關聯陣列,透過原型(` prototype `,見下)進行擴大。每一隻字串鍵值提供物件个一隻屬性个名稱,做得透過使用點號(` obj . x `)或者使用方式个號碼(` obj ['x'] `)這兩種效果共樣个方式來存取。算係性體个時節做得添加、重定義或者刪除。有一隻物件个大部分係性个(包括來自原型繼承鏈个屬性)都做得透過 ` for . . . in ` 迴圈存取。
原型
JavaScript 使用原型,蓋多其他物件導向語言使用類用到實作繼承。原型使得在 JavaScript 中類比類別係基个物件導向特徵變成可能。
函式作為物件構造器
函式在 JavaScript 中兼做為物件建構函式。在函式个呼喊前加上 ` new ` 會建立一個原型个實例, 還過繼承來自建構函式个屬性摎方法(包括來自 ` Object ` 原型)。 ECMAScript 五提供 ` Object . create ` 方法,可以顯式个來建立實例毋係自動个從 ` Object ` 繼承。建構函式个 ` prototype ` 屬性決定了用於新物件个內部原型。做得透過修改建構函式个原型方法來為物件添加新个方法,乜做得修改 JavaScript 个內部物件个原型(像係 ` Array ` 抑係 ` Object `)。 就算做得恁呢做,毋過對 ` Object ` 原型進行修改毋係好个做法。因為大部分 JavaScript 東西都會對 ` Object ` 繼承,還過毋會希望佢原型分人修改。
函式做為方法
同大部分个物件導向个語言無共樣,在 JavaScript 中函式定義摎方法定義無明顯區別。唯一个區毋好在唩唩喊喊: 函式分人做為方法喊个時節,函式个 ` this ` 會指向喊這隻函式个物件。
傳統个類別定義摎使用格式
ECMAScript 二千空一十五中加入吔著 ` class `摎 ` extends ` 關鍵字个支援,使得類个定義摎繼承過較像其他个物件導向語言,同時也較容易使用。
函數式
在 JavaScript 中,函式係一等个,函式也分人認吔係東西。故所,函式做得有屬性摎方法,比將講 ` call ( ) ` 摎 ` bind ` 等。竇狀函式指定義於其他函式內部个函式,在外部函式分人喊个時節,竇狀函式會分人建立。另外,竇狀函式係一隻閉包,在外部函式个作用域(包含常數,局部變數同參數)都成為內部函式狀態个一部分,甚至在外部函式執行完成過後,內部函式个狀態還係會保留。JavaScript 同時乜支援匿名函式。
其它
執行時環境
JavaScript 一般依賴在執行个時節環境(像係瀏覽器)來提供物件同方法,指令做得透過這兜物件摎方法摎環境(像係網頁 DOM)進行互動。 佢還倚恃執行个時節來提供包或者係匯入指令碼(比將講 HTML 个 ` < script > ` 元素)个功能。這本身毋係語言功能,毋過大部分个人 JavaScript 實作當輒看著。
非同步
JavaScript 一般來講係單執行緒个。為著愛還過用著个來處理事件,JavaScript 程式輸入或者輸出个時節使用事件摎回呼函式執行。這表示講 JavaScript 做得在等資料庫查詢回資訊進前處理滑鼠單擊。ECMAScript 二千空一十五引入仔 ` Promise ` 用來處理非同步个事件,其他做得分傳統个回憶變到還較清楚。
變長參數
JavaScript 中函式參數个長度係做得變个,在函式个內部做得透過 ` arguments ` 物件存取這兜參數。
編程
JavaScript 係一門腳本語言,厥个原始碼在客戶執行前無需要經過編譯,係將文字格式个字元代碼發送分瀏覽器,由瀏覽器解釋執行。直譯語言个弱點係安全性較差,還過在 JavaScript 中,假使一條語句執做毋得,通常佢下背个語言也就無法度執行。解決辦法係用例外來處理 ` try { } catch ( ) { } ` ︰
JavaScript 分人轉做直譯个語言,因為主流个引擎都係逐擺執行時載入程式碼還解譯。V 八係同所有个程式碼解譯過後再過開始執行,其他引擎係一隻行解譯个(SpiderMonkey 會將解譯過个指令暫存,來提高效能,安做即時編譯)。 毋過因為 V 八个核心部份多數用JavaScript 撰寫(還過 SpiderMonkey 係用 C + +), 故所在無共樣个測試上,兩個效能互相有優劣。
相對應个係編譯語言(像係 C 語言), 以編譯語言編寫个程式在執行進前一定愛經過編譯,同程式碼編譯作為機器碼,正做得執行。
範例
以下係一個簡單个 JavaScript Hello World︰
抑係在瀏覽器个網址在使用當中 ` javascript : `,用互動个方式表示:
版本
JavaScript 最開發在一九九六年,分人使用於 Netscape Navigator 網頁瀏覽器。同年微軟在 Internet Explorer 發布了一個實作。因為商標个問題,這項實作分人安做 JScript。一九九七年,JavaScript 已經分網景公司提交分 ECMA 制定為標準,稱之為 ECMAScript,標準編號 ECMA 兩百六十二。使用顯式版本號聲明對語言个參照,做爲一項 Mozilla 个特性,已經在較新个版本當中分人徙除(盡無就係 Firefox 五十九)。 Firefox 四係最後一隻需要顯式地在參照時聲明確版本號个版本(一千八百空 . 五)。
下列表格个資訊因為幾下隻參考來源:
參見
- 腳本語言
- DMDScript
- ECMAScript
- JavaScript 引擎
- JScript
- AJAX
- JavaScript 函式庫
參考文獻
外部連結
- 有關 JavaScript 紹介 Mozilla Developer Network 上个資源