跳至內容

JavaScript

出自Taiwan Tongues 台語維基
於 2025年8月19日 (二) 22:00 由 TaiwanTonguesApiRobot留言 | 貢獻 所做的修訂 (從 JSON 檔案批量匯入)

(差異) ←上個修訂 | 已批准修訂 (差異) | 最新修訂 (差異) | 下個修訂→ (差異)

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 語言1875入去到 Netscape Navigator瀏覽器當中。但是閣較早,網景已經佮昇陽合作,計畫咧 Netscape Navigator 中楷入去 Java 語言,這時網景內部產生激烈的爭論,

網景公司管理層真緊決定,最佳的方案是由艾克設計一種新的語言,其語法類似 Java,毋是像 Scheme 抑是講其他現存的跤本語言。為著佇其他競爭提案中捍衛 JavaScript 這个想法,公司需要有一个會當運作的原型。艾克佇一九九五年五月干焦開十工時間就共原型設計出來矣。上蓋起初號名Mocha,一九九五年九月佇咧 Netscape Navigator 二嬸零的 Beta 版中改名做LiveScript,仝年十二月,Netscape Navigator 二孵空 Beta 三中部署的時予人重號名做JavaScript。彼當陣網景公司和昇陽電腦公司組成的開發聯盟為著欲予這个門語言鬥起來 Java 這个程式語言「熱詞」,所以欲共改名做 JavaScript,日後這成做大眾對這門語言有真濟誤解的原因之一。

微軟採納

微軟公司佇咧一九九五年頭一擺推出 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 定用來完成以下的任務:

  • 1875入去動態文字佇咧 HTML 頁面;
  • 對瀏覽器事件做出回應;
  • 讀寫 HTML 元素;
  • 佇資料予人提交著侍服器進前驗證資料;
  • 檢測訪客的瀏覽器資訊;
  • 控制 Cookie,包括建立佮修改等等;

特性

等服器捀跤本語言(如 PHP 和 ASP), JavaScript 主要予人做客戶捀跤本語言佇使用者的瀏覽器頂懸運行,無需要侍服器的支援。所以佇咧以早期程式設計師較佮意 JavaScript 以減少對侍服器的負擔,同齊發生佇安全性上出現問題。隨等隨就好服器變甲強大,這馬程式員閣較愛行踮服器捀的指令碼以保證安全,猶毋過 JavaScript 猶原用迒平台、好上手等等的優勢大行其道。同時,有一寡特殊的功能(如 AJAX)著愛依賴 JavaScript 佇咧客戶捀提供支援。隨著 ia̋n-jín(如 V 八)佮框殼(如 Node . js)的發展,猶閣有事件驅動佮異步 IO 等特性,JavaScript 嘛予人沓沓仔用來編寫侍服器捀程式。

以下是 ECMAScript 通常所實啦作的特性。

指令式佮結構化

JavaScript 支援真濟 C 語言的結構化編程語法(如 if 條件語句、while 迴箍、switch 語句佮 do-while 迴圈仔等), 但是作用域是一个例外。JavaScript 佇咧過去干焦支援使用 ` var ` 關鍵字來定義變數的函式作用域,猶毋過 ECMAScript 二千空一十五中加入了 ` let ` 關鍵字來支援角級作用域。這意味對 JavaScript 這馬既支援函式作用域閣支援塊級作用域。JavaScript 閣支援自動佇咧語句尾添加分號,允准忽略語句尾的分號。

弱型別

Javascript 是弱型別項,這意味對變數會當被隱式轉換做另外一个類型。

  • 二箍運算子 ` + ` 會共兩个運算元轉換做字串,除非兩个運算元攏為數字類型。這是因為 ` + ` 嘛表示字串連接操作;
  • 二箍運算子 `-` 會共兩个運算元轉換做數字類型;
  • 一箍運算子,包括講 ` + ` 和 `-`,攏會共運算元轉換做數字。

下列做變數轉換做字串的例:

  • 字串類型不變;
  • 數字會轉做其字串表示;
  • 陣列的元素會轉換做字串,然後連接做透過逗號 ` ,` 分隔的長字串;
  • 賰的物件會轉換做 ` [object Object] `,其中 ` 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 八是共所有的程式碼解譯了後才開始執行,其他 ia̋n-jín 是每走解譯的(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 ia̋n-jín
  • JScript
  • AJAX
  • JavaScript 函式庫==參考文獻==

外部連結

  • 關於著 JavaScript 介紹 Mozilla Developer Network 上的資源