From 43a5cac2eff22c21071800e13bef12af9d3a37d0 Mon Sep 17 00:00:00 2001 From: Florian Merz Date: Thu, 11 Feb 2021 13:12:08 +0100 Subject: unslug zh-tw: move --- .../web/css/border-image/border-image/index.html | 111 ++++++++ .../index.html" | 43 +++ .../index.html" | 11 + .../index.html" | 39 +++ .../throw_\350\252\236\346\263\225/index.html" | 34 +++ .../index.html" | 162 ++++++++++++ .../index.html" | 42 +++ .../index.html" | 9 + .../break_\350\252\236\346\263\225/index.html" | 27 ++ .../continue_\350\252\236\346\263\225/index.html" | 49 ++++ .../index.html" | 22 ++ .../for_\350\252\236\346\263\225/index.html" | 53 ++++ .../label_\350\252\236\346\263\225/index.html" | 22 ++ .../while_\350\252\236\346\263\225/index.html" | 38 +++ .../index.html" | 110 ++++++++ .../index.html" | 18 ++ .../index.html" | 27 ++ .../index.html" | 21 ++ .../index.html" | 58 ++++ .../index.html" | 40 +++ .../index.html" | 23 ++ .../index.html" | 10 + .../index.html" | 12 + .../index.html" | 184 +++++++++++++ .../index.html" | 34 +++ .../index.html" | 114 ++++++++ .../index.html" | 53 ++++ .../\347\271\274\346\211\277/index.html" | 146 ++++++++++ .../index.html" | 31 +++ .../index.html" | 14 + .../index.html" | 19 ++ .../index.html" | 24 ++ .../index.html" | 135 ++++++++++ .../index.html" | 293 +++++++++++++++++++++ .../index.html" | 14 + .../index.html" | 227 ++++++++++++++++ .../\351\227\234\346\226\274/index.html" | 47 ++++ .../index.html" | 21 ++ .../array_\347\211\251\344\273\266/index.html" | 151 +++++++++++ .../boolean_\347\211\251\344\273\266/index.html" | 12 + .../date_\347\211\251\344\273\266/index.html" | 82 ++++++ .../function_\347\211\251\344\273\266/index.html" | 45 ++++ .../math_\347\211\251\344\273\266/index.html" | 69 +++++ .../number_\347\211\251\344\273\266/index.html" | 80 ++++++ .../regexp_\347\211\251\344\273\266/index.html" | 9 + .../string_\347\211\251\344\273\266/index.html" | 88 +++++++ .../web/svg/\346\225\231\345\255\270/index.html" | 13 + 47 files changed, 2886 insertions(+) create mode 100644 files/zh-tw/orphaned/web/css/border-image/border-image/index.html create mode 100644 "files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/javascript_\346\246\202\350\246\201/index.html" create mode 100644 "files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/liveconnect_\346\246\202\350\246\201/index.html" create mode 100644 "files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\344\276\213\345\244\226\350\231\225\347\220\206\350\252\236\346\263\225/index.html" create mode 100644 "files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\344\276\213\345\244\226\350\231\225\347\220\206\350\252\236\346\263\225/throw_\350\252\236\346\263\225/index.html" create mode 100644 "files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\344\276\213\345\244\226\350\231\225\347\220\206\350\252\236\346\263\225/try...catch_\350\252\236\346\263\225/index.html" create mode 100644 "files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\345\207\275\346\225\270\347\232\204\345\256\232\347\276\251/index.html" create mode 100644 "files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\345\273\272\347\253\213\346\226\260\347\232\204\347\211\251\344\273\266/index.html" create mode 100644 "files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\345\276\252\347\222\260\350\252\236\346\263\225/break_\350\252\236\346\263\225/index.html" create mode 100644 "files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\345\276\252\347\222\260\350\252\236\346\263\225/continue_\350\252\236\346\263\225/index.html" create mode 100644 "files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\345\276\252\347\222\260\350\252\236\346\263\225/do...while_\350\252\236\346\263\225/index.html" create mode 100644 "files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\345\276\252\347\222\260\350\252\236\346\263\225/for_\350\252\236\346\263\225/index.html" create mode 100644 "files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\345\276\252\347\222\260\350\252\236\346\263\225/label_\350\252\236\346\263\225/index.html" create mode 100644 "files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\345\276\252\347\222\260\350\252\236\346\263\225/while_\350\252\236\346\263\225/index.html" create mode 100644 "files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\226\260\347\211\251\344\273\266\347\232\204\345\273\272\347\253\213/getter_\345\222\214_setter_\347\232\204\345\256\232\347\276\251/index.html" create mode 100644 "files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\226\260\347\211\251\344\273\266\347\232\204\345\273\272\347\253\213/index.html" create mode 100644 "files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\226\260\347\211\251\344\273\266\347\232\204\345\273\272\347\253\213/\344\275\277\347\224\250_this_\345\217\226\345\276\227\347\211\251\344\273\266\347\232\204\345\217\203\350\200\203/index.html" create mode 100644 "files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\226\260\347\211\251\344\273\266\347\232\204\345\273\272\347\253\213/\345\261\254\346\200\247\347\232\204\345\210\252\351\231\244/index.html" create mode 100644 "files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\226\260\347\211\251\344\273\266\347\232\204\345\273\272\347\253\213/\345\273\272\346\247\213\345\255\220\345\207\275\346\225\270\347\232\204\344\275\277\347\224\250/index.html" create mode 100644 "files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\226\260\347\211\251\344\273\266\347\232\204\345\273\272\347\253\213/\346\226\271\346\263\225\347\232\204\345\256\232\347\276\251/index.html" create mode 100644 "files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\226\260\347\211\251\344\273\266\347\232\204\345\273\272\347\253\213/\347\211\251\344\273\266\345\210\235\345\247\213\345\214\226\345\255\220\347\232\204\344\275\277\347\224\250/index.html" create mode 100644 "files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\226\260\347\211\251\344\273\266\347\232\204\345\273\272\347\253\213/\347\211\251\344\273\266\345\261\254\346\200\247\347\232\204\347\264\242\345\274\225/index.html" create mode 100644 "files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\226\260\347\211\251\344\273\266\347\232\204\345\273\272\347\253\213/\351\207\235\345\260\215\347\211\251\344\273\266\347\232\204\351\241\236\345\236\213\345\256\232\347\276\251\345\261\254\346\200\247/index.html" create mode 100644 "files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\255\243\350\246\217\350\241\250\351\201\224\345\274\217\346\250\241\345\274\217\347\232\204\347\267\250\345\257\253/index.html" create mode 100644 "files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\255\243\350\246\217\350\241\250\351\201\224\345\274\217\347\232\204\345\273\272\347\253\213/index.html" create mode 100644 "files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\255\243\350\246\217\350\241\250\351\201\224\345\274\217\347\232\204\351\201\213\347\224\250/\346\255\243\350\246\217\350\241\250\351\201\224\345\274\217\347\232\204\347\257\204\344\276\213/index.html" create mode 100644 "files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\347\211\251\344\273\266\347\232\204\346\223\215\344\275\234\350\252\236\346\263\225/index.html" create mode 100644 "files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\347\271\274\346\211\277/index.html" create mode 100644 "files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\350\201\267\345\223\241\347\232\204\344\276\213\345\255\220/index.html" create mode 100644 "files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\350\201\267\345\223\241\347\232\204\344\276\213\345\255\220/\347\211\251\344\273\266\347\232\204\345\261\254\346\200\247/index.html" create mode 100644 "files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\350\201\267\345\223\241\347\232\204\344\276\213\345\255\220/\347\211\251\344\273\266\347\232\204\345\261\254\346\200\247/\345\261\254\346\200\247\347\232\204\345\212\240\345\205\245/index.html" create mode 100644 "files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\350\201\267\345\223\241\347\232\204\344\276\213\345\255\220/\347\211\251\344\273\266\347\232\204\345\261\254\346\200\247/\345\261\254\346\200\247\347\232\204\347\271\274\346\211\277/index.html" create mode 100644 "files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\350\201\267\345\223\241\347\232\204\344\276\213\345\255\220/\351\232\216\345\261\244\347\232\204\345\273\272\347\253\213/index.html" create mode 100644 "files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\350\277\255\344\273\243\345\231\250\345\222\214\347\224\242\347\224\237\345\231\250/index.html" create mode 100644 "files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\201\213\347\256\227\345\255\220/\346\257\224\350\274\203\351\201\213\347\256\227\345\255\220/index.html" create mode 100644 "files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\226\211\345\214\205\347\232\204\351\201\213\347\224\250/index.html" create mode 100644 "files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\227\234\346\226\274/index.html" create mode 100644 "files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\240\220\345\205\210\345\256\232\347\276\251\347\232\204\345\207\275\346\225\270/parseint_\345\222\214_parsefloat_\345\207\275\346\225\270/index.html" create mode 100644 "files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\240\220\345\205\210\345\256\232\347\276\251\347\232\204\346\240\270\345\277\203\347\211\251\344\273\266/array_\347\211\251\344\273\266/index.html" create mode 100644 "files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\240\220\345\205\210\345\256\232\347\276\251\347\232\204\346\240\270\345\277\203\347\211\251\344\273\266/boolean_\347\211\251\344\273\266/index.html" create mode 100644 "files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\240\220\345\205\210\345\256\232\347\276\251\347\232\204\346\240\270\345\277\203\347\211\251\344\273\266/date_\347\211\251\344\273\266/index.html" create mode 100644 "files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\240\220\345\205\210\345\256\232\347\276\251\347\232\204\346\240\270\345\277\203\347\211\251\344\273\266/function_\347\211\251\344\273\266/index.html" create mode 100644 "files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\240\220\345\205\210\345\256\232\347\276\251\347\232\204\346\240\270\345\277\203\347\211\251\344\273\266/math_\347\211\251\344\273\266/index.html" create mode 100644 "files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\240\220\345\205\210\345\256\232\347\276\251\347\232\204\346\240\270\345\277\203\347\211\251\344\273\266/number_\347\211\251\344\273\266/index.html" create mode 100644 "files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\240\220\345\205\210\345\256\232\347\276\251\347\232\204\346\240\270\345\277\203\347\211\251\344\273\266/regexp_\347\211\251\344\273\266/index.html" create mode 100644 "files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\240\220\345\205\210\345\256\232\347\276\251\347\232\204\346\240\270\345\277\203\347\211\251\344\273\266/string_\347\211\251\344\273\266/index.html" create mode 100644 "files/zh-tw/orphaned/web/svg/\346\225\231\345\255\270/index.html" (limited to 'files/zh-tw/orphaned/web') diff --git a/files/zh-tw/orphaned/web/css/border-image/border-image/index.html b/files/zh-tw/orphaned/web/css/border-image/border-image/index.html new file mode 100644 index 0000000000..210a2663eb --- /dev/null +++ b/files/zh-tw/orphaned/web/css/border-image/border-image/index.html @@ -0,0 +1,111 @@ +--- +title: border-image +slug: Web/CSS/border-image/border-image +tags: + - CSS +--- +

摘要

+ +

CSS 屬性 border-image 可以讓你在元素的邊框上擺上圖片。這讓呈現看似很複雜的一個網頁的小單元簡單很多,它可以省最多九個元素。

+ +
緊告:官方的 CSS3 規範描述的 border-image 屬性在這個功能被凍結並出現在 Gecko 1.9.1 的釋出版之後改變很多。因此,這項功能的語法跟呈現方法很可能在未來 Gecko 的釋出版改變。特別是選擇性的 border-width 參數,它覆蓋既有 border-width 取值的這項特性已經從規範移除了,因此勢必也會在未來的 Gecko 被拿掉。
+ +

瀏覽器會顯示 border-image 指定的圖片而不是 {{ cssxref("border-style") }} 給的邊框樣式,但是若它的取值是 none 或是因某些理由無法顯示該圖片,瀏覽器就會顯示邊框樣式。border-image 會畫一個額外的背景圖片在原來 {{ cssxref("background-image") }} 指 定的背景圖片之上。

+ + + +

語法

+ +
none |
+  [ <圖片> [ <數字> | <百分比> ]{1,4} [/ <邊框寬度>{1,4}]? ] && [ stretch | repeat | round ]{0,2} 
+ +

取值

+ +
+
none
+
不顯示圖片,使用邊框樣式。
+
<圖片> (必填)
+
圖片值是一個 {{cssxref("<uri>")}},例: url(http://example.org/image.png)
+
<數> | <百分比> (必填)
+
一個、兩個、三個、四個分別代表從頂邊、右邊、底邊、左邊從圖片外圍到切圖線的距離,將圖片切為九塊:四個角、四個邊跟一個中間部份。
+
+ 一個值的話,該值用於圖片的全部四個邊。
+ 兩個值得話,值用於:一、頂邊與底邊 二、右邊與左邊。
+ 三個值的話,值用於:一、頂邊 二、右邊與左邊 三、底邊。
+ 四個值的情況,四個值分邊用在圖片的頂邊、右邊、底邊、左邊。
+
+ 在 Gecko 1.9.1 (Firefox 3.5) 圖片的中間那個部份會被當做元素的背景。這在未來的版本可能會改變。
+
+ 百分比 由圖片的長度/寬度計算。
+ 但表圖片的像素(若為點陣圖)或向量座標(若為 SVG)。
+
<邊框寬度> (選擇性)
+
如果斜線 / 出現在屬性值的話,一個、兩個、三個或是四個在它之後的取值會被當成是 {{ cssxref("border-width") }} 的取值使用。取值的順序如同 {{ cssxref("border-width") }} 。
+
stretch | round | repeat (選擇性)
+
一個或兩個關鍵字,指定邊上的圖片跟中間部份要如何縮放及鋪擺。
+ stretch (預設值)縮放該圖片,使其與配置大小相等。
+ round 鋪擺該圖片,但也縮放它使得被配置範圍鋪滿整數張該圖片。
+ repeat   直接鋪擺該圖片。
+ 第一個關鍵字的對象是頂邊,中間跟底邊的圖片,而第二個關鍵字的對象是左邊跟右邊的邊框。如果第二個不存在,則沿用第一個關鍵字的設定。如果兩者皆不存在,預設值為 stretch
+
+ +

範例

+ +

[這裡還需要一些活範例]

+ +
#header  { -moz-border-image: url(border.png) 27 27 27 27 round round; }
+
+.button  { -moz-border-image: url(button.png) 0 5 0 5; }
+
+.example { -moz-border-image: url(example.jpg) 3 4 6 8 / 10px 12px 14px 22px; }
+
+ +
/* 鮮見例,在 Firefox 3.5 下看起來像是完全伸展的 background-image */
+
+ div     { -moz-border-image: url(bgimage.png) 0; }
+
+ +

瀏覽器兼容性

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
瀏覽器最小版本支援
Internet Explorer------
Firefox (Gecko)3.5 (1.9.1)-moz-border-image
Opera10.5border-image
Safari (WebKit)3.0 (522)-webkit-border-image
+ +

規範

+ + + +

{{ languages( { "en": "en/CSS/-moz-border-image"} ) }}

diff --git "a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/javascript_\346\246\202\350\246\201/index.html" "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/javascript_\346\246\202\350\246\201/index.html" new file mode 100644 index 0000000000..9c74f992c9 --- /dev/null +++ "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/javascript_\346\246\202\350\246\201/index.html" @@ -0,0 +1,43 @@ +--- +title: JavaScript 概要 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/JavaScript_概要 +--- +

 

+

什麼是 JavaScript?

+

JavaScript 是跨平台、物件導向的 Script 語言。JavaScript 是小巧、輕量的語言,以單獨的語言來看 JavaScript 並不是很有用,不過 JavaScript 被設計成易於嵌入至其他產品和應用程式(如 Web 瀏覽器)。在宿主環境裡,JavaScript 可連接至由環境提供的可操控的物件。

+

核心 JavaScript 包含 ArrayDateMath 等等的物件核心組件,以及運算子、控制結構、語法等等的語言元素的核心組件。核心 JavaScript 可藉由追加額外的物件而為各種用途來做擴充,例如︰

+ +

藉由 JavaScript 的 LiveConnect 的機能,還可讓 Java 和 JavaScript 的代碼互相通訊。你可以從 JavaScript 生成 Java 物件,並存取他們的公開方法和欄位。也可以從 Java 存取 JavaScript 的物件、屬性、方法。

+

Netscape 發明 JavaScript,且 JavaScript 是初次用於 Netscape 瀏覽器。

+

JavaScript 和 Java

+

JavaScript 和 Java 在某些方面類似,但在很多方面完全不同。JavaScript 語言很像 Java,但沒有 Java 的靜態類型和強固的類型檢查。JavaScript 支援 Java 的表達結構和基本的流程控制結構。

+

相對於 Java 藉由宣告來建構類別的編譯時期系統,JavaScript 支援的執行時期系統,是建立在表示為數值、布林、字串值的少數幾個資料類型。JavaScript 使用以原型為基礎的物件模型,以代替更常見的以類別為基礎的物件模型。以原型為基礎的模型可提供動態繼承,也就是可對個別的物件變更繼承。JavaScript 亦支援無須特別宣告的函數。函數可以是物件的屬性,以寬鬆的類型執行方法。

+

JavaScript 與 Java 相比,是一種在形式上要自由很多的語言。你不必宣告所有的變數、類別或方法。你不必關心方法是不是公開、私有或保護,你也不必實作界面。變數、參數和函數返回的類型都不是明確的類型。

+

Java 是為了快速執行和類型的安全性而設計的一種以類別為基礎的程式語言。類型的安全性的意義,舉例來說,你不能把 Java 的整數類型強制轉換為物件類型,或有意的誤用 Java 的位元碼來存取私有記憶體。Java 的以類別為基礎的模型的意義是程式完全以類別及其方法所組成。Java 的類別階層和強固的類型通常需要緊密結合的物件階層。這些要求使 Java 的程式設計比 JavaScript 編寫要複雜的多。

+

相較之下,JavaScript 繼承了像 HyperTalk、dBASE 那樣的小型動態類型語言的精髓。這些 Script 語言提供工具給更廣大的使用者,因為他們的語法簡單、特殊的內建函數、對物件的建立的要求較少。

+ +
JavaScript Java
物件導向。物件的類型之間沒有區別。繼承是透過原型機制達成,屬性和方法可動態的加入至任何物件。 以類別為基礎。物件可細分為類別和實體,所有的繼承是透過類別階層達成。類別和實體不可動態的加入屬性或方法。
不必宣告變數的資料類型(動態類型)。 必須宣告變數的資料類型(靜態類型)。
不可自動的寫入硬碟。 不可自動的寫入硬碟。
+

表 1.1: JavaScript 和 Java 的比較
+
+JavaScript 和 Java 之間的不同的更進一步資訊,參閱 物件模型的細節 章節。

+

JavaScript 和 ECMAScript 規範

+

Netscape 發明 JavaScript,且 JavaScript 最先使用於 Netscape 瀏覽器。然而,Netscape 與 Ecma International - 把資訊和通訊系統標準化的歐洲協會(以前稱為 ECMA - European Computer Manufacturers Association;歐洲電腦製造商協會)合作發表一份以核心 JavaScript 為基礎的國際程式語言的標準化。JavaScript 的標準化版本,稱為ECMAScript,使所有支援標準的應用程式都能有同樣的行為。企業可以使用這份開放的語言標準開發他們的 JavaScript 實作產品。ECMAScript 標準的文件在 ECMA-262 規範中。

+

ECMA-262 標準也受到 ISO(International Organization for Standardization;國際標準化組織)認可成為 ISO-16262。你可以在 Mozilla 網站上找到 ECMA-262 的 PDF 版本。你也可以在 Ecma International 網站 上找到這份標準。ECMAScript 標準並未提到 Document Object Model (DOM),DOM 是由 World Wide Web Consortium (W3C) 所標準化。DOM 定義了在 Script 中處理 HTML 文件裡的物件的方法。

+

JavaScript 版本和 ECMAScript 修定版之間的關係

+

Netscape 與 Ecma International 緊密合作產生 ECMAScript 規範 (ECMA-262)。下表說明了 JavaScript 版本和 ECMAScript 版本間的關係。

+ +
JavaScript 的版本 與 ECMAScript 修定版之間的關係
JavaScript 1.1 ECMA-262 第一版是以 JavaScript 1.1 為基礎。
JavaScript 1.2 在 JavaScript 1.2 釋出時,ECMA-262 尚未完成。JavaScript 1.2 因為以下原因而不完全相容於 ECMA-262 第一版︰
  • Netscape 在 JavaScript 1.2 中開發了未考慮到 ECMA-262 的額外機能。
  • ECMA-262 加入兩個新的機能︰使用 Unicode 來國際化,統一所有平台的行為。JavaScript 1.2 的若干機能,如 Date 物件,依賴於平台,且使用平台規範的行為。

JavaScript 1.3

JavaScript 1.3 完全相容於 ECMA-262 第一版。

JavaScript 1.3 解決了 JavaScript 1.2 和 ECMA-262 的不一致,除了 == 和 != 以外,保留 JavaScript 1.2 所有的額外機能,以符合 ECMA-262。

JavaScript 1.4

JavaScript 1.4 完全相容於 ECMA-262 第一版。

在 JavaScript 1.4 釋出時,ECMAScript 規範的第三版仍尚未完成。

JavaScript 1.5 JavaScript 1.5 完全相容於 ECMA-262 第三版。
+

表 1.2: JavaScript 版本和 ECMAScript 版本

+
附註: ECMA-262 第二版由次要的編修和對第一版規範的錯誤修正所組成。Ecma International 的 TC39 工作群組目前正工作於 ECMAScript 第四版,第四版將會對應下一個  JavaScript 的釋出版 JavaScript 2.0。
+

Core JavaScript 參考 指出哪些語言機能對應於 ECMAScript。

+

JavaScript 將會不斷包含尚未成為 ECMAScript 規範的新機能;JavaScript 在提供額外機能時仍會相容於 ECMAScript。

JavaScript 文件與 ECMAScript 規範

+

ECMAScript 規範是實作 ECMAScript 的必要條件的匯整;如果你想知道 JavaScript 機能 ECMAScript 規範是否支援,規範就會很有用。如果你有意只使用 ECMAScript 支援的機能來編寫 JavaScript 代碼,你會需要檢閱 ECMAScript 規範。

+

ECMAScript 文件不是為了幫助 Script 程式員;應該使用 JavaScript 文件取得有關編寫 Script 的資訊。

+

JavaScript 和 ECMAScript 術語

+

ECMAScript 規範使用的術語和語法對 JavaScript 程式員來說可能會很陌生。儘管在 ECMAScript 裡的語言說明有所不同,語言本身仍然是一樣的。JavaScript 支援所有在 ECMAScript 規範中描述的機能。

+

JavaScript 的文件為 JavaScript 程式員適當的描述語言的表面。例如︰

+ +

{{ PreviousNext("Core_JavaScript_1.5_教學:關於", "Core_JavaScript_1.5_教學:值") }}

+

 

{{ languages( { "en": "en/Core_JavaScript_1.5_Guide/JavaScript_Overview", "es": "es/Gu\u00eda_JavaScript_1.5/Concepto_de_JavaScript", "fr": "fr/Guide_JavaScript_1.5/Aper\u00e7u_de_JavaScript", "ja": "ja/Core_JavaScript_1.5_Guide/JavaScript_Overview", "ko": "ko/Core_JavaScript_1.5_Guide/JavaScript_Overview", "pl": "pl/Przewodnik_po_j\u0119zyku_JavaScript_1.5/Przegl\u0105d_JavaScriptu", "zh-cn": "cn/Core_JavaScript_1.5_Guide/JavaScript\u603b\u89c8" } ) }}

diff --git "a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/liveconnect_\346\246\202\350\246\201/index.html" "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/liveconnect_\346\246\202\350\246\201/index.html" new file mode 100644 index 0000000000..985cfe5989 --- /dev/null +++ "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/liveconnect_\346\246\202\350\246\201/index.html" @@ -0,0 +1,11 @@ +--- +title: LiveConnect 概要 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/LiveConnect_概要 +--- +

 

+

LiveConnect 概要

+

LiveConnect 是應用程式介面的名稱,可提供 JavaScript 呼叫 Java 類別的方法的能力,反之亦然,也可以使用 Java 既有的基礎反向運用。

+
包裝器的運用
JavaScript 向 Java 的通訊
Packages 物件
Java 陣列的運用
包裝和類別的參考
char 類型的參數
在 JavaScript 中處理 Java 的例外
Java 向 JavaScript 的通訊
LiveConnect 類別的使用
資料類型的轉換
從 JavaScript 到 Java 的轉換
從 Java 到 JavaScript 的轉換
+
+

{{ PreviousNext("Core_JavaScript_1.5_教學:再談屬性的繼承:沒有多重繼承", "Core_JavaScript_1.5_教學:LiveConnect_概要:包裝器的運用") }}

+

{{ languages( { "en": "en/Core_JavaScript_1.5_Guide/LiveConnect_Overview", "es": "es/Gu\u00eda_JavaScript_1.5/Concepto_general_de_LiveConnect", "ja": "ja/Core_JavaScript_1.5_Guide/LiveConnect_Overview", "pl": "pl/Przewodnik_po_j\u0119zyku_JavaScript_1.5/Podgl\u0105d_klas_LiveConnect" } ) }}

diff --git "a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\344\276\213\345\244\226\350\231\225\347\220\206\350\252\236\346\263\225/index.html" "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\344\276\213\345\244\226\350\231\225\347\220\206\350\252\236\346\263\225/index.html" new file mode 100644 index 0000000000..9f369cbcac --- /dev/null +++ "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\344\276\213\345\244\226\350\231\225\347\220\206\350\252\236\346\263\225/index.html" @@ -0,0 +1,39 @@ +--- +title: 例外處理語法 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/例外處理語法 +--- +

例外處理語法

+

你可以使用 throw 語法來拋出例外,並使用 try...catch 語法來處理例外。

+

你也可以使用 try...catch 語法來處理 Java 的例外。參閱 在 JavaScript 中處理 Java 的例外從 JavaScript 向 Java 的通訊 取得資訊。

+ +

例外的類型

+

在此列出 JavaScript 中所有可以拋出的物件。不過並非所有的可拋出物件都以同樣方式產生。雖然只是非常普通的拋出數字或字串來表示錯誤,只使用其中幾個特別為某些用途而產生的例外的類型,往往會更加有效率︰

+ +
+

{{ PreviousNext("Core_JavaScript_1.5_教學:註解", "Core_JavaScript_1.5_教學:例外處理語法:throw_語法") }}

+
+

 

diff --git "a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\344\276\213\345\244\226\350\231\225\347\220\206\350\252\236\346\263\225/throw_\350\252\236\346\263\225/index.html" "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\344\276\213\345\244\226\350\231\225\347\220\206\350\252\236\346\263\225/throw_\350\252\236\346\263\225/index.html" new file mode 100644 index 0000000000..83230830e6 --- /dev/null +++ "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\344\276\213\345\244\226\350\231\225\347\220\206\350\252\236\346\263\225/throw_\350\252\236\346\263\225/index.html" @@ -0,0 +1,34 @@ +--- +title: throw 語法 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/例外處理語法/throw_語法 +--- +

throw 語法

+

使用 throw 語法來拋出例外。當你準備要拋出例外時,指定內含想要拋出的值的表達式︰

+
throw expression;
+
+

你可以拋出任何的表達式,而不只是特定類型的表達式。以下代碼拋出各式各樣的例外︰

+
throw "Error2";
+throw 42;
+throw true;
+throw {toString: function() { return "I'm an object!"; } };
+
+
+ 附註: 當拋出例外時,還可以指定物件。然後可以在 catch 區塊裡參考物件的屬性。以下範例建立 UserException 類型的物件 myUserException,並使用在拋出語法之中。
+
// 建立類型為 UserException 的物件
+function UserException (message)
+{
+  this.message=message;
+  this.name="UserException";
+}
+
+// 當用來當作字串時(例如,用於錯誤控制台),
+// 就把例外轉換成適當的字串。
+UserException.prototype.toString = function ()
+{
+  return this.name + ': "' + this.message + '"';
+}
+
+// 建立那一種物件類型的實體,並拋出
+throw new UserException("Value too high");
+
+

 

diff --git "a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\344\276\213\345\244\226\350\231\225\347\220\206\350\252\236\346\263\225/try...catch_\350\252\236\346\263\225/index.html" "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\344\276\213\345\244\226\350\231\225\347\220\206\350\252\236\346\263\225/try...catch_\350\252\236\346\263\225/index.html" new file mode 100644 index 0000000000..2bc150c6fc --- /dev/null +++ "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\344\276\213\345\244\226\350\231\225\347\220\206\350\252\236\346\263\225/try...catch_\350\252\236\346\263\225/index.html" @@ -0,0 +1,162 @@ +--- +title: try...catch 語法 +slug: >- + Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/例外處理語法/try...catch_語法 +--- +

try...catch 語法

+ +

try...catch 語法標記出一整塊需要測試的語句,並指定一個以上的回應方法,萬一有例外拋出時,try...catch 語句就會捕捉。

+ +

try...catch 語法由 try 區塊所組成,其中內含一個以上的語句,和零個以上的 catch 區塊,其中內含語句用來指明當例外在 try 區塊裡拋出時要做些什麼。也就是當你希望 try 區塊成功,但如果他不成功時,你會想要把控制權移交給 catch 區塊。如果任何在 try 區塊內部裡的語句(或者在 try 區塊內部呼叫的函數裡)拋出例外,控制權將立即轉移給 catch 區塊。如果沒有例外從 try 區塊裡拋出,就會跳過 catch 區塊。finally 區塊會在 trycatch 區塊執行之後才執行,但會在 try...catch 語法後面的語句之前執行。

+ +

以下範例使用 try...catch 語法。本範例呼叫函數,這個函數是用來在陣列裡根據傳給函數的值來查詢月份的名稱。如果傳入的值不符合月份的數字 (1-12),就會拋出值為 InvalidMonthNo 的例外,而且在 catch 區塊裡的語句會把 monthName 變數設定為 unknown

+ +
function getMonthName (mo) {
+    mo=mo-1; // 針對陣列索引調整月份的數字 (1=Jan, 12=Dec)
+    var months=new Array("Jan","Feb","Mar","Apr","May","Jun","Jul",
+          "Aug","Sep","Oct","Nov","Dec");
+    if (months[mo] != null) {
+       return months[mo]
+    } else {
+       throw "InvalidMonthNo"
+    }
+}
+
+try {
+// 需要測試的語句
+    monthName=getMonthName(myMonth) // 可拋出例外的函數
+}
+catch (e) {
+    monthName="unknown"
+    logMyErrors(e) // 把例外物件傳給錯誤處理器
+}
+
+ +

catch 區塊

+ +

你可以使用單一的 catch 區塊來處理所有在 try 區塊裡可能會產生的例外,或者你也可以使用分離的 catch 區塊,每一個皆各自處理特定的例外類型。

+ +

單一 catch 區塊
+ 使用單一 try...catch 語法的 catch 區塊針對在 try 區塊裡拋出的所有例外來執行錯誤處理的代碼。

+ +

單一的 catch 區塊語句如下︰

+ +
catch (catchID) {
+  statements
+}
+
+ +

catch 區塊所指定的識別子(前面語句裡的 catchID)持有由 throw 語法所指定的值。你可以使用這個識別子來取得有關於被拋出的例外的資訊。當進入 catch 區塊時,JavaScript 就會建立這個識別子。識別子只能在 catch 區塊的期間內持續作用。catch 區塊執行結束以後,識別子就不再能使用。

+ +

舉例來說,以下代碼會拋出例外。當例外出現的時候,控制權就轉移給 catch 區塊。

+ +
try {
+   throw "myException" // 產生例外
+}
+catch (e) {
+// 用來處理任何例外的語句
+   logMyErrors(e) // 把例外物件傳給錯誤處理器
+}
+
+ +

多重 catch 區塊
+ 單一的 try 語句可以對應複數個有前提條件的 catch 區塊,每一個皆可處理特定的例外的類型。於是,當指定的的例外被拋出時,就只會進入適當條件的 catch 區塊。你也可以針對所有未指定的例外,使用選用性的對應所有例外的 catch 區塊來作為語法裡最後一個的 catch 區塊。

+ +

舉例來說,以下函數呼叫三個其他的函數(已在別處定義了)來檢驗自己的參數。如果檢驗函數判斷出他所要檢驗的元素是無效的話,他就返回 0,導致呼叫者拋出對應的例外。

+ +
function getCustInfo(name, id, email)
+{
+   var n, i, e;
+
+   if (!validate_name(name))
+       throw "InvalidNameException"
+   else
+       n = name;
+       if (!validate_id(id))
+          throw "InvalidIdException"
+       else
+          i = id;
+       if (!validate_email(email))
+          throw "InvalidEmailException"
+       else
+          e = email;
+       cust = (n + " " + i + " " + e);
+       return (cust);
+}
+
+ +

有各種條件的 catch 區塊會把控制權安排給適當的例外處理器。

+ +
try {
+// 可以拋出三個例外的函數
+   getCustInfo("Lee", 1234, "lee@netscape.com")
+}
+
+catch (e if e == "InvalidNameException") {
+// 針對無效的名稱呼叫處理器
+   bad_name_handler(e)
+}
+
+catch (e if e == "InvalidIdException") {
+// 針對無效的 ID 呼叫處理器
+   bad_id_handler(e)
+}
+
+catch (e if e == "InvalidEmailException") {
+// 針對無效的電子郵件位址呼叫處理器
+   bad_email_handler(e)
+}
+
+catch (e){
+// 不知道該做什麼,就記在日誌裡
+   logError(e)
+}
+
+ +

finally 區塊

+ +

finally 區塊內含的語句,會在 try 和 catch 區塊執行以後、並在 try...catch 語法後面的語句之前來執行。無論有沒有被拋出的例外,finally 區塊都會執行。如果有被拋出的例外,即使沒有 catch 區塊來處理這些例外,還是會執行 finally 區塊裡的語句。

+ +

當出現例外時,你可以使用 finally 區塊來使你的 Script 優美的停止。舉例來說,你可能需要釋放 Script 所佔用的資源。以下範例開啟了檔案,並執行使用這個檔案(伺服端的 JavaScript 可讓你存取檔案)的語句。如果在開啟檔案時有例外被拋出,finally 區塊會在 Script 停止之前把檔案關閉。

+ +
openMyFile();
+try {
+   writeMyFile(theData); // 這裡有可能拋出錯誤
+}catch(e){
+   handleError(e); // 如果我們得到錯誤,就處理他
+}finally {
+   closeMyFile(); // 永遠會關閉這項資源
+}
+
+ +

try...catch 語法的嵌套

+ +

你可以嵌套一個以上的 try...catch 語法。如果有一個內部的 try...catch 語法沒有 catch 區塊,圍住這些 try...catch 語法的 catch 區塊就會被用來比對。

+ +

Error 物件的用處

+ +

根據錯誤的類型,你有可能使用 “name” 和 “message” 屬性來取得更多明確的訊息。“name” 提供錯誤的一般類別(例如,“DOMException” 或 “Error”),“message” 通常提供更為簡練的訊息,如此就能把錯誤物件轉換為字串來取得訊息。

+ +

如果你要拋出你自己的例外,以從這些屬性取得好處(例如,如果你的 catch 區塊不區分你自己的例外和系統的例外的話),你可以使用錯誤建構子。例如︰

+ +
function doSomethingErrorProne () {
+   if (ourCodeMakesAMistake()) {
+      throw (new Error('The message'));
+   }
+   else {
+      doSomethingToGetAJavascriptError();
+   }
+}
+....
+try {
+   doSomethingErrorProne();
+}
+catch (e) {
+   alert(e.name);// 警報 'Error'
+   alert(e.message); // 警報 'The message' 或 JavaScript 錯誤訊息
+}
+
+ +
+

{{ PreviousNext("Core_JavaScript_1.5_教學:例外處理語法:throw_語法", "Core_JavaScript_1.5_教學:函數的定義") }}

+
diff --git "a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\345\207\275\346\225\270\347\232\204\345\256\232\347\276\251/index.html" "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\345\207\275\346\225\270\347\232\204\345\256\232\347\276\251/index.html" new file mode 100644 index 0000000000..f56f796a03 --- /dev/null +++ "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\345\207\275\346\225\270\347\232\204\345\256\232\347\276\251/index.html" @@ -0,0 +1,42 @@ +--- +title: 函數的定義 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/函數的定義 +--- +

函數的定義

函數的定義由以下的關鍵字所組成︰

簡單的範例

舉例來說,以下代碼定義了一個簡單的函數,名為 square︰

function square(number) {
+  return number * number;
+}
+

函數 square 接收一個參數,稱為 number。函數由一個語句所組成,指示要求返回函數的參數的平方。return 語句用來指定函數返回的值。

return number * number
+

原始的參數是以值傳遞給函數。值是傳遞給函數,但是如果函數修改了參數的值,這項改變不會影響到全域或呼叫端函數裡的值。

如果你以物件(例如,非原始值,如陣列或使用者定義的物件)作為參數來傳遞,物件的參考會被傳遞給函數。這意味著如果函數修改了物件的屬性,函數之外也看得見這項改變,如以下範例所示︰

function myFunc(theObject) {
+  theObject.make="Toyota";
+}
+var mycar = {make:"Honda", model:"Accord", year:1998};
+var x=mycar.make;     // 返回 Honda
+myFunc(mycar);
+var y=mycar.make;     // 返回 Toyota(屬性已被函數修改)
+

注意,把新的物件代入給參數,在呼叫端將不會有任何的影響︰

function myFunc(theObject) {
+  theObject = {make:"Ford", model:"Focus", year:2006};
+}
+var mycar = {make:"Honda", model:"Accord", year:1998};
+var x=mycar.make;     // 返回 Honda
+myFunc(mycar);
+var y=mycar.make;     // 仍然返回 Honda
+

有條件的函數的定義

函數可以根據條件來作定義。例如,給以下的函數定義︰

if (num == 0)
+{
+  function myFunc(theObject) {
+    theObject.make="Toyota"
+  }
+}
+

myFunc 函數只會在變數 num 等於 0 時被定義。如果 num 不等於 0,函數就不會被定義,且任何企圖執行這個函數的嘗試都將會失敗。

函數的表達式

函數也可以在表達式裡來作定義。這稱為函數表達式。一般這類函數都是無名的,他沒有名稱也沒關係。例如,函數 square 可以定義成︰

var square = function(number) {return number * number};
+

當要傳遞函數作為參數給另一個函數時,這個作法會很方便。以下範例示範了 map 函數的定義,然後呼叫端使用無名函數作為第一個參數︰

function map(f,a) {
+  var result=new Array;
+  for (var i = 0; i != a.length; i++)
+    result[i] = f(a[i]);
+  return result;
+}
+

接著呼叫

map(function(x) {return x * x * x}, [0, 1, 2, 5, 10]);
+

返回 {{ mediawiki.external('0, 1, 8, 125, 1000') }}。

+
+

參閱

+

除了如前所述定義函數以外,你也可以定義 函數物件

+

方法就是和物件相關聯的函數。你將會在 第 8 章,「物件的運用」 中學到更多有關於物件和方法。{{ PreviousNext("Core_JavaScript_1.5_教學:例外處理語法:try...catch_語法", "Core_JavaScript_1.5_教學:函數的呼叫") }}

+

{{ languages( { "en": "en/Core_JavaScript_1.5_Guide/Defining_Functions", "fr": "fr/Guide_JavaScript_1.5/D\u00e9finition_de_fonctions", "ja": "ja/Core_JavaScript_1.5_Guide/Defining_Functions", "pl": "pl/Przewodnik_po_j\u0119zyku_JavaScript_1.5/Definiowanie_funkcji" } ) }}

diff --git "a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\345\273\272\347\253\213\346\226\260\347\232\204\347\211\251\344\273\266/index.html" "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\345\273\272\347\253\213\346\226\260\347\232\204\347\211\251\344\273\266/index.html" new file mode 100644 index 0000000000..faadc10f07 --- /dev/null +++ "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\345\273\272\347\253\213\346\226\260\347\232\204\347\211\251\344\273\266/index.html" @@ -0,0 +1,9 @@ +--- +title: 建立新的物件 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/建立新的物件 +--- +

 

+ +

This page was auto-generated because a user created a sub-page to this page.

+ +

 

diff --git "a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\345\276\252\347\222\260\350\252\236\346\263\225/break_\350\252\236\346\263\225/index.html" "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\345\276\252\347\222\260\350\252\236\346\263\225/break_\350\252\236\346\263\225/index.html" new file mode 100644 index 0000000000..ea6551a851 --- /dev/null +++ "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\345\276\252\347\222\260\350\252\236\346\263\225/break_\350\252\236\346\263\225/index.html" @@ -0,0 +1,27 @@ +--- +title: break 語法 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/循環語法/break_語法 +--- +

break 語法

+

使用 break 語法可以終止 loop、switch、label 語法。

+ +

break 語法如下︰

+
    +
  1. break;
  2. +
  3. break label;
  4. +
+

第一個語句形式會終止最內層的循環或 switch,第二個語句形式會終止指定標籤的語句。

+

範例
+ 在以下的範例中,反覆操作陣列裡的元素,直到找到某個索引的元素的值等於 theValue

+
for (i = 0; i < a.length; i++) {
+   if (a[i] == theValue)
+      break;
+}
+
+
+

{{ PreviousNext("Core_JavaScript_1.5_教學:循環語法:label_語法", "Core_JavaScript_1.5_教學:循環語法:continue_語法") }}

+
+

 

diff --git "a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\345\276\252\347\222\260\350\252\236\346\263\225/continue_\350\252\236\346\263\225/index.html" "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\345\276\252\347\222\260\350\252\236\346\263\225/continue_\350\252\236\346\263\225/index.html" new file mode 100644 index 0000000000..68f757d572 --- /dev/null +++ "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\345\276\252\347\222\260\350\252\236\346\263\225/continue_\350\252\236\346\263\225/index.html" @@ -0,0 +1,49 @@ +--- +title: continue 語法 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/循環語法/continue_語法 +--- +

continue 語法

+

continue 語法可用來重新開始 while、do-while、for、label 語法。

+ +

continue 語法如下︰

+
    +
  1. continue
  2. +
  3. continue label
  4. +
+

範例 1
+ 以下範例示範加上 continue 語法的 while 循環,continue 語法會在 i 值為 3 時執行。因此,n 的值依序為 1、3、7、12。

+
i = 0;
+n = 0;
+while (i < 5) {
+   i++;
+   if (i == 3)
+      continue;
+   n += i;
+}
+
+

範例 2
+ 已加上標籤的語法 checkiandj 內含已加上標籤的語法 checkj。如果遇到 continue,程式會終止 checkj 這一次的反覆過程,並開始下一次的反覆過程。每當遇到 continue,就會反覆執行 checkj 直到他的條件返回 false 為止。當返回 false 時,checkiandj 語句完成了餘數的計算,且 checkiandj 會反覆執行,直到他的條件返回為 false 為止。當返回 false 時,程式繼續執行 checkiandj 後面的語句。

+

如果 continue 有一個 checkiandj 標籤,程式就會從 checkiandj 語句的開始處繼續執行。

+
checkiandj :
+   while (i < 4) {
+      document.write(i + "<br/>");
+      i += 1;
+      checkj :
+         while (j > 4) {
+            document.write(j + "<br/>");
+            j -= 1;
+            if ((j % 2) == 0)
+               continue checkj;
+            document.write(j + " is odd.<br/>");
+         }
+      document.write("i = " + i + "<br/>");
+      document.write("j = " + j + "<br/>");
+   }
+
+
+

{{ PreviousNext("Core_JavaScript_1.5_教學:循環語法:break_語法", "Core_JavaScript_1.5_教學:物件的操作語法") }}

+
+

 

diff --git "a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\345\276\252\347\222\260\350\252\236\346\263\225/do...while_\350\252\236\346\263\225/index.html" "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\345\276\252\347\222\260\350\252\236\346\263\225/do...while_\350\252\236\346\263\225/index.html" new file mode 100644 index 0000000000..5091d476fd --- /dev/null +++ "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\345\276\252\347\222\260\350\252\236\346\263\225/do...while_\350\252\236\346\263\225/index.html" @@ -0,0 +1,22 @@ +--- +title: do...while 語法 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/循環語法/do...while_語法 +--- +

do...while 語法

+

do...while 語法會反覆執行直到指定條件的求值結果為 false 為止。do...while 語法如下︰

+
do
+   statement
+while (condition);
+
+

statement 會在檢測條件之前就先執行一次。若要執行多個語句,就使用區塊語法({ ... })把語句群組化。如果 condition 為 true,就會再執行一次語句。每回執行以後,就會檢測條件。當條件為 false 時,就停止執行並把控制權轉移給 do...while 後面的語句。

+

範例
+ 在以下範例中,do 循環至少會反覆執行一次,並一直反覆到 i 不再小於 5 為止。

+
do {
+   i += 1;
+   document.write(i);
+} while (i < 5);
+
+
+

{{ PreviousNext("Core_JavaScript_1.5_教學:循環語法:for_語法", "Core_JavaScript_1.5_教學:循環語法:while_語法") }}

+
+

 

diff --git "a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\345\276\252\347\222\260\350\252\236\346\263\225/for_\350\252\236\346\263\225/index.html" "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\345\276\252\347\222\260\350\252\236\346\263\225/for_\350\252\236\346\263\225/index.html" new file mode 100644 index 0000000000..8978b7ed27 --- /dev/null +++ "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\345\276\252\347\222\260\350\252\236\346\263\225/for_\350\252\236\346\263\225/index.html" @@ -0,0 +1,53 @@ +--- +title: for 語法 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/循環語法/for_語法 +--- +

for 語法

+

for 循環反覆執行直到指定的條件的求值為 false 為止。JavaScript 的 for 循環和 Java 和 C 的 for 循環很類似。for 語法如下︰

+
for ([initialExpression]; [condition]; [incrementExpression])
+   statement
+
+

執行 for 循環時,會執行以下步驟︰

+
    +
  1. 執行初始化表達式 initialExpression。這個表達式通常會初始化為 1 以上的計數器,不過也可以是任意複雜程度的表達式。也可以在表達式裡宣告變數。
  2. +
  3. condition 表達式求值。如果 condition 的值為 true,就會執行循環語法。如果 condition 的值為 false,就終止 for 循環。如果完全省略 condition 表達式,條件就會被代入為 true。
  4. +
  5. 執行 statement。若要執行多個語句,就使用區塊語法({ ... })把這些語句群組化。
  6. +
  7. 執行更新表達式 incrementExpression,並回到第 2 步驟。
  8. +
+

範例
+ 以下函數內含 for 語法,計數至下拉式選單的已選擇選項的數目為止(Select 物件允許複選)。for 語法宣告變數 i 並以 0 初始化。他會檢驗 i 是否小於 Select 物件的選項數目,持續執行 if 語句,並在每一次循環之後以 1 遞增 i

+
<script type="text/javascript">//<![CDATA[
+
+function howMany(selectObject) {
+   var numberSelected = 0;
+   for (var i = 0; i < selectObject.options.length; i++) {
+      if (selectObject.options[i].selected)
+         numberSelected++;
+   }
+   return numberSelected;
+}
+
+//]]></script>
+<form name="selectForm">
+   <p>
+      <strong>Choose some music types, then click the button below:</strong>
+      <br/>
+      <select name="musicTypes" multiple="multiple">
+         <option selected="selected">R&B</option>
+         <option>Jazz</option>
+         <option>Blues</option>
+         <option>New Age</option>
+         <option>Classical</option>
+         <option>Opera</option>
+      </select>
+   </p>
+   <p>
+      <input type="button" value="How many are selected?"
+         onclick="alert ('Number of options selected: ' + howMany(document.selectForm.musicTypes))"/>
+   </p>
+</form>
+
+
+

{{ PreviousNext("Core_JavaScript_1.5_教學:循環語法", "Core_JavaScript_1.5_教學:循環語法:do...while_語法") }}

+
+

 

diff --git "a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\345\276\252\347\222\260\350\252\236\346\263\225/label_\350\252\236\346\263\225/index.html" "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\345\276\252\347\222\260\350\252\236\346\263\225/label_\350\252\236\346\263\225/index.html" new file mode 100644 index 0000000000..8b63254ac1 --- /dev/null +++ "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\345\276\252\347\222\260\350\252\236\346\263\225/label_\350\252\236\346\263\225/index.html" @@ -0,0 +1,22 @@ +--- +title: label 語法 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/循環語法/label_語法 +--- +

label 語法

+

label 提供識別子作為語法,可讓你的程式的任何一處都能參考得到。舉例來說,你可以使用標籤來標識循環,然後使用 breakcontinue 語法來指示程式是否要中斷循環或繼續執行。

+

label 語法如下︰

+
label :
+   statement
+
+

label 的值可以是任意的 JavaScript 識別子,只要不是保留字的話都可以使用。使用標籤來標識的 statement 可以是任意的語句。

+

範例
+ 在以下範例中,標籤 markLoop 標識了 while 循環。

+
markLoop:
+while (theMark == true)
+   doSomething();
+}
+
+
+

{{ PreviousNext("Core_JavaScript_1.5_教學:循環語法:while_語法", "Core_JavaScript_1.5_教學:循環語法:break_語法") }}

+
+

 

diff --git "a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\345\276\252\347\222\260\350\252\236\346\263\225/while_\350\252\236\346\263\225/index.html" "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\345\276\252\347\222\260\350\252\236\346\263\225/while_\350\252\236\346\263\225/index.html" new file mode 100644 index 0000000000..76beeaafeb --- /dev/null +++ "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\345\276\252\347\222\260\350\252\236\346\263\225/while_\350\252\236\346\263\225/index.html" @@ -0,0 +1,38 @@ +--- +title: while 語法 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/循環語法/while_語法 +--- +

while 語法

+

while 語法會執行他的語句,只要指定的條件的求值結果為 true。while 語法如下︰

+
while (condition)
+   statement
+
+

如果條件變成 false,就停止執行循環內部的 statement,並把控制權移交給循環後面的語句。

+

條件的測試會發生在執行循環裡的 statement 之前。如果返回的條件為 true,就會執行 statement,並再次測試條件。如果返回的條件為 false,就停止執行並把控制權移交給 while 後面的語句。

+

若要執行多個語句,就使用區塊語法({ ... })把這些語句群組化。

+

範例 1
+ 以下 while 循環會一直反覆直到 n 小於 3 為止︰

+
n = 0;
+x = 0;
+while (n < 3) {
+   n++;
+   x += n;
+}
+
+

每一次的反覆,循環便會遞增 n 並且把 n 的值代入給 x。因此,xn 持有下列的值︰

+ +

第三次的循環完成以後,條件 n < 3 不再為 true,所以終止循環。

+

範例 2
+ 應避免無限循環。確認循環裡的條件最終一定會變成 false。否則循環永遠不會終止。下面的 while 循環裡的語句將會永遠執行下去,因為條件永遠不會變成 false︰

+
while (true) {
+   alert("Hello, world");
+}
+
+
+

{{ PreviousNext("Core_JavaScript_1.5_教學:循環語法:do...while_語法", "Core_JavaScript_1.5_教學:循環語法:label_語法") }}

+
+

 

diff --git "a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\226\260\347\211\251\344\273\266\347\232\204\345\273\272\347\253\213/getter_\345\222\214_setter_\347\232\204\345\256\232\347\276\251/index.html" "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\226\260\347\211\251\344\273\266\347\232\204\345\273\272\347\253\213/getter_\345\222\214_setter_\347\232\204\345\256\232\347\276\251/index.html" new file mode 100644 index 0000000000..222529aa18 --- /dev/null +++ "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\226\260\347\211\251\344\273\266\347\232\204\345\273\272\347\253\213/getter_\345\222\214_setter_\347\232\204\345\256\232\347\276\251/index.html" @@ -0,0 +1,110 @@ +--- +title: Getter 和 Setter 的定義 +slug: >- + Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/新物件的建立/Getter_和_Setter_的定義 +--- +

 

+ +

Getter 和 Setter 的定義

+ +

Getter 是用來取得指定屬性的值的方法。Setter 是用來設定指定屬性的值的方法。你可以在所有預先定義的核心物件或使用者定義的物件(這類可支援新屬性的附加)中定義 Getter 和 Setter。為了定義 Getter 和 Setter,需要使用物件的字面表達語法。

+ +

自 JavaScript 1.8.1 起,在設定物件和陣列裡的初始化子的屬性時,不再可以呼叫 Setter。

+ +

以下的 JS shell 會話說明了 Getter 和 Setter 是如何在使用者定義的物件 o 裡運作的。JS shell 是一種應用程式,可讓開發者在分批模式或互動性的測試 JavaScript 代碼。

+ +
js> var o = {a:7, get b() {return this.a+1;}, set c(x) {this.a = x/2}};
+[object Object]
+js> o.a;
+7
+js> o.b;
+8
+js> o.c = 50;
+js> o.a;
+25
+
+ +

o 物件的屬性為︰

+ + + +

另一種(Mozilla 限定)表示成一行的方式,也支援在物件的屬性上(如 "foo-bar")設定 Getter 和 Setter,其中物件需要加上引號。

+ +
var o = {a:7, 'b' getter:function () {return this.a + 1;}, c setter:function (x) {this.a = x / 2;}};
+ +

請注意定義在物件的字面表達中的 Getter 和 Setter 的函數名稱使用的〝[gs]et property()〞(有別於稍後介紹的 __define[GS]etter__)並不是 Getter 本身的名稱,即使 [gs]et propertyName(){ } 語法可能會使你把他誤解成別的事物。若要命名在 Getter 或 Setter 之中的函數的名稱,就使用〝[gs]et property()〞語法,把 Getter 的名稱放在 get 或 set 後面,然後在其後面放上函數的名稱。下面的範例示範如何在物件的字面表達中命名 Getter 函數︰

+ +
var objects = [{get a b(){return 1}},
+               {a getter:function b(){return 1}},
+               {"a" getter:function b(){return 1}}];
+
+for (var i=0; i<objects.length; ++i)
+    print(objects[i].__lookupGetter__("a")) // 為每一個 Getter 輸出 "function b(){return 1}"。
+
+ +

這次 JavaScript shell 會話說明 Getter 和 Setter 如何擴充 Date 的原型,給所有預先定義的 Date 類別的實體加入 year 屬性。他使用了 Date 類別中既存的 getFullYear 以及 setFullYear 方法,以支援 year 屬性的 Getter 和 Setter。

+ +

以下語句針對 year 屬性定義 Getter 和 Setter︰

+ +
js> var d = Date.prototype;
+js> d.__defineGetter__("year", function() { return this.getFullYear(); });
+js> d.__defineSetter__("year", function(y) { this.setFullYear(y); });
+
+ +

以下語句在 Date 物件中使用 Getter 和 Setter︰

+ +
js> var now = new Date;
+js> print(now.year);
+2000
+js> now.year = 2001;
+987617605170
+js> print(now);
+Wed Apr 18 11:13:25 GMT-0700 (Pacific Daylight Time) 2001
+
+ +
在 JavaScript 1.5 的開發期間,這些是內含用來在既存的物件上定義新的 Getter 或 Setter 的 getter =setter = 表達式的摘要,這些語法現在已被廢棄,將會在目前的 JS 1.5 引擎中引發警告,在未來的版本中將會變成語法錯誤。這些都應該要避免。
+ +

概要

+ +

原則上,Getter 和 Setter 可以

+ + + +

當要使用 物件的初始化子 定義 Getter 和 Setter 的時候,你所需要做的是在 Getter 方法的前面加上 get 以及在 Setter 方法的前面加上 set。當然,Getter 方法不可以接受參數,Setter 方法則只能有一個參數(用來設定的新值)。舉例如下︰

+ +
o = {
+  a:7,
+  get b() { return this.a+1; },
+  set c(x) { this.a = x/2; }
+};
+
+ +

也可以在物件建立之後的任何時間點上,使用兩個稱作 __defineGetter____defineSetter__ 的特殊方法,把 Getter 和 Setter 加到物件裡。這兩個方法需要 Getter 或 Setter 的名稱以字串的形式作為第一個參數。第二個參數是用來呼叫的函數作為 Getter 或 Setter。舉例如下(延用之前的例子):

+ +
o.__defineGetter__("b", function() { return this.a+1; });
+o.__defineSetter__("c", function(x) { this.a = x/2; });
+
+ +

這兩種形式的選擇,取決於你的程式設計風格以及手上的工作。如果你已經在定義原型的時候,使用了物件的初始化子,或許你在大多數時候都會選擇第一種形式。這種形式更加密集且自然。然而,如果你需要稍後加入 Getter 和 Setter – 因為你並未編寫原型或實際的物件 – 這時第二種形式就是唯一可行的形式。第二種形式或許是 JavaScript 的動態性質中最佳的表現 – 但這會使代碼難以閱讀和理解。

+ +
+

在 Firefox 3.0 以前,Getter 和 Setter 並不支援 DOM 元素。舊版本的 Firefox 會默默的出錯。如果需要這些例外,修改 HTMLElement 的原型 (HTMLElement.prototype.__define{{ mediawiki.external('SG') }}etter__),並且避免拋出例外。

+在 Firefox 3.0 中,在已定義的原型上定義 Getter 或 Setter 將會拋出例外。必須事先刪除這些屬性。舊版本的 Firefox 則沒有這個問題。
+ +

參閱

+ + + +

{{ PreviousNext("Core_JavaScript_1.5_教學:新物件的建立:使用_this_取得物件的參考", "Core_JavaScript_1.5_教學:新物件的建立:屬性的刪除") }}

diff --git "a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\226\260\347\211\251\344\273\266\347\232\204\345\273\272\347\253\213/index.html" "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\226\260\347\211\251\344\273\266\347\232\204\345\273\272\347\253\213/index.html" new file mode 100644 index 0000000000..687b428275 --- /dev/null +++ "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\226\260\347\211\251\344\273\266\347\232\204\345\273\272\347\253\213/index.html" @@ -0,0 +1,18 @@ +--- +title: 新物件的建立 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/新物件的建立 +--- +

 

+

新物件的建立

+

JavaScript 具備許多預先定義的物件。此外,你也可以建立你自己的物件。在 JavaScript 1.2 以後的版本中,你可以使用物件的初始化子來建立物件。另一個選擇是,你可以先建立建構子函數,然後使用這個函數以及 new 運算子來實體化物件。

+ +

{{ PreviousNext("Core_JavaScript_1.5_教學:物件和屬性", "Core_JavaScript_1.5_教學:新物件的建立:物件初始化子的使用") }}

diff --git "a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\226\260\347\211\251\344\273\266\347\232\204\345\273\272\347\253\213/\344\275\277\347\224\250_this_\345\217\226\345\276\227\347\211\251\344\273\266\347\232\204\345\217\203\350\200\203/index.html" "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\226\260\347\211\251\344\273\266\347\232\204\345\273\272\347\253\213/\344\275\277\347\224\250_this_\345\217\226\345\276\227\347\211\251\344\273\266\347\232\204\345\217\203\350\200\203/index.html" new file mode 100644 index 0000000000..6af61628b5 --- /dev/null +++ "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\226\260\347\211\251\344\273\266\347\232\204\345\273\272\347\253\213/\344\275\277\347\224\250_this_\345\217\226\345\276\227\347\211\251\344\273\266\347\232\204\345\217\203\350\200\203/index.html" @@ -0,0 +1,27 @@ +--- +title: 使用 this 取得物件的參考 +slug: >- + Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/新物件的建立/使用_this_取得物件的參考 +--- +

 

+

使用 this 取得物件的參考

+

JavaScript 有特別的關鍵字,this,你可以在方法內部使用,用來參考使用中的物件。舉例來說,假設你有稱為 validate 的函數可以檢驗物件的 value 屬性,傳入的參數是物件和上限、下限值︰

+
function validate(obj, lowval, hival) {
+   if ((obj.value < lowval) || (obj.value > hival))
+      alert("Invalid Value!");
+}
+
+

然後,你可以在每一個表單的 onchange 事件處理器中呼叫 validate,使用 thisform 元素傳給函數,如下所示︰

+
<input type="text" name="age" size="3"
+   onChange="validate(this, 18, 99)">
+
+

一般來說,this 會參考方法裡的呼叫端物件。

+

如果和 form 的屬性結合使用this 可以參考使用中物件的親表單。在下面的範例中,表單 myForm 內含 Text 物件以及按鈕。當使用者按下按鈕,表單的名稱就會被設成 Text 物件裡的值。按鈕的 onclick 事件處理器使用 this.form 來參考親表單 myForm

+
<form name="myForm">
+<p><label>Form name:<input type="text" name="text1" value="Beluga"></label>
+<p><input name="button1" type="button" value="Show Form Name"
+      onclick="this.form.text1.value=this.form.name">
+</p>
+</form>
+
+

{{ PreviousNext("Core_JavaScript_1.5_教學:新物件的建立:方法的定義", "Core_JavaScript_1.5_教學:新物件的建立:Getter 和 Setter 的定義") }}

diff --git "a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\226\260\347\211\251\344\273\266\347\232\204\345\273\272\347\253\213/\345\261\254\346\200\247\347\232\204\345\210\252\351\231\244/index.html" "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\226\260\347\211\251\344\273\266\347\232\204\345\273\272\347\253\213/\345\261\254\346\200\247\347\232\204\345\210\252\351\231\244/index.html" new file mode 100644 index 0000000000..ba099fa041 --- /dev/null +++ "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\226\260\347\211\251\344\273\266\347\232\204\345\273\272\347\253\213/\345\261\254\346\200\247\347\232\204\345\210\252\351\231\244/index.html" @@ -0,0 +1,21 @@ +--- +title: 屬性的刪除 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/新物件的建立/屬性的刪除 +--- +

 

+

屬性的刪除

+

你可以使用 delete 運算子移除屬性。下面的代碼示範如何移除屬性︰

+
// 建立新的物件 myobj,以及兩個屬性 a 和 b。
+myobj = new Object;
+myobj.a = 5;
+myobj.b = 12;
+
+// 移除一個屬性,只剩 b 屬性留在 myobj 裡。
+delete myobj.a;
+
+

你也可以使用 delete 來刪除全域變數,只要這個變數不是使用 var 關鍵字宣告的話︰

+
g = 17;
+delete g;
+
+

參閱 delete 取得更多資訊。

+

{{ PreviousNext("Core_JavaScript_1.5_教學:新物件的建立:Getter_和_Setter_的定義", "Core_JavaScript_1.5_教學:預先定義的核心物件") }}

diff --git "a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\226\260\347\211\251\344\273\266\347\232\204\345\273\272\347\253\213/\345\273\272\346\247\213\345\255\220\345\207\275\346\225\270\347\232\204\344\275\277\347\224\250/index.html" "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\226\260\347\211\251\344\273\266\347\232\204\345\273\272\347\253\213/\345\273\272\346\247\213\345\255\220\345\207\275\346\225\270\347\232\204\344\275\277\347\224\250/index.html" new file mode 100644 index 0000000000..b9832bf245 --- /dev/null +++ "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\226\260\347\211\251\344\273\266\347\232\204\345\273\272\347\253\213/\345\273\272\346\247\213\345\255\220\345\207\275\346\225\270\347\232\204\344\275\277\347\224\250/index.html" @@ -0,0 +1,58 @@ +--- +title: 建構子函數的使用 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/新物件的建立/建構子函數的使用 +--- +

 

+

建構子函數的使用

+

還有一個選擇,你可以按照這兩個步驟來建立物件︰

+
    +
  1. 編寫建構子函數以完成物件類型的定義。
  2. +
  3. 使用 new 建立物件的實體。
  4. +
+

若要定義物件類型,就指定物件類型的名稱、屬性、方法並建立函數。舉例來說,假設你想要給 car 建立物件類型。你希望這個物件的類型稱作 car,而且你還希望他有 make、model、year 這些屬性。要做到這些,你需要編寫出以下的函數︰

+
function car(make, model, year) {
+   this.make = make;
+   this.model = model;
+   this.year = year;
+}
+
+

注意 this 是用來把傳送給函數的值代入給物件的屬性。

+

現在你可以建立稱作 mycar 的物件如下所示︰

+
mycar = new car("Eagle", "Talon TSi", 1993);
+
+

這個語句建立 mycar 並且把指定的值代入給他自己的屬性。然後 mycar.make 的值是字串 "Eagle",mycar.year 是整數 1993,依此類推。

+

你可以藉由呼叫 new 來建立許多個 car 的物件。例如,

+
kenscar = new car("Nissan", "300ZX", 1992);
+vpgscar = new car("Mazda", "Miata", 1990);
+
+

物件可以有另一個物件本身的屬性。例如,假設你定義稱為 person 的物件如下︰

+
function person(name, age, sex) {
+   this.name = name;
+   this.age = age;
+   this.sex = sex;
+}
+
+

然後實體化兩個新的 person 物件如下︰

+
rand = new person("Rand McKinnon", 33, "M");
+ken = new person("Ken Jones", 39, "M");
+
+

然後你可以改寫 car 的定義,加入用來接受 person 物件的 owner 屬性,如下︰

+
function car(make, model, year, owner) {
+   this.make = make;
+   this.model = model;
+   this.year = year;
+   this.owner = owner;
+}
+
+

若要實體化新的物件,你可以如下使用︰

+
car1 = new car("Eagle", "Talon TSi", 1993, rand);
+car2 = new car("Nissan", "300ZX", 1992, ken);
+
+

注意,當建立新的物件的時候,傳入的並不是字面表達字串或整數值,上面的語句把 randken 物件當作參數傳給 owners。然後如果你希望找出 car2 的 owner 的名稱,你可以如下存取屬性︰

+
car2.owner.name
+
+

注意,你永遠可以給之前定義的物件加入屬性。例如,語句

+
car1.color = "black"
+
+

color 屬性加入給 car1,並且把 "black" 的值代入給新加入的屬性。然而,這樣並不能影響到其他的任何物件。若要給所有同樣類型的物件加入新的屬性,你必須把新的屬性加入到 car 物件類型的定義。

+

{{ PreviousNext("Core_JavaScript_1.5_教學:新物件的建立:物件初始化子的使用", "Core_JavaScript_1.5_教學:新物件的建立:物件屬性的索引") }}

diff --git "a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\226\260\347\211\251\344\273\266\347\232\204\345\273\272\347\253\213/\346\226\271\346\263\225\347\232\204\345\256\232\347\276\251/index.html" "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\226\260\347\211\251\344\273\266\347\232\204\345\273\272\347\253\213/\346\226\271\346\263\225\347\232\204\345\256\232\347\276\251/index.html" new file mode 100644 index 0000000000..67a9250b8e --- /dev/null +++ "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\226\260\347\211\251\344\273\266\347\232\204\345\273\272\347\253\213/\346\226\271\346\263\225\347\232\204\345\256\232\347\276\251/index.html" @@ -0,0 +1,40 @@ +--- +title: 方法的定義 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/新物件的建立/方法的定義 +--- +

 

+

方法的定義

+

方法就是和物件連繫在一起的函數。定義方法和定義標準函數的方式皆相同。然後使用下面的語句把函數和現存的物件連繫在一起︰

+
object.methodname = function_name
+
+

此處的 object 就是現存的物件,methodname 就是分配給方法的名稱,function_name 就是函數的名稱。

+

然後你可以呼叫物件中的方法如下︰

+
object.methodname(params);
+
+

你可以藉由含入物件的建構子函數裡的方法定義,針對物件的類型來定義方法。例如,你可以定義函數,用來格式化並顯示先前定義的 car 物件的屬性。例如,

+
function displayCar() {
+   var result = "A Beautiful " + this.year + " " + this.make
+      + " " + this.model;
+   pretty_print(result);
+}
+
+

此處的 pretty_print 是用來顯示水平格線和字串的函數。注意 this 是用來參考方法所屬的物件。

+

你可以在物件的定義中加上如下語句,把這個函數作為 car 的方法。

+
this.displayCar = displayCar;
+
+

於是,car 的完整定義就會變成這樣

+
function car(make, model, year, owner) {
+   this.make = make;
+   this.model = model;
+   this.year = year;
+   this.owner = owner;
+   this.displayCar = displayCar;
+}
+
+

然後你可以給每一個物件呼叫 displayCar 方法如下︰

+
car1.displayCar()
+car2.displayCar()
+
+

產生的輸出顯示在下圖中。

+

Image:obja.gif 7.1: 方法的輸出的顯示

+

{{ PreviousNext("Core_JavaScript_1.5_教學:新物件的建立:針對物件的類型定義屬性", "Core_JavaScript_1.5_教學:新物件的建立:使用_this_取得物件的參考") }}

diff --git "a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\226\260\347\211\251\344\273\266\347\232\204\345\273\272\347\253\213/\347\211\251\344\273\266\345\210\235\345\247\213\345\214\226\345\255\220\347\232\204\344\275\277\347\224\250/index.html" "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\226\260\347\211\251\344\273\266\347\232\204\345\273\272\347\253\213/\347\211\251\344\273\266\345\210\235\345\247\213\345\214\226\345\255\220\347\232\204\344\275\277\347\224\250/index.html" new file mode 100644 index 0000000000..79b7e5041b --- /dev/null +++ "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\226\260\347\211\251\344\273\266\347\232\204\345\273\272\347\253\213/\347\211\251\344\273\266\345\210\235\345\247\213\345\214\226\345\255\220\347\232\204\344\275\277\347\224\250/index.html" @@ -0,0 +1,23 @@ +--- +title: 物件初始化子的使用 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/新物件的建立/物件初始化子的使用 +--- +

 

+

物件初始化子的使用

+

除了使用建構子函數來建立物件以外,你也可以使用物件的初始化子來建立物件。使用物件的初始化子,有時又被稱為以字面表達記法來建立物件。「物件初始化子」與 C++ 的術語一致。

+

使用物件初始化子的語句如下︰

+
var obj = { property_1:   value_1,   // 通常以 property_# 代表識別子...
+            2:            value_2,   // 或者使用數字...
+            ...,
+            "property_n": value_n }; // 或者使用字串
+

此處的 obj 就是新物件的名稱,每一個 property_i 都是識別子(可以是名稱、數字、字串的字面表達),而且每一個 value_i 都是表達式,其值會代入給 property_iobj 和代入動作不是必要的;如果你不需要在其他地方參考這個物件,你就不需要把物件代入給變數。(注意,你也許需要以圓括弧代替花括弧來包裝物件的字面表達,如果預期物件出現的地方會有其他語句,就要避免和區塊語法相混淆。)

+

如果物件是在最頂層的 Script 中以物件初始化子來建立的,每一次要對內含該物件的字面表達求值時,JavaScript 就會把他解譯成物件。此外,用在函數裡的初始化子,會在每一次呼叫函數的時候建立。

+

以下的語句建立物件,並把他代入給變數 x,但只在表達式的條件為 true 時如此。

+
if (cond) x = {hi:"there"};
+
+

以下例子使用了三個屬性來建立 myHonda。注意,engine 屬性也是物件,並連結有自己的屬性。

+
var myHonda = {color:"red",wheels:4,engine:{cylinders:4,size:2.2}};
+
+

你也可以使用物件的初始化子來建立陣列。參閱 陣列的字面表達

+

在 JavaScript 1.1 以後的版本中,你無法再使用物件的初始化子。你只能使用他們的建構子函數或者使用由某些其他用途的物件所提供的函數來建立物件。參閱 建構子函數的使用

+

{{ PreviousNext("Core_JavaScript_1.5_教學:新物件的建立", "Core_JavaScript_1.5_教學:新物件的建立:建構子函數的使用") }}

diff --git "a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\226\260\347\211\251\344\273\266\347\232\204\345\273\272\347\253\213/\347\211\251\344\273\266\345\261\254\346\200\247\347\232\204\347\264\242\345\274\225/index.html" "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\226\260\347\211\251\344\273\266\347\232\204\345\273\272\347\253\213/\347\211\251\344\273\266\345\261\254\346\200\247\347\232\204\347\264\242\345\274\225/index.html" new file mode 100644 index 0000000000..08e243c78b --- /dev/null +++ "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\226\260\347\211\251\344\273\266\347\232\204\345\273\272\347\253\213/\347\211\251\344\273\266\345\261\254\346\200\247\347\232\204\347\264\242\345\274\225/index.html" @@ -0,0 +1,10 @@ +--- +title: 物件屬性的索引 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/新物件的建立/物件屬性的索引 +--- +

 

+

物件屬性的索引

+

在 JavaScript 1.0 中,你可以使用物件的屬性名稱或序號索引來參考物件的屬性。然而,在 JavaScript 1.1 以後的版本中,如果你最初使用名稱來定義屬性,你就必須永遠使用名稱來參考屬性,如果你最初使用索引來定義屬性,你就必須永遠使用索引來參考屬性。

+

這些限制出現在,當你使用建構子函數來建立物件及其屬性的時候(例如我們之前的 Car 物件類型),以及當你明確的定義個別的屬性的時候(例如,myCar.color = "red")。如果你最初使用索引來定義物件的屬性,如 myCar{{ mediawiki.external(5) }} = "25 mpg",隨後你只能以 myCar{{ mediawiki.external(5) }} 來參考這個屬性。

+

這個規則的例外是從 HTML 反映過來的物件,如 forms 陣列。你永遠可以使用序號(以在文件中出現的位置為基準)或他們的名稱(如果有定義的話)來參考這些陣列。舉例來說,如果在文件中的第二個 <FORM> 標記中有 "myForm" 的 NAME 屬性,你可以使用 document.forms{{ mediawiki.external(1) }}document.forms{{ mediawiki.external('\"myForm\"') }}document.myForm 來參考表單。

+

{{ PreviousNext("Core_JavaScript_1.5_教學:新物件的建立:建構子函數的使用", "Core_JavaScript_1.5_教學:新物件的建立:針對物件的類型定義屬性") }}

diff --git "a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\226\260\347\211\251\344\273\266\347\232\204\345\273\272\347\253\213/\351\207\235\345\260\215\347\211\251\344\273\266\347\232\204\351\241\236\345\236\213\345\256\232\347\276\251\345\261\254\346\200\247/index.html" "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\226\260\347\211\251\344\273\266\347\232\204\345\273\272\347\253\213/\351\207\235\345\260\215\347\211\251\344\273\266\347\232\204\351\241\236\345\236\213\345\256\232\347\276\251\345\261\254\346\200\247/index.html" new file mode 100644 index 0000000000..0d1e55ac71 --- /dev/null +++ "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\226\260\347\211\251\344\273\266\347\232\204\345\273\272\347\253\213/\351\207\235\345\260\215\347\211\251\344\273\266\347\232\204\351\241\236\345\236\213\345\256\232\347\276\251\345\261\254\346\200\247/index.html" @@ -0,0 +1,12 @@ +--- +title: 針對物件的類型定義屬性 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/新物件的建立/針對物件的類型定義屬性 +--- +

 

+

針對物件的類型定義屬性

+

你可以透過 prototype 屬性的使用來給之前定義的物件加入新的屬性。這種屬性的定義方式可以共用給所有指定類型的物件,而不只是針對單一的物件實體。以下代碼給所有的 car 類型的物件加入 color 屬性,然後把值代入給 car1 物件的 color 屬性。

+
Car.prototype.color=null;
+car1.color="black";
+
+

參閱 Core JavaScript 參考・函數物件・prototype 屬性 以取得更多資訊。

+

{{ PreviousNext("Core_JavaScript_1.5_教學:新物件的建立:物件屬性的索引", "Core_JavaScript_1.5_教學:新物件的建立:方法的定義") }}

diff --git "a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\255\243\350\246\217\350\241\250\351\201\224\345\274\217\346\250\241\345\274\217\347\232\204\347\267\250\345\257\253/index.html" "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\255\243\350\246\217\350\241\250\351\201\224\345\274\217\346\250\241\345\274\217\347\232\204\347\267\250\345\257\253/index.html" new file mode 100644 index 0000000000..e07b2f6aa4 --- /dev/null +++ "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\255\243\350\246\217\350\241\250\351\201\224\345\274\217\346\250\241\345\274\217\347\232\204\347\267\250\345\257\253/index.html" @@ -0,0 +1,184 @@ +--- +title: 正規表達式模式的編寫 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/正規表達式模式的編寫 +--- +

正規表達式的模式是由簡單的字元所組成,如 /abc/,或由簡單的和特殊的字元所組成,如 /ab*c//Chapter (\d+)\.\d*/。後者含有用來記憶的括弧。以模式的某一部分所產生的比對結果會被記憶起來以供稍後使用,已在 括弧子字串的比對結果的運用 一文中解說。

+

簡單模式的使用

+

簡單的模式直接由想要尋找的字元所組成。例如,/abc/ 的模式只在字元 'abc' 以同樣順序一起出現時,比對出字串裡的字元。在字串 "Hi, do you know your abc's?" 和 "The latest airplane designs evolved from slabcraft." 中將會比對成功。在兩個例子中,都比對出子字串 'abc'。在字串 "Grab crab" 中沒有比對結果,因為字串裡並未含有子字串 'abc'。

+

特殊字元的使用

+

當搜尋的需求遠遠超出直接比對的能力時,如尋找 1 個以上的全部的 b,或是尋找含有特殊字元的空白部分。舉例來說,/ab*c/ 的模式可比對出所有以 'a' 後接 0 個以上的全部的 'b'(* 的意思是前項出現 0 個以上)並緊接者 'c' 的字元。在字串 "cbbabbbbcdebc" 裡,可以比對出子字串 'abbbbc'。

+

下表提供完整的列表,並解說可用於正規表達式的特殊字元。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
字元意義
\可分為以下兩種︰ +
    +
  • 對於那些沒有特殊意義的字元,反斜線可指示下一個字元為特殊的、不照字面解譯。舉例來說,/b/ 比對字元 'b'。藉由在 b 前面放置反斜線,也就是使用 /\b/,這個字元的特殊意義就變成比對文字的邊界。
  • +
  • 對於那些有特別意義的字元,就利用反斜線指示下一個字元並非特殊的、應該照字面解譯。舉例來說,* 是一個意義為前項出現 0 個以上的特殊字元。例如,/a*/ 意思是比對 0 個以上的全部的 a。如果要照字面比對 *,就在前面加上反斜線。例如,/a\*/ 比對出 'a*'。
  • +
+
^比對輸入的開頭處。如果把多行標誌設為 true,也會比對緊接在換行字元之後的字元。舉例來說,/^A/ 不會在 "an A" 裡比對出 'A',但會在 "An A" 裡比對出第一個 'A'。
$比對輸入的末尾處。如果把多行標誌設為 true,也會比對緊接在換行字元之前的字元。舉例來說,/t$/ 不會在 "eater" 裡比對出 't',但會在 "eat" 裡比對出來。
*比對前面的字元 0 次以上。舉例來說,/bo*/ 在 "A ghost booooed" 比對出 'boooo',並在 "A bird warbled" 比對出 'b',但不會在 "A goat grunted" 比對出來。
+比對前面的字元 1 次以上。等價於 {1,}。舉例來說,/a+/ 在 "candy" 比對出 'a',並在 "caaaaaaandy" 比對出所有的 a。
?比對前面的字元 0 次或 1 次。 +

舉例來說,/e?le?/ 在 "angel" 比對出 'el',並在 "angle" 比對出 'le'。

+

如果緊接在任何一個數量子 *、+、?、{} 之後來使用,將使數量子非貪婪(比對出最小的次數),而預設值是貪婪的(比對出最大的次數)。舉例來說,使用 /\d+/ 比對 "123abc" 便返回 "123",如果使用 /\d+?/,只有 "1" 會被比對出來。

+ 也用於表示預讀,在本表的 x(?=y) 和 x(?!y) 中有說明。
.小數點比對任意的單一字元,除了換行字元以外。舉例來說,/.n/ 在 "nay, an apple is on the tree" 比對出 'an' 和 'on',而非 'nay'。
(x)比對 'x' 並記憶此項比對結果。又稱為截取括弧(capturing parentheses)。舉例來說,/(foo)/ 在 "foo bar" 裡比對出並記憶 'foo'。比對出來的子字串可以從比對結果的陣列的元素 1, ..., n 取回。
(?:x)比對 'x' 但不記憶此項比對結果。又稱為非截取括弧。比對出來的子字串無法從比對結果的陣列的元素 1, ..., n 取回。
x(?=y)比對 'x' 但只在 'x' 後面接續著 'y' 的時候。舉例來說,/Jack(?=Sprat)/ 只在後面接續著 'Sprat' 的時候比對出 'Jack'。/Jack(?=Sprat|Frost)/ 只在後面接續著 'Sprat' 或 'Frost' 的時候比對出 'Jack'。然而,'Sprat' 或 'Frost' 都不是比對結果的一部分。
x(?!y)比對 'x' 但只在 'x' 後面沒有接續著 'y' 的時候。舉例來說,/\d+(?!\.)/ 只在後面沒有接續著小數點的時候比對出數字。正規表達式 /\d+(?!\.)/.exec("3.141") 比對出 '141' 而非 '3.141'。
x|y比對 'x' 或 'y'。舉例來說,/green|red/ 在 "green apple" 比對出 'green',並在 "red apple"比對出 'red'。
{n}在此 n 是正整數。比對出恰好有 n 個的前面的字元。舉例來說,/a{2}/ 不會在 "candy" 裡比對出 'a',但在 "caandy" 裡比對出全部的 a,並在 "caaandy" 裡比對出前兩個 a。
{n,}在此 n 是正整數。比對出至少 n 個的前面的字元。舉例來說,/a{2,}/ 不會在 "candy" 裡比對出 'a',但在 "caandy" 還有在 "caaaaaaandy" 裡比對出全部的 a。
{n,m}在此 n 和 m 是正整數。比對出至少 n 個且至多 m 個的前面的字元。舉例來說,/a{1,3}/ 在 "cndy" 裡比對不出來,但在 "candy" 比對出 'a',在 "caandy" 比對出前兩個 a,並在 "caaaaaaandy" 比對出前三個 a,注意,當比對 "caaaaaaandy" 的時候,比對的是 "aaa",即使字串裡有更多的 a。
xyz字元集。比對出包含在括號裡的其中任何一個字元。你可以使用連接符號 (-) 指定字元的範圍。舉例來說,abcd 等於 a-d。這些都能在 "brisket" 裡比對 'b',並在 "city" 裡比對 'c'。
^xyz字元否定集、或字元補集。也就是比對出任何不包含在括號裡的一切。你可以使用連接符號 (-) 指定字元的範圍。舉例來說,^abc 等於 ^a-c。這些都能在 "brisket" 裡比對出第一個字母 'r',並在 "chop" 比對出 'h'。
\\b比對退格。(別和 \b 混淆。)
\b比對文字邊界,如空白或換行字元。(別和 \\b 混淆。)舉例來說,/\bn\w/ 在 "noonday" 裡比對出 'no',/\wy\b/ 在 "possibly yesterday" 比對出 'ly'。
\B比對非文字邊界。舉例來說,/\w\Bn/ 在 "noonday" 裡比對出 'on',/y\B\w/ 在 "possibly yesterday" 裡比對出 'ye'。
\cX在此 X 是控制字元。在字串中比對控制字元。舉例來說,/\cM/ 在字串裡比對出 control-M。
\d比對數字字元。等於 0-9。舉例來說,/\d//0-9/ 都在 "B2 is the suite number" 比對出 '2'。
\D比對非數字字元。等於 ^0-9。舉例來說,/\D//^0-9/ 都在 "B2 is the suite number" 比對出 'B'。
\f比對換頁(form-feed)。
\n比對換行。
\r比對歸位。
\s比對單一空白字元,包括空白、TAB、換頁、換行。等於 +

\\f\\n\\r\\t\\v\\u00A0\\u2028\\u2029

+ 舉例來說,/\s\w*/ 在 "foo bar" 裡比對出 ' bar'。
\S比對除了空白字元以外的單一字元。等於 +

^ \\f\\n\\r\\t\\v\\u00A0\\u2028\\u2029

+ 舉例來說,/\S\w*/ 在 "foo bar" 裡比對出 'foo'。
\t比對 TAB。
\v比對垂直 TAB。
\w比對任何字母和數字的字元,包括底線。等於 A-Za-z0-9_。舉例來說,/\w/ 在 "apple" 裡比對出 'a',在 "$5.28" 裡比對出 '5',並在 "3D" 比對出 '3'。
\W比對任何非字母和數字的字元。等於 {{ mediawiki.external('^A-Za-z0-9_') }}。舉例來說,/\W//{{ mediawiki.external('^A-Za-z0-9_') }}/ 在 "50%" 裡比對出 '%'。
\n在此 n 是正整數。回向參考在正規表達式中的第 n 個括弧中比對的最後的子字串(對左括弧計數)。舉例來說,/apple(,)\sorange\1/ 在 "apple, orange, cherry, peach" 裡比對出 'apple, orange,'。
\0比對 NUL 字元。後面不可以接續其他數字。
\xhh比對內碼為 hh 的字元(兩個十六進位數)
\uhhhh比對內碼為 hhhh 的字元(四個十六進位數)
+

表 4.1: 正規表達式裡的特殊字元。

+

括弧的使用

+

使用括弧把正規表達式的模式的某一部分括起來,就會記憶那部分被比對出來的子字串。一經記憶,就可以在其他地方取回並使用。可在 括弧子字串的比對結果的運用 一文中找到說明。

+

舉例來說,以 /Chapter (\d+)\.\d*/ 的模式來解說額外的跳脫和特殊字元,那些用來指示某一部分模式需要記憶的部分。他會比對恰好是 'Chapter ' 的字元,隨後是 1 個以上的數字(\d 的意思是任意數字字元,+ 的意思是 1 次以上),隨後是一個小數點(點本身是特殊字元,前面附上 \ 的點的意思是這個模式必須尋找字面為 '.' 的字元),隨後是任何 0 個以上的數字(\d 的意思是任意數字字元,* 的意思是 0 次以上)。此外,括弧被用來記憶第一次比對出來的數字字元。

+

在 "Open Chapter 4.3, paragraph 6" 裡可以找出這個模式,且 '4' 會被記憶。在 "Chapter 3 and 4" 裡則找不出這個模式,因為字串裡的 '3' 後面沒有點。

+

若要比對子字串,且不要記憶比對出來的那一部分,可在括弧裡面的最前面加上 ?:。舉例來說,(?:\d+) 比對 1 個以上的數字字元,但不會記憶那些比對出來的字元。

+
+

{{ PreviousNext("Core_JavaScript_1.5_教學:正規表達式的建立", "Core_JavaScript_1.5_教學:正規表達式的運用") }}

+
+

 

diff --git "a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\255\243\350\246\217\350\241\250\351\201\224\345\274\217\347\232\204\345\273\272\347\253\213/index.html" "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\255\243\350\246\217\350\241\250\351\201\224\345\274\217\347\232\204\345\273\272\347\253\213/index.html" new file mode 100644 index 0000000000..ffeee0f5c7 --- /dev/null +++ "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\255\243\350\246\217\350\241\250\351\201\224\345\274\217\347\232\204\345\273\272\347\253\213/index.html" @@ -0,0 +1,34 @@ +--- +title: 正規表達式的建立 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/正規表達式的建立 +--- +

正規表達式的建立

+

正規表達式有兩種建構方式︰

+ +
 re = /ab+c/; 
+
+
+
+
+ 正規表達式的字面表達會在對 Script 求值時提供正規表達式的編譯產物。這時正規表達式將成為常數而遺留下來,採用這個方式可以得到較好的效能。
+
+
+
+ +
 re = new RegExp("ab+c"); 
+
+
+
+
+ 使用建構子函數可在執行時期提供正規表達式的編譯產物。當你知道正規表達式的模式將會變更時,或者當你無法預知取自其他來源的模式(如使用者的輸入)時,就使用建構子函數。
+
+
+
+
+

{{ PreviousNext("Core_JavaScript_1.5_教學:運算子:特殊運算子", "Core_JavaScript_1.5_教學:正規表達式模式的編寫") }}

+
+

 

diff --git "a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\255\243\350\246\217\350\241\250\351\201\224\345\274\217\347\232\204\351\201\213\347\224\250/\346\255\243\350\246\217\350\241\250\351\201\224\345\274\217\347\232\204\347\257\204\344\276\213/index.html" "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\255\243\350\246\217\350\241\250\351\201\224\345\274\217\347\232\204\351\201\213\347\224\250/\346\255\243\350\246\217\350\241\250\351\201\224\345\274\217\347\232\204\347\257\204\344\276\213/index.html" new file mode 100644 index 0000000000..0bd61d90e5 --- /dev/null +++ "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\346\255\243\350\246\217\350\241\250\351\201\224\345\274\217\347\232\204\351\201\213\347\224\250/\346\255\243\350\246\217\350\241\250\351\201\224\345\274\217\347\232\204\347\257\204\344\276\213/index.html" @@ -0,0 +1,114 @@ +--- +title: 正規表達式的範例 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/正規表達式的運用/正規表達式的範例 +--- +

範例

+

以下範例示範正規表達式的一些用法。

+

改變輸入字串的順序

+

以下範例解說了正規表達式的構造,以及 string.split()string.replace() 的用法。他會整理凌亂的格式化輸入字串,字串中內含以空白、TAB、和唯一的分號所分割的姓名(名字在前)。最後,他會調換姓名的順序(姓氏在前)並重新排序列表。

+
<script type="text/javascript">
+
+// 內含很多空白和 TAB 的 names 字串,
+// 在名字和姓氏之間也會有很多空白。
+var names = "Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ; Chris Hand ";
+
+var output = new Array(
+  "---------- Original String<br><br>",
+  names + "<br><br>");
+
+// 預備兩個正規表達式的模式和儲存用的陣列。
+// 把字串分割存入陣列元素裡。
+
+// 模式︰可能的空白,然後是分號,然後是可能的空白
+var pattern = /\s*;\s*/;
+
+// 使用上面的模式把字串分割成多個斷片,
+// 並且把斷片儲存至稱為 nameList 的陣列。
+var nameList = names.split(pattern);
+
+// 新的模式︰1 個以上的字元,然後是空白字元,然後是 1 個以上的字元。
+// 使用括弧來記憶模式的某一部分。
+// 已記憶的部分稍後會被參考。
+var pattern = /(\w+)\s+(\w+)/;
+
+// 用來保存已處理的姓名的新陣列。
+var bySurnameList = new Array();
+
+// 顯示 names 陣列,並移動以逗號分隔且姓氏在前的姓名到新的陣列。
+//
+// replace 方法除去符合模式的所有內容,並以已記憶的字串取代。
+// 字串是以第二個已記憶的部分、後接逗號和空格、後接第一個已記憶的部分所組成。
+//
+// 變數 $1 和 $2 參考了符合模式的已記憶的部分。
+
+output.push("---------- After Split by Regular Expression<br>");
+
+var i, len;
+for (i = 0, len = nameList.length; i < len; i++)
+{
+  output.push(nameList[i] + "<br>");
+  bySurnameList[i] = nameList[i].replace(pattern, "$2, $1")
+}
+
+// 顯示新的陣列。
+output.push("---------- Names Reversed<br>");
+for (i = 0, len = bySurnameList.length; i < len; i++)
+{
+  output.push(bySurnameList[i] + "<br>")
+}
+
+// 以姓氏來排序,然後顯示已排序的陣列。
+bySurnameList.sort();
+output.push("---------- Sorted<br>");
+for (i = 0, len = bySurnameList.length; i < len; i++)
+{
+  output.push(bySurnameList[i] + "<br>")
+}
+
+output.push("---------- End<br>");
+
+document.write(output.join("\n"));
+
+</script>
+
+

使用特殊字元來對輸入進行驗證

+

在以下的範例中,有位使用者輸入電話號碼。當使用者按下 Enter 時,Script 就會檢查電話號碼的有效性。如果電話號碼有效(符合由正規表達式所指定的字元序列),Script 在視窗上表示感謝使用者,並確認了電話號碼。如果電話號碼無效,Script 在視窗上表示使用者的電話號碼有誤的資訊。

+

正規表達式尋找 0 或 1 個左括弧 \(?,後接三個數字 \d{3},後接 0 或 1 個右括弧 \)?,如果有的話,就後接橫線 (-) 或斜線 (\) 或小數點 (.),並記憶字元 (-\\/\\.),後接三個數字 \d{3},後接已記憶的橫線、斜線、小數點的比對結果 \1,後接四個數字 \d{4}

+

當使用者按下 Enter 設定 RegExp.input 的值時,就會發動 Change 事件。

+
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+  "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+    <meta http-equiv="Content-Script-Type" content="text/javascript">
+    <script type="text/javascript">
+      var re = /\(?\d{3}\)?([-\/\.])\d{3}\1\d{4}/;
+
+      function testInfo(phoneInput)
+      {
+        var OK = re.exec(phoneInput.value);
+
+        if (!OK)
+        {
+          window.alert(RegExp.input + " isn't a phone number with area code!");
+        }
+        else
+        {
+          window.alert("Thanks, your phone number is " + OK[0]);
+        }
+      }
+    </script>
+  </head>
+
+  <body>
+    <p>Enter your phone number (with area code) and then press Enter.</p>
+    <form action="">
+      <input name="phone" onchange="testInfo(this);">
+    </form>
+  </body>
+</html>
+
+
+

{{ PreviousNext("Core_JavaScript_1.5_教學:正規表達式的運用:使用標誌的進階搜尋", "Core_JavaScript_1.5_教學:區塊語法") }}

+
+

 

diff --git "a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\347\211\251\344\273\266\347\232\204\346\223\215\344\275\234\350\252\236\346\263\225/index.html" "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\347\211\251\344\273\266\347\232\204\346\223\215\344\275\234\350\252\236\346\263\225/index.html" new file mode 100644 index 0000000000..f1e46206fe --- /dev/null +++ "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\347\211\251\344\273\266\347\232\204\346\223\215\344\275\234\350\252\236\346\263\225/index.html" @@ -0,0 +1,53 @@ +--- +title: 物件的操作語法 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/物件的操作語法 +--- +

物件的操作語法

+

JavaScript 使用 for...infor each...inwith 語法來操作物件。

+

for...in 語法

+

for...in 語法可處理對應物件的所有屬性的指定變數。JavaScript 會對每一個對應的屬性來執行指定的語句。for...in 語句如下︰

+
for (variable in object) {
+   statements
+}
+
+

範例
+ 以下函數接受物件和物件的名稱作為自己的參數。然後函數反覆遍歷物件的屬性,並返回列出屬性名稱和值的字串。

+
function dump_props(obj, obj_name) {
+   var result = "";
+   for (var i in obj) {
+      result += obj_name + "." + i + " = " + obj[i] + "<br>";
+   }
+   result += "<hr>";
+   return result;
+}
+
+

以帶有屬性 makemodel 的物件 car 為例,輸出結果如下︰

+
car.make = Ford
+car.model = Mustang
+
+

陣列
+ 雖然使用這個方法來處理所有的 Array 元素很是誘人,但如果你修改了 Array 物件,例如加入自訂的屬性或方法,for...in 語法就只會處理除了陣列元素以外的所有使用者定義的屬性,for...in 語法將會返回你的使用者定義的屬性的名稱,除了數字索引以外。因此在處理陣列時,最好還是使用傳統的 for 循環,並配合數字索引。

+

for each...in 語法

+

for each...in 是在 JavaScript 1.6 中引入的循環語法,他很類似 for...in,但不是針對物件的屬性的名稱,而是物件的屬性的值。

+

with 語法

+

with 語法為一整組的語句確立了預設的物件。JavaScript 會在一整組語法之內找出所有不合格的名稱,只要這個名稱是預設物件的屬性,就會將其確定。如果有一個不合格的名稱符合其中一個屬性,然後就會在語句中使用這個屬性。否則,就會被當成局域或全域的變數。

+

with 語法如下︰

+
with (object) {
+   statements
+}
+
+

範例
+ 以下 with 語法指定 Math 物件為預設的物件。with 語法裡面使用了 PI 屬性和 cossin 方法的語句,而無需指定物件。JavaScript 會假定他們參照的是 Math 物件。

+
var a, x, y;
+var r = 10;
+with (Math) {
+   a = PI * r * r;
+   x = r * cos(PI);
+   y = r * sin(PI/2);
+}
+
+

附註︰雖然使用 with 語句可以使你的程式更加簡潔,但不當使用 with 也會在一定程度上使你的程式速度變慢。參閱 Core JavaScript 1.5 參考:語法:with

+
+

{{ PreviousNext("Core_JavaScript_1.5_教學:循環語法:continue_語法", "Core_JavaScript_1.5_教學:註解") }}

+
+

 

diff --git "a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\347\271\274\346\211\277/index.html" "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\347\271\274\346\211\277/index.html" new file mode 100644 index 0000000000..4b1e65afce --- /dev/null +++ "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\347\271\274\346\211\277/index.html" @@ -0,0 +1,146 @@ +--- +title: 繼承 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/繼承 +--- +

 

+ +

繼承

+ +

這裡有很多有關如何在 JavaScript 中定義類型(類別)的困惑之處,包括繼承。這裡有很多方式和一些 次優的選擇。這裡所展示的運作的最好,而且簡單。

+ +

範例

+ +

B 繼承 A︰

+ +
function A(a)
+{
+  this.varA = a;
+}
+
+A.prototype =
+{
+  varA : null,
+  doSomething : function()
+  {
+     ...
+  }
+}
+
+function B(a, b)
+{
+  A.call(this, a);
+  this.varB = b;
+}
+
+B.prototype =
+{
+  varB : null,
+  doSomething : function() // 覆寫
+  {
+     A.prototype.doSomething.apply(this, arguments); // 呼叫親類型
+     ...
+  }
+}
+
+extend(B, A);
+
+var b = new B();
+b.doSomething();
+
+ +

重點部分是︰

+ + + +

此處的 extend() 並不是內建的函數,其定義如下︰

+ +
function extend(child, supertype)
+{
+   child.prototype.__proto__ = supertype.prototype;
+}
+
+ +

prototype 和 __proto__

+ +

JavaScript 對於來自 Java 或 C++ 的開發者而言會感到一些困惑,因為他完全動態,完全執行時期,而且完全沒有類別。他完全只有實體(物件)。甚至〝類別〞也只是函數物件模擬出來的。

+ +

你或許已經注意到前面我們的 function A 很特別,這並不是普通的函數,但可以和關鍵字 new 結合使用來實體化新的物件。他也可以有稱作 prototype 的特別的屬性(由 JS 標準所定義)。這個函數所做的不過是,當你呼叫 new 的時候,參考的 prototype 物件被複製到新的實體的屬性 __proto__。也就是當你這樣做 var a1 = new A() 的時候,JS(在記憶體中建立物件之後,並在使用 this 執行函數 A() 來定義他之前)只是簡單的這樣做 a1.__proto__ = A.prototype。然後當你存取實體的屬性的時候,JS 首先會檢查那些是否直接存在於物件上,如果不是的話,就從 __proto__ 搜尋。這意思是所有你定義在 prototype 裡的東西,實際上會被所有的實體所共用,而且你甚至可以在稍後修改 prototype 的部分,並且在所有既存的實體上表現出這個改變,只要你想要的話。

+ +

舉例來說,當你在上面的範例中這樣做 var a1 = new A(); var a2 = new A();,然後 a1.doSomething 實際上會參考 a1.__proto__.doSomething,這些和你定義的 A.prototype.doSomething 相同,也就是 a1.__proto__.doSomething == a2.__proto__.doSomething == A.prototype.doSomething

+ +

簡而言之prototype 是對類型而言,而 __proto__ 對實體而言都相同。

+ +

__proto__ 是以遞歸的方式來看待的,也就是 a1.doSomethinga1.__proto__.doSomethinga1.__proto__.__proto__.doSomething 等等,直到找到或不存在 __proto__ 為止。

+ +

所以,發生了什麼︰當你呼叫
+   var o = new Foo()
+ JS 實際上只是這樣做
+   var o = new Object();
+   o.__proto__ = Foo.prototype;
+   o.Foo();
(諸如此類)
+
+ 以及當你隨後這樣做
+   o.someProp
+ 他會檢查 o 是否有屬性 someProp,如果沒有就檢查 o.__proto__.someProp,如果沒有就檢查 o.__proto__.__proto__.someProp 依此類推。這個最後的步驟就是 extend() 函數運作的原因。

+ +

 

+ +

注意,__proto__ 只能在 Mozilla 的 JS 引撉中存取。其他引撉的也有相同的運作,但不能存取 __proto__。參閱以下內容來補救。

+ +

extend() 的另一個選擇

+ +

還有另一個選擇,你也可以定義 extend() 如下︰

+ +
function extend(child, supertype)
+{
+   child.prototype.__proto__ = supertype.prototype;
+   child.prototype.__super = supertype;
+}
+
+ +

因此,當你想要在 B 中呼叫親函數的時候,你可以使用 this.__super 取代 A,例如 this.__super.call(this, a) 用於建構子,以及 this.__super.prototype.doSomething.apply(this, arguments) 用於覆載函數。

+ +

注意,__proto__ 在 Mozilla 以外的 JavaScript 版本中可能無法使用。還有另一個選擇,但不是 extend() 的最佳版本,這次應該到處都可以用︰

+ +
function extend(child, super)
+{
+  for (var property in super.prototype) {
+    if (typeof child.prototype[property] == "undefined")
+      child.prototype[property] = super.prototype[property];
+  }
+  return child;
+}
+
+ +

這次簡單的直接把親類型的 prototype 裡所有的屬性和函數,放入到子類型的 prototype 裡。這對多重繼承而言非常有用,但要小心使用,沒有親類別會把屬性或函數定義成同樣的,或者你需要明確的把那些覆載並定義那些該怎麼做。

+ +

阻礙

+ +

這裡有另一個方法用來定義類型,例如︰

+ +
function A()
+{
+  this.varA = "bla";
+  this.isNotSoGood = function()
+  {
+    ...
+  };
+}
+
+ +

這樣也可以運作,但只是次優的選擇,因為每次你建立這個類型的物件的時候,isNotSoGood 會在每一個實體中定義一次。如果是在 .prototype 定義這些的話,就只會定義一次。

+ +


+ 你可以使用下面的方式來繼承︰

+ +
B.prototype = new A();
+
+ +

不在載入 JS 檔案的時候建立 A() 的實體。這是非常壞的點子,因為你可能需要在 A 的建構子裡做一些處理,這可能會耗費時間並因此大幅延遲載入,或嘗試存取尚未載入的東西(例如,在 utils.js 裡的函數)。

+ +

{{ PreviousNext("Core_JavaScript_1.5_教學:預先定義的物件:String_物件", "Core_JavaScript_1.5_教學:以類別為基礎的語言_vs._以原型為基礎的語言") }}

+ +

{{ languages( { "en": "en/Core_JavaScript_1.5_Guide/Inheritance" } ) }}

diff --git "a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\350\201\267\345\223\241\347\232\204\344\276\213\345\255\220/index.html" "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\350\201\267\345\223\241\347\232\204\344\276\213\345\255\220/index.html" new file mode 100644 index 0000000000..a9a7200773 --- /dev/null +++ "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\350\201\267\345\223\241\347\232\204\344\276\213\345\255\220/index.html" @@ -0,0 +1,31 @@ +--- +title: 職員的例子 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/職員的例子 +--- +

職員的例子

+

本章的剩餘部分會使用如下所示的職員的階層圖。

+

Image:hier01.gif

+

圖 8.1: 簡單的物件的階層

+

本範例使用了下面的物件︰

+ +

其餘的範例︰

+ +
+

{{ PreviousNext("Core_JavaScript_1.5_教學:以類別為基礎的語言_vs._以原型為基礎的語言", "Core_JavaScript_1.5_教學:職員的例子:階層的建立") }}

+
+

 

diff --git "a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\350\201\267\345\223\241\347\232\204\344\276\213\345\255\220/\347\211\251\344\273\266\347\232\204\345\261\254\346\200\247/index.html" "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\350\201\267\345\223\241\347\232\204\344\276\213\345\255\220/\347\211\251\344\273\266\347\232\204\345\261\254\346\200\247/index.html" new file mode 100644 index 0000000000..01d23df274 --- /dev/null +++ "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\350\201\267\345\223\241\347\232\204\344\276\213\345\255\220/\347\211\251\344\273\266\347\232\204\345\261\254\346\200\247/index.html" @@ -0,0 +1,14 @@ +--- +title: 物件的屬性 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/職員的例子/物件的屬性 +--- +

物件的屬性

+

本節討論物件如何從原型鏈上的其他物件來繼承屬性,以及當你在執行時期加入屬性的時候,發生了什麼事。

+ +
+

{{ PreviousNext("Core_JavaScript_1.5_教學:職員的例子:階層的建立", "Core_JavaScript_1.5_教學:職員的例子:物件的屬性:屬性的繼承") }}

+
+

 

diff --git "a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\350\201\267\345\223\241\347\232\204\344\276\213\345\255\220/\347\211\251\344\273\266\347\232\204\345\261\254\346\200\247/\345\261\254\346\200\247\347\232\204\345\212\240\345\205\245/index.html" "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\350\201\267\345\223\241\347\232\204\344\276\213\345\255\220/\347\211\251\344\273\266\347\232\204\345\261\254\346\200\247/\345\261\254\346\200\247\347\232\204\345\212\240\345\205\245/index.html" new file mode 100644 index 0000000000..4d5a456ad4 --- /dev/null +++ "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\350\201\267\345\223\241\347\232\204\344\276\213\345\255\220/\347\211\251\344\273\266\347\232\204\345\261\254\346\200\247/\345\261\254\346\200\247\347\232\204\345\212\240\345\205\245/index.html" @@ -0,0 +1,19 @@ +--- +title: 屬性的加入 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/職員的例子/物件的屬性/屬性的加入 +--- +

屬性的加入

+

在 JavaScript 中,你可以在執行時期把屬性加入到任何的物件。你不會受到只能使用由建構子函數提供屬性的限制。若要為特定的單一物件加入屬性,你可以把值代入給物件,如下︰

+
mark.bonus = 3000;
+
+

現在,mark 物件有了額外的屬性,而其他的 WorkerBee 不會有這個屬性。

+

如果你把新的屬性加入到已經被用作建構子函數的原型物件裡的話,就會把新的屬性加入到從原型繼承屬性的所有物件裡。例如,你可以使用如下語句把 specialty 屬性加入到所有的職員︰

+
Employee.prototype.specialty = "none";
+
+

JavaScript 一執行這個語句,mark 物件也就會有這個值為 "none" 的 specialty 屬性。下面的圖解顯示出加入這個屬性給 Employee 原型的效果,以及從 Engineer 原型覆蓋這個屬性。

+

Image:hier04.gif
+ 圖 8.4: 加入屬性

+
+

{{ PreviousNext("Core_JavaScript_1.5_教學:職員的例子:物件的屬性:屬性的繼承", "Core_JavaScript_1.5_教學:職員的例子:更靈活的建構子") }}

+
+

 

diff --git "a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\350\201\267\345\223\241\347\232\204\344\276\213\345\255\220/\347\211\251\344\273\266\347\232\204\345\261\254\346\200\247/\345\261\254\346\200\247\347\232\204\347\271\274\346\211\277/index.html" "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\350\201\267\345\223\241\347\232\204\344\276\213\345\255\220/\347\211\251\344\273\266\347\232\204\345\261\254\346\200\247/\345\261\254\346\200\247\347\232\204\347\271\274\346\211\277/index.html" new file mode 100644 index 0000000000..fa38245533 --- /dev/null +++ "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\350\201\267\345\223\241\347\232\204\344\276\213\345\255\220/\347\211\251\344\273\266\347\232\204\345\261\254\346\200\247/\345\261\254\346\200\247\347\232\204\347\271\274\346\211\277/index.html" @@ -0,0 +1,24 @@ +--- +title: 屬性的繼承 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/職員的例子/物件的屬性/屬性的繼承 +--- +

屬性的繼承

+

假定你以如下語句建立了作為 WorkerBeemark 物件(如同 圖 8.3 所示)︰

+
mark = new WorkerBee;
+
+

當 JavaScript 看見 new 運算子的時候,他就會建立新的通用物件,並且把這個新物件當作 this 關鍵字的值傳給 WorkerBee 的建構子函數。建構子函數會明確的設定 projects 屬性的值,並且隱含的把 __proto__ 屬性內部的值設定成 WorkerBee.prototype 的值。(這個屬性的名稱前後各有兩個底線字元。)__proto__ 屬性決定了用來返回屬性值的原型鏈。這些屬性一經設定,JavaScript 返回新的物件,且代入語句會把變數 mark 設定給這個物件。

+

這個過程並不會把 mark 從原型鏈上繼承下來的屬性明確的放置在 mark 物件裡的值(局域值)。當你需要某個屬性值的時候,JavaScript 首先檢查這個值是否存在於物件裡。如果存在,就直接返回這個值。如果這些變數不在局域區塊裡,JavaScript 就會檢查原型鏈(使用 __proto__ 屬性)。如果在原型鏈上的物件有這個屬性的值,就會返回這個值。如果找不到這些屬性,JavaScript 會說這個物件並沒有這個屬性。以這種方式,mark 物件就有了如下屬性和值︰

+
mark.name = "";
+mark.dept = "general";
+mark.projects = [];
+
+

mark 物件從 mark.__proto__ 裡的原型物件繼承了 name 和 dept 屬性的值。他還藉由 WorkerBee 的建構子給 projects 屬性代入局域值。JavaScript 就這樣達成了屬性和值的繼承。這個過程的部分細節會在 再談屬性的繼承 裡討論。

+

因為這些建構子並不能讓你傳入特定實體的值,這些資訊是通用的。這些屬性值預設會被所有從 WorkerBee 建立的新物件所共享。當然你也可以修改任何屬性的值。因此,你可以給 mark 特定的資訊如下︰

+
mark.name = "Doe, Mark";
+mark.dept = "admin";
+mark.projects = ["navigator"];
+
+
+

{{ PreviousNext("Core JavaScript 1.5 教學:職員的例子:物件的屬性", "Core JavaScript 1.5 教學:職員的例子:物件的屬性:屬性的加入") }}

+
+

 

diff --git "a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\350\201\267\345\223\241\347\232\204\344\276\213\345\255\220/\351\232\216\345\261\244\347\232\204\345\273\272\347\253\213/index.html" "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\350\201\267\345\223\241\347\232\204\344\276\213\345\255\220/\351\232\216\345\261\244\347\232\204\345\273\272\347\253\213/index.html" new file mode 100644 index 0000000000..3e7a144656 --- /dev/null +++ "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\350\201\267\345\223\241\347\232\204\344\276\213\345\255\220/\351\232\216\345\261\244\347\232\204\345\273\272\347\253\213/index.html" @@ -0,0 +1,135 @@ +--- +title: 階層的建立 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/職員的例子/階層的建立 +--- +

階層的建立

+

這裡有一些方式可以定義適當的建構子函數,以實現 Employee 的階層結構。該如何選擇定義這些的方式,主要取決於你希望你的應用程式能做什麼。

+

本節展示如何使用非常簡單的(相對來說也比較沒有彈性)定義,以示範繼承是如何運作的。在這些定義中,當你建立物件的時候,你不能指定任何的屬性值。這些新建立的物件會簡單的取得預設值,稍後你就可以修改這些值。圖 8.2 以這些簡單的定義解說了階層結構。

+

在實際的應用程式中,你可能會定義允許你在建立物件的時候提供屬性值的建構子(參閱 更靈活的建構子 以取得資訊)。現在,這些簡單的定義示範繼承是如何發生的。

+

Image:hier02.gif
+ 圖 8.2: Employee 物件的定義

+

下面 Java 和 JavaScript 的 Employee 定義很類似。唯一的不同點是,在 Java 中,你需要為每一個屬性指定類型,但 JavaScript 不需要。而且你需要為 Java 類別建立明確的建構子方法。

+ + + + + + + + + + + +
JavaScriptJava
+
+function Employee () {
+this.name = "";
+this.dept = "general";
+}
+
+
+
+public class Employee {
+   public String name;
+   public String dept;
+   public Employee () {
+      this.name = "";
+      this.dept = "general";
+   }
+}
+
+
+

ManagerWorkerBee 的定義顯現出在如何指定高於繼承鏈的下一個物件時的不同點。在 JavaScript 中,你把原型實體作為建構子函數的 prototype 屬性的值加了上去。在你定義了建構子以後的任何時間點上,你都可以這麼做。在 Java 中,你只能在類別定義的內部指定親類別。你不能在類別定義的外部改變親類別。

+ + + + + + + + + + + +
JavaScriptJava
+
+function Manager () {
+this.reports = [];
+}
+Manager.prototype = new Employee;
+
+function WorkerBee () {
+this.projects = [];
+}
+WorkerBee.prototype = new Employee;
+
+
+
+public class Manager extends Employee {
+   public Employee[] reports;
+   public Manager () {
+      this.reports = new Employee[0];
+   }
+}
+
+public class WorkerBee extends Employee {
+   public String[] projects;
+   public WorkerBee () {
+      this.projects = new String[0];
+   }
+}
+
+
+

EngineerSalesPerson 的定義所建立的物件是傳承自 WorkerBee 以及 Employee。這些類型的物件具有在鏈上比他高層的所有物件的屬性。此外,定義中還使用指定給這些物件的新值來覆蓋被繼承的 dept 屬性的值。

+ + + + + + + + + + + +
JavaScriptJava
+
+function SalesPerson () {
+   this.dept = "sales";
+   this.quota = 100;
+}
+SalesPerson.prototype = new WorkerBee;
+
+function Engineer () {
+   this.dept = "engineering";
+   this.machine = "";
+}
+Engineer.prototype = new WorkerBee;
+
+
+
+public class SalesPerson extends WorkerBee {
+   public double quota;
+   public SalesPerson () {
+      this.dept = "sales";
+      this.quota = 100.0;
+   }
+}
+
+public class Engineer extends WorkerBee {
+   public String machine;
+   public Engineer () {
+      this.dept = "engineering";
+      this.machine = "";
+   }
+}
+
+
+

使用這些定義,你可以建立這些物件的實體,同時實體也為他們的屬性取得預設值。圖 8.3 解說使用這些 JavaScript 定義來建立新的物件,並顯示新物件的屬性值。

+

附註: 術語實體(instance)在以類別為基礎的語言中有特定的技術含義。在這些語言中,實體就是類別的獨立成員,而且在根本上就有別於類別。在 JavaScript 中,〝實體〞並沒有這些技術含義,因為 JavaScript 並沒有類別和實體的分別。然而,在談到 JavaScript 的時候,〝實體〞也可以在通俗上用來指,使用實際的建構子函數建立的物件。因此,在這些範例中,你也可以通俗的說 janeEngineer 的實體。類似的,儘管術語 親(parent)、子(child)、祖先(ancestor)子孫(descendant)在 JavaScript 中並沒有正式的含義;你也可以隨俗的使用這些術語,來談論在原型鏈中較高或較低的某個物件。

+

Image:hier03.gif
+ 8.3: 使用簡單的定義來建立物件

+
+

{{ PreviousNext("Core_JavaScript_1.5_教學:職員的例子", "Core_JavaScript_1.5_教學:職員的例子:物件的屬性") }}

+
+

 

diff --git "a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\350\277\255\344\273\243\345\231\250\345\222\214\347\224\242\347\224\237\345\231\250/index.html" "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\350\277\255\344\273\243\345\231\250\345\222\214\347\224\242\347\224\237\345\231\250/index.html" new file mode 100644 index 0000000000..21029266db --- /dev/null +++ "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\350\277\255\344\273\243\345\231\250\345\222\214\347\224\242\347\224\237\345\231\250/index.html" @@ -0,0 +1,293 @@ +--- +title: 迭代器和產生器 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/迭代器和產生器 +--- +

迭代器和產生器

+ +

處理集合中的每一項是很常見的操作。JavaScript 提供了許多迭代整個集合的方式,從簡單的 forfor each 循環到 map()filter() 以及 陣列的簡約式。迭代器和產生器是在 JavaScript 1.7 引入的,帶來在核心語言中直接迭代的觀念,並提供自訂 for...infor each 循環的行為的機制。

+ +
附注: yield 關鍵字只能在 HTML 裡包有 <script type="application/javascript;version=1.7"> 區塊(或更高的版本)的代碼區塊中使用。 XUL Script 標記可以存取這些功能,無須這個特別的區塊。
+ +

迭代器

+ +

迭代器(Iterator)是一種知道如何從集合裡每次以同樣的方式存取項目的物件。並保持對自己序列內部的目前位置的追蹤。在 JavaScript 中,迭代器是一種提供有能夠返回序列中的下一項的 next() 方法的物件。這個方法可以在序列用盡時,選擇性的出現 StopIteration 例外。

+ +

迭代器物件一經建立以後,可以明確的反覆呼叫 next() 來使用,或隱含的使用 JavaScript 的 for...infor each 結構。

+ +

可以使用 Iterator() 函數來為物件和陣列建立簡單的迭代器︰

+ +
var lang = { name: 'JavaScript', birthYear: 1995 };
+var it = Iterator(lang);
+
+ +

一經初始化以後,就可以呼叫 next() 方法依序從物件中存取鍵值對(key-value pair)︰

+ +
var pair = it.next(); // 鍵值對是 ["name", "JavaScript"]
+pair = it.next(); // 鍵值對是 ["birthYear", 1995]
+pair = it.next(); // 拋出 StopIteration 例外
+
+ +

可以使用 for...in 循環來取代直接呼叫 next() 方法。循環會在 StopIteration 例外出現的時候自動終止。

+ +
var it = Iterator(lang);
+for (var pair in it)
+  print(pair); // 依序輸出每一個 [key, value] 對
+
+ +

如果我們只想要迭代物件的鍵(key),我們可以把第二個參數 true 傳給 Iterator() 函數︰

+ +
var it = Iterator(lang, true);
+for (var key in it)
+  print(key); // 依序輸出每一個鍵
+
+ +

使用 Iterator() 存取物件內容的其中一個好處是已經加入到 Object.prototype 的自訂屬性不會被包含在序列裡。

+ +

Iterator() 也可以和陣列一起使用︰

+ +
var langs = ['JavaScript', 'Python', 'C++'];
+var it = Iterator(langs);
+for (var pair in it)
+  print(pair); // 依序輸出每一個 [index, language] 對
+
+ +

如同物件一般,傳入 true 作為第二個參數,將導致迭代出存在於陣列裡的索引︰

+ +
var langs = ['JavaScript', 'Python', 'C++'];
+var it = Iterator(langs, true);
+for (var i in it)
+  print(i); // 輸出 0,然後是 1,然後是 2
+
+ +

他也可以把 for 循環內部使用的 let 關鍵字的索引和值兩者,代入給區塊作用域的變數,並分割代入︰

+ +
var langs = ['JavaScript', 'Python', 'C++'];
+var it = Iterator(langs);
+for (let [i, lang] in it)
+ print(i + ': ' + lang); // 輸出 "0: JavaScript" 等等。
+
+ +

自訂的迭代器的定義

+ +

有一些物件所表示的集合項,應該以特定的方式來迭代。

+ + + +

JavaScript 可讓你編寫表示自訂迭代器邏輯的代碼,並把他連結到物件上。

+ +

我們將會建立簡單的 Range 物件,這個物件存放了 low 和 high 值。

+ +
function Range(low, high)
+{
+  this.low = low;
+  this.high = high;
+}
+
+ +

現在我們將會建立自訂的迭代器,使其返回包含在某一範圍內的整數序列。迭代器的界面必須要有由我們提供的 next() 方法,這個方法會返回來自序列的某一項,或拋出 StopIteration 例外。

+ +
function RangeIterator(range)
+{
+  this.range = range;
+  this.current = this.range.low;
+}
+RangeIterator.prototype.next = function()
+{
+  if (this.current > this.range.high)
+    throw StopIteration;
+  var current = this.current;
+  this.current += 1;
+  return current;
+};
+
+ +

我們的 RangeIterator 就是有範圍限制的實體的實際例子,並維護他自己的 current 屬性用以追蹤他沿著序列已走了多遠。

+ +

最後,把我們的 RangeIteratorRange 物件連繫在一起,我們需要加入特別的 __iterator__ 方法給 Range。這個方法會在當我們試圖迭代 Range 實體的時候呼叫,而且應該會返回 RangeIterator 的實體,這個實體實裝了迭代器的邏輯。

+ +
Range.prototype.__iterator__ = function()
+{
+  return new RangeIterator(this);
+};
+
+ +

掛在我們自訂的迭代器以後,我們可以迭代實體的某一範圍內,如下︰

+ +
var range = new Range(3, 5);
+for (var i in range)
+  print(i); // 輸出序列中的 3,然後是 4,然後是 5
+
+ +

產生器︰建構迭代器的較佳方式

+ +

儘管自訂的迭代器是很好用的工具,但在建立時的程式設計必須要很謹慎,因為需要明確的維護他們的內部狀態。產生器(Generator)提供另一種更強大的選擇︰可讓你編寫能夠維護自身狀態的單一函數來定義迭代器的演算法。

+ +

產生器是一種特殊類型的函數,他的運作方式類似迭代器的生產廠房。只要函數內含有一個以上的 yield 語句,就會變成產生器。

+ +

當產生器函數被呼叫的時候,並不會立即執行函數的本體;取而代之的是,他會返回產生器迭代器(generator-iterator)物件。每次呼叫產生器迭代器的 next() 方法,就會執行函數本體直到下一個 yield 語句,並返回他的結果。如果執行到函數的末端或到達 return 語句,就會拋出 StopIteration 例外。

+ +

配合例子是最佳的說明︰

+ +
function simpleGenerator()
+{
+  yield "first";
+  yield "second";
+  yield "third";
+  for (var i = 0; i < 3; i++)
+    yield i;
+}
+
+var g = simpleGenerator();
+print(g.next()); // 輸出 "first"
+print(g.next()); // 輸出 "second"
+print(g.next()); // 輸出 "third"
+print(g.next()); // 輸出 0
+print(g.next()); // 輸出 1
+print(g.next()); // 輸出 2
+print(g.next()); // 拋出 StopIteration
+
+ +

產生器函數可以像類別的 __iterator__ 方法一般直接的使用,大幅減少建立自訂的迭代器的代碼量。這裡是我們的 Range,使用產生器重新編寫︰

+ +
function Range(low, high)
+{
+  this.low = low;
+  this.high = high;
+}
+Range.prototype.__iterator__ = function()
+{
+  for (var i = this.low; i <= this.high; i++)
+    yield i;
+};
+var range = new Range(3, 5);
+for (var i in range)
+  print(i); // 輸出序列中的 3,然後是 4,然後是 5
+
+ +

並不是所有的產生器都會終止;有可能建立出表示無限序列的產生器。下面的產生器實裝了費伯納契數列,每一個元素都是前面兩個元素的合︰

+ +
function fibonacci()
+{
+  var fn1 = 1;
+  var fn2 = 1;
+  while (1)
+  {
+    var current = fn2;
+    fn2 = fn1;
+    fn1 = fn1 + current;
+    yield current;
+  }
+}
+
+var sequence = fibonacci();
+print(sequence.next()); // 1
+print(sequence.next()); // 1
+print(sequence.next()); // 2
+print(sequence.next()); // 3
+print(sequence.next()); // 5
+print(sequence.next()); // 8
+print(sequence.next()); // 13
+
+ +

產生器函數可以接受參數,這個參數是用來約束第一次被呼叫的函數。產生器可以使用 return 語句來終止(並導致 StopIteration 例外的出現)。下面的 fibonacci() 變體接受選用性的 limit 參數,一旦通過限制就會終止。

+ +
function fibonacci(limit)
+{
+  var fn1 = 1;
+  var fn2 = 1;
+  while (1)
+  {
+    var current = fn2;
+    fn2 = fn1;
+    fn1 = fn1 + current;
+    if (limit && current > limit)
+      return;
+    yield current;
+  }
+}
+
+ +

高階的產生器

+ +

產生器會計算出要求他們產生的值,這可讓產生器更有效率的表示需要耗費大量計算的序列,甚至是上面示範的無窮數列。

+ +

除了 next() 方法以外,產生器迭代器物件還有 send() 方法,可以用來修改產生器的內部狀態。傳遞給 send() 的值將會被視為中止產生器的最後一個 yield 語句的結果。在你可以使用 send() 來傳送指定的值之前,你必須至少呼叫一次 next() 來啟動產生器。

+ +

這裡是使用 send() 來重新開始數列的費伯納契數產生器︰

+ +
function fibonacci()
+{
+  var fn1 = 1;
+  var fn2 = 1;
+  while (1)
+  {
+    var current = fn2;
+    fn2 = fn1;
+    fn1 = fn1 + current;
+    var reset = yield current;
+    if (reset){
+        fn1 = 1;
+        fn2 = 1;
+    }
+  }
+}
+
+var sequence = fibonacci();
+print(sequence.next());     // 1
+print(sequence.next());     // 1
+print(sequence.next());     // 2
+print(sequence.next());     // 3
+print(sequence.next());     // 5
+print(sequence.next());     // 8
+print(sequence.next());     // 13
+print(sequence.send(true)); // 1
+print(sequence.next());     // 1
+print(sequence.next());     // 2
+print(sequence.next());     // 3
+ +
附注: 作為有趣的一點,呼叫 send(undefined) 就相當於呼叫 next()。然而,使用除了 undefined 以外的任意值啟動新生的產生器,在呼叫 send() 的時候,將會引起 TypeError 例外。
+ +

你可以藉由呼叫產生器的 throw() 方法,並傳入他應該拋出的例外值,強迫產生器拋出例外。例外將會從目前被中止的產生器的位置拋出例外,就如同目前被中止的 yield 被替換成 throw value 語句一樣。

+ +

如果在拋出例外的處理期間沒有遇到 yield,然後例外將會不斷傳播直到呼叫 throw(),且隨後呼叫 next() 將導致 StopIteration 被拋出。

+ +

產生器有可以強迫關閉他自己的 close() 方法。關閉產生器的效果是︰

+ +
    +
  1. 執行所有在產生器函數裡的 finally 子句。
  2. +
  3. 如果 finally 子句拋出除了 StopIteration 以外的任何例外,例外會被傳播到 close() 方法的呼叫者。
  4. +
  5. 產生器終止。
  6. +
+ +

產生器的表達式

+ +

陣列簡約式主要的缺點是他們會造成在記憶體中建構出完整的新陣列。如果輸入的簡約式本身是小型的陣列其開銷還不明顯 - 但如果輸入的是大型的陣列或耗費資源(甚至是無限大)的產生器,新陣列的建立就會產生問題。

+ +

產生器能夠延後計算他們要求的所需計算的項的序列。產生器表達式在語法上幾乎等同於 陣列的簡約式 - 他們使用圓括弧取代方括號 - 但不是建構陣列,他們建立可以延後執行的產生器。你可以把他們想成建立產生器的簡寫語法。

+ +

假設我們有一個迭代器 it 可以迭代出大型的整數序列。我們想要建立可以迭代出雙倍的新迭代器。陣列簡約式會在記憶體中建立含有雙倍值的完整的陣列︰

+ +
var doubles = [i * 2 for (i in it)];
+
+ +

產生器表達式一方面會建立新的迭代器,能夠建立他們所需的雙倍值︰

+ +
var it2 = (i * 2 for (i in it));
+print(it2.next()); // 來自 it 的第一個值,雙倍
+print(it2.next()); // 來自 it 的第二個值,雙倍
+ +

如果把產生器表達式當作參數傳給函數,函數呼叫所使用的圓括弧意味著可以省略外部的圓括弧︰

+ +
var result = doSomething(i * 2 for (i in it));
+
+ +

 

+ +

{{ PreviousNext("Core_JavaScript_1.5_教學:陣列的運用", "Core_JavaScript_1.5_教學:物件模型的細節") }}

+ +

{{ languages( { "en": "en/Core_JavaScript_1.5_Guide/Iterators_and_Generators" } ) }}

diff --git "a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\201\213\347\256\227\345\255\220/\346\257\224\350\274\203\351\201\213\347\256\227\345\255\220/index.html" "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\201\213\347\256\227\345\255\220/\346\257\224\350\274\203\351\201\213\347\256\227\345\255\220/index.html" new file mode 100644 index 0000000000..2ce01c1501 --- /dev/null +++ "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\201\213\347\256\227\345\255\220/\346\257\224\350\274\203\351\201\213\347\256\227\345\255\220/index.html" @@ -0,0 +1,14 @@ +--- +title: 比較運算子 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/運算子/比較運算子 +--- +

 

+

比較運算子

+

This seems to me kind of poorly explained, mostly the diference betwen "==" and "==="...比較運算子比較他的運算元,並根據比較是否為真的結果返回邏輯值。運算元可以是數值、字串、邏輯或物件的值。字串是以 Unicode 的值作為標準的字典順序來比較。在大多數情況下,如果兩個運算元不是同樣的類型,JavaScript 會為了比較而嘗試把運算元轉換為適當的類型。(本規則的唯一例外是 ===!==,他會進行“嚴格的”相等性和不相等性的檢查,且在檢查等相性之前,並不會把運算元轉換為相容的類型。)通常以數值進行比較。下表以範例代碼解明比較運算子︰

+
var var1 = 3, var2 = 4;
+
+ +
運算子 說明 返回 true 的範例
等於 (==) 運算元相等時,返回 true。 3 == var1

"3" == var1

3 == '3'
不等於 (!=) 運算元不相等時,返回 true。 var1 != 4
var2 != "3"
嚴格的等於 (===) 運算元相等且類型相同時,返回 true。 3 === var1
嚴格的不等於 (!==) 運算元不相等或類型不相同時,返回 true。 var1 !== "3"
3 !== '3'
大於 (>) 左邊的運算元大於右邊的運算元時,返回 true。 var2 > var1
"12" > 2
大於或等於 (>=) 左邊的運算元大於或等於右邊的運算元時,返回 true。 var2 >= var1
var1 >= 3
小於 (<) 左邊的運算元小於右邊的運算元時,返回 true。 var1 < var2
"12" < "2"
小於或等於 (<=) 左邊的運算元小於或等於右邊的運算元時,返回 true。 var1 <= var2
var2 <= 5
+

表 3.3: 比較運算子

+

{{ PreviousNext("Core_JavaScript_1.5_教學:Operators:代入運算子", "Core_JavaScript_1.5_教學:運算子:算術運算子") }}

+

{{ languages( { "en": "en/Core_JavaScript_1.5_Guide/Operators/Comparison_Operators", "es": "es/Gu\u00eda_JavaScript_1.5/Operadores/Operadores_de_comparaci\u00f3n", "fr": "fr/Guide_JavaScript_1.5/Op\u00e9rateurs/Op\u00e9rateurs_de_comparaison", "ja": "ja/Core_JavaScript_1.5_Guide/Operators/Comparison_Operators", "pl": "pl/Przewodnik_po_j\u0119zyku_JavaScript_1.5/Operatory/Operatory_por\u00f3wnania" } ) }}

diff --git "a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\226\211\345\214\205\347\232\204\351\201\213\347\224\250/index.html" "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\226\211\345\214\205\347\232\204\351\201\213\347\224\250/index.html" new file mode 100644 index 0000000000..0e0905730f --- /dev/null +++ "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\226\211\345\214\205\347\232\204\351\201\213\347\224\250/index.html" @@ -0,0 +1,227 @@ +--- +title: 閉包的運用 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/閉包的運用 +--- +

閉包的運用

+

閉包(Closure)經常會被認為是 JavaScript 的高級機能,但了解閉包是精通語言的必要之事。

+

思考以下的函數︰

+
function init() {
+  var name = "Mozilla";
+  function displayName() {
+    alert(name);
+  }
+  displayName();
+}
+
+

init() 函數建立了稱為 name 的局域變數,然後定義了稱為 displayName() 的函數。displayName() 是內部的函數 - 他是在 init() 內部定義的,而且只在函數本體內部才可使用。displayName() 沒有他自己的局域變數,但會重複使用在外部函數裡所宣告的 name 變數。

+

本例只會做一點事 - 試試執行代碼看會發生什麼。這是詞彙作用域的範例︰在 JavaScript 中,變數的作用域是由他自己在原始碼中的位置所定義的,且內部的函數能夠存取宣告於外部作用域的變數。

+

現在思考下例︰

+
function makeFunc() {
+  var name = "Mozilla";
+  function displayName() {
+    alert(name);
+  }
+  return displayName;
+}
+
+var myFunc = makeFunc();
+myFunc();
+
+

如果你執行這個代碼,將會發生和前一個 init() 例子完全相同的效果︰字串 "Mozilla" 將會被顯示在 JavaScript 的警告方框中。其中的不同點 - 以及有趣的一點 - 是內部的 displayName() 函數會在執行之前從外部的函數所返回。

+

代碼的運作看起來也許很不直覺。通常說,在函數內部的局域變數只存在於函數執行的期間。一旦 makeFunc() 執行完畢,預期不再需要 name 變數是很合理的。由於代碼仍舊以預期般的運作,很明顯情況並不如此。

+

對於這個難題的解答是 myFunc 已經變成閉包了。閉包是一種特殊的物件,其中結合了兩樣東西︰函數,和函數所建立的環境。環境由任意的局域變數所組成,這些變數是由在閉包建立的時間點上存在於作用域裡的所有變數。既然如此,myFunc 就是結合了 displayName 函數和閉包建立之後就存在的 "Mozilla" 字串這兩者的閉包。

+

這裡還有更為有趣的範例 - makeAdder 函數︰

+
function makeAdder(x) {
+  return function(y) {
+    return x + y;
+  };
+}
+
+var add5 = makeAdder(5);
+var add10 = makeAdder(10);
+
+print(add5(2));  // 7
+print(add10(2)); // 12
+
+

在這個範例中,我們已經定義了函數 makeAdder(x),可接受單一參數 x,並返回新的函數。返回的函數會接受單一參數 y,並返回 xy 的合。

+

就本質而言,makeAdder 是函數的製造機 - 他會建立可以把指定的值和他們的參數相加的函數。在上例中,我們使用了我們的函數製造機來建立兩個新的函數 - 一個給他自己的參數加上 5,另一個則加上 10。

+

add5add10 兩個都是閉包。他們共享相同的函數本體的定義,但保存了不同的環境變數。在 add5 的環境中,x 是 5。至於互有關連的 add10x 是 10。

+

實用的閉包

+

該是拋開理論的時候了 - 但是閉包真的有用嗎?讓我們思考閉包潛在的用處。閉包讓你把一些資料(環境)和可操作資料的函數聯繫在一起。這一點明顯和物件導向程式設式並行不悖,物件可讓我們把一些資料(物件的屬性)和一個以上的方法聯繫在一起。

+

因此,如果通常你會在某個地方使用附有單一方法的物件,你可以在這些地方使用閉包。

+

視情況你可能會想這樣做,這在 Web 上尤其常見。我們寫在 Web 上的 JavaScript 代碼多半是以事件為基礎 - 我們定義了一些行為,然後把這些行為和由使用者所觸發的事件(如 click 或 keypress)連繫在一起。我們的代碼通常被連繫為 Callback︰在回應事件時,所執行的單一函數。

+

這裡有個實際的例子︰假如我們希望在頁面上加入可以調整頁面文字的按鈕。以像素為單位,指定 body 元素的 font-size 是一個方法,然後以 em 為單位,設定在頁面上(如頁眉)的其他元素的大小︰

+
body {
+  font-family: Helvetica, Aria, sans-serif;
+  font-size: 12px;
+}
+
+h1 {
+  font-size: 1.5em;
+}
+h2 {
+  font-size: 1.2em;
+}
+
+

我們的互動式文字大小按鈕可以改變 body 元素的 font-size 屬性,拜相對單位之賜,接著對其他的元素做調整。

+

JavaScript 代碼︰

+
function makeSizer(size) {
+  return function() {
+    document.body.style.fontSize = size + 'px';
+  };
+}
+
+var size12 = makeSizer(12);
+var size14 = makeSizer(14);
+var size16 = makeSizer(16);
+
+

現在 size12size14size16 這些函數可分別調整 body 文字的大小為 12、14 和 16 像素。我們可以把代碼和按鈕(本例中使用的是連結)連繫在一起,如下︰

+
function setupButtons() {
+  document.getElementById('size-12').onclick = size12;
+  document.getElementById('size-14').onclick = size14;
+  document.getElementById('size-16').onclick = size16;
+}
+
<a href="#" id="size-12">12</a>
+<a href="#" id="size-14">14</a>
+<a href="#" id="size-16">16</a>
+
+

 

+

使用閉包模擬私有的方法

+

像 Java 這類語言可以把方法宣告為私有的,意思是這些方法只能被同一類別的其他方法所呼叫。

+

JavaScript 並不提供做這些事的原生方式,但可以使用閉包來模擬私有方法。私有方法不只是對限制代碼的存取這方面有用︰同時也是管理你的全域命名空間的強大方式,把非必要的方法堆在公開的界面裡。

+

這裡是如何使用閉包來定義可以存取私有函數和變數的公開函數︰

+
var Counter = (function() {
+  var privateCounter = 0;
+  function changeBy(val) {
+    privateCounter += val;
+  }
+  return {
+    increment: function() {
+      changeBy(1);
+    },
+    decrement: function() {
+      changeBy(-1);
+    },
+    value: function() {
+      return privateCounter;
+    }
+  }
+})();
+
+alert(Counter.value()); /* 顯示 0 */
+Counter.increment();
+Counter.increment();
+alert(Counter.value()); /* 顯示 2 */
+Counter.decrement();
+alert(Counter.value()); /* 顯示 1 */
+
+

在此完成了很多事。在上一個範例中,每一個閉包都有他自己的環境;此處我們建立了由三個函數所共享的單一環境Counter.incrementCounter.decrementCounter.value

+

共享的環境是建立在無名函數的本體內,無名函數一經定義就會開始執行。環境內含兩個私有項︰稱作 privateCounter 的變數,以及稱作 changeBy 的函數。這兩個私有項都不能在無名函數外部被直接存取。相對的,必須由三個公開的函數來存取這些私有項,這三個函數是從無名函數的封裝器所返回的。

+

這三個公開的函數共享閉包的同一個環境。感謝 JavaScript 的辭彙作用域,這三個函數都能存取 privateCounter 變數和 changeBy 函數。

+

按照這個方式來運用閉包,可以得到通常是附加在物件導向程式設計裡的資料隱藏和封裝的好處。

在循環中建立閉包︰常見的錯誤

+

在 JavaScript 1.7 引入 let 關鍵字以前,閉包常見的問題出現在當閉包是在循環內部建立的時候。思考以下的例子︰

+
<p id="help">這裡會顯示有用的提示</p>
+<p>E-mail: <input type="text" id="email" name="email"></p>
+<p>姓名: <input type="text" id="name" name="name"></p>
+<p>年齡: <input type="text" id="age" name="age"></p>
+
+
function showHelp(help) {
+  document.getElementById('help').innerHTML = help;
+}
+
+function setupHelp() {
+  var helpText = [
+      {'id': 'email', 'help': '你的 e-mail 位址'},
+      {'id': 'name', 'help': '你的完整姓名'},
+      {'id': 'age', 'help': '你的年齡(你必須大於 16 歲)'}
+    ];
+
+  for (var i = 0; i < helpText.length; i++) {
+    var item = helpText[i];
+    document.getElementById(item.id).onfocus = function() {
+      showHelp(item.help);
+    }
+  }
+}
+
+

helpText 陣列定義了三個有用的提示,每一個都和文件中的輸入欄位的 ID 連繫在一起。循環會在這些定義裡巡回一圈,給每一個顯示相關連的說明的方法使用 onfocus 事件。

+

如果你試著執行這個代碼,你會發現他並不如預期般的運作。不管你把焦點放在哪一個欄位上,都會顯示關於你的年齡的訊息。

+

這其中的原因是代入給 onfocus 的函數是閉包;這些閉包是由函數的定義和從 setupHelp 函數的作用域所捕捉到的環境所組成的。這三個閉包已經建立了,但每一個都共享同一個環境。每次執行 onfocus 的 Callback 的時候,循環執行的是他自己的閉包,以及指向 helpText 列表中的最後一項的變數 item(由三個閉包所共享)。

+

本例的解決方法是使用更多的閉包︰特別是使用稍早已描述過的函數製造機︰

+
function showHelp(help) {
+  document.getElementById('help').innerHTML = help;
+}
+
+function makeHelpCallback(help) {
+  return function() {
+    showHelp(help);
+  };
+}
+
+function setupHelp() {
+  var helpText = [
+      {'id': 'email', 'help': '你的 e-mail 位址'},
+      {'id': 'name', 'help': '你的完整姓名'},
+      {'id': 'age', 'help': '你的年齡(你必須大於 16 歲)'}
+    ];
+
+  for (var i = 0; i < helpText.length; i++) {
+    var item = helpText[i];
+    document.getElementById(item.id).onfocus = makeHelpCallback(item.help);
+  }
+}
+
+

這次就如預期般運作。而不是所有的 Callback 都共享單一的環境,makeHelpCallback 給每一個 help 建立新的環境,此處的 help 參照了相對應的 helpText 陣列的字串。

+

如果你使用 JavaScript 1.7 以上的版本,你可以使用 let 關鍵字建立具有區塊層級作用域的變數來解決這個問題︰

+
  for (var i = 0; i < helpText.length; i++) {
+    let item = helpText[i];
+    document.getElementById(item.id).onfocus = function() {
+      showHelp(item.help);
+    }
+  }
+
+

let 關鍵字使 item 變數改用具有區塊層級的作用域來建立,導致 for 循環每一次反復都能建立新的參考。意思是每一個閉包都會捕捉到個別的變數,解決因為共享同一環境所引起的問題。

效能的考量

+

如果並沒有特定的任務需要用到閉包,且閉包對 Script 的效能會有負面的影響,因此在其他函數的內部裡建立不必要的函數是很不智的。

+

例如,當建立新的物件或類別時,通常應該要把方法和物件的原型連繫在一起,而不是在物件的建構子中定義。這其中的理由是,每當呼叫建構子的時候,就要把方法代入(也就是每一個物件正在建立的時候)。

+

思考以下不切實際的例子︰

+
function MyObject(name, message) {
+  this.name = String(name);
+  this.message = String(message);
+  this.getName = function() {
+    return this.name;
+  };
+
+  this.getMessage = function() {
+    return this.message;
+  };
+}
+
+

上面的代碼並未從閉包的行為中取得好處,應該改用重整過的形式︰

+
function MyObject(name, message) {
+  this.name = String(name);
+  this.message = String(message);
+}
+MyObject.prototype = {
+  getName: function() {
+    return this.name;
+  },
+  getMessage: function() {
+    return this.message;
+  }
+};
+
+

或者是︰

+
function MyObject(name, message) {
+  this.name = String(name);
+  this.message = String(message);
+}
+MyObject.prototype.getName = function() {
+  return this.name;
+};
+MyObject.prototype.getMessage = function() {
+  return this.message;
+};
+
+

在上面這兩個範例中,繼承的原型可以被所有的物件所共享,而且在每一次建立物件時不再需要方法的定義。參閱 Core_JavaScript_1.5_教學#物件模型的細節 以取得更多細節。

+

{{ PreviousNext("Core_JavaScript_1.5_教學:預先定義的函數:escape_和_unescape_函數", "Core_JavaScript_1.5_教學:物件和屬性") }}

+

{{ languages( { "en": "en/Core_JavaScript_1.5_Guide/Working_with_Closures", "ja": "ja/Core_JavaScript_1.5_Guide/Working_with_Closures", "pl": "pl/Przewodnik_po_języku_JavaScript_1.5/Praca_z_zamknięciami" } ) }}

diff --git "a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\227\234\346\226\274/index.html" "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\227\234\346\226\274/index.html" new file mode 100644 index 0000000000..de638e2a9f --- /dev/null +++ "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\227\234\346\226\274/index.html" @@ -0,0 +1,47 @@ +--- +title: 關於 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/關於 +--- +

 

+

JavaScript 各版本的新機能

+ +

你應該知道什麼

+

本教學假定你已具備如下背景知識︰

+ +

具有某些語言(如 C 或 Visual Basic)的程式設計經驗會很有幫助,但不是必要的。

+

JavaScript 的版本

+ +
JavaScript 的版本 Navigator 的版本
JavaScript 1.0 Navigator 2.0
JavaScript 1.1 Navigator 3.0
JavaScript 1.2 Navigator 4.0-4.05
JavaScript 1.3 Navigator 4.06-4.7x
JavaScript 1.4  
JavaScript 1.5 Navigator 6.0
Mozilla(開放源始碼的瀏覽器)
JavaScript 1.6 Firefox 1.5,其他以 Mozilla 1.8 為基礎的產品
JavaScript 1.7 Firefox 2,其他以 Mozilla 1.8.1 為基礎的產品
JavaScript 1.8 Firefox 3,其他以 Gecko 1.9 為基礎的產品
+

表 1: JavaScript 和 Navigator 版本
+
+Netscape Enterprise Server 的各版本亦分別支援不同的 JavaScript 版本。為幫助你編寫相容於 Enterprise Server 各版本的 Script,本教學使用略稱來表示 Server 的版本。

+ +
略稱 Enterprise Server 的版本
NES 2.0 Netscape Enterprise Server 2.0
NES 3.0 Netscape Enterprise Server 3.0
+

表 2: Netscape Enterprise Server 各版本的略稱

+

在何處取得 JavaScript 資訊

+

以下書藉內含核心 JavaScript 的文件︰

+ +

如果你是 JavaScript 的新手,就從 Core JavaScript 教學 著手。如果你已具備穩固的基礎,你可以從 Core JavaScript 參考 取得個別物件或語法的進一步細節。

+

JavaScript 的學習提示

+

JavaScript 的入門很簡單: 只需要有最新的 Web 瀏覽器。本教學使用了一些目前只能在最新版本的 Firefox(以及其化的 Gecko 瀏覽器)執行的 JavaScript 機能,所以建議使用最新版本的 Firefox。

+

互動式解譯器

+

互動式 JavaScript 的提示對於語言的學習有極大的幫助,使你不必儲存檔案或更新頁面就能以互動方式加以試驗。從 Firefox 的“工具”選單可以找到“錯誤主控台”,可提供嘗試互動式 JavaScript 的簡單途徑: 只需輸入一行代碼,並按下“執行”按鈕。

+

Image:ErrorConsole.png

+

Firebug

+

更高級的互動式提示還可使用第三方擴充套件 Firebug。Firebug 提供了高級的 DOM 檢視器(JavaScript 除錯器)、分析工具和各種實用工具︰

+

Image:Firebug.png

+

其中 Firebug 提供的最有用的功能是 console.log(),把自己的參數輸出到 Firebug 主控台的函數。有別於其他程式語言,JavaScript 並沒有輸出至標準輸出的概念console.log() 提供了很有用的替代品,使你更容易觀察程式的執行。

+

本教學的許多範例中使用 alert() 顯示執行的訊息。如果你已安裝 Firebug,你可以使用 console.log() 取代 alert() 來執行這些範例。

+

文件慣例

+

JavaScript 應用程式可執行於許多的作業系統,本文的資訊可套用於所有的版本。檔案和資料夾路徑採用 Windows 格式(使用反斜線 (\) 分割資料夾名稱)。對 Unix 版本而言,資料夾路徑也是相同的,除非你使用斜線 (/) 取代反斜線來分割資料夾名稱。

+

本教學使用如下形式的 URL︰

+

http://server.domain/path/file.html

+

在上面的 URL 中,“server”表示執行應用程式的伺服器的名稱(例如︰research1、www),“domain”表示網際網路的域名(例如︰netscape.com、uiuc.edu),“path”表示在伺服器上的資料夾結構,“file.html”表示個別的檔名。一般來說,在 URL 裡以標準的等寬字型顯示的斜體表示是可修改的項目。如果你的伺服器已啟用 Secure Sockets Layer (SSL),URL 的 http 就應該取代為 https。

+

本教程使用如下的字型慣例︰

+ +

{{ PreviousNext("Core_JavaScript_1.5_教學", "Core_JavaScript_1.5_教學:JavaScript_概要") }}

+

{{ languages( { "en": "en/Core_JavaScript_1.5_Guide/About", "es": "es/Gu\u00eda_JavaScript_1.5/Acerca_de_esta_gu\u00eda", "fr": "fr/Guide_JavaScript_1.5/\u00c0_propos", "ja": "ja/Core_JavaScript_1.5_Guide/About", "ko": "ko/Core_JavaScript_1.5_Guide/About", "pl": "pl/Przewodnik_po_j\u0119zyku_JavaScript_1.5/O_tym_przewodniku", "zh-cn": "cn/Core_JavaScript_1.5_Guide/\u5173\u4e8e" } ) }}

diff --git "a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\240\220\345\205\210\345\256\232\347\276\251\347\232\204\345\207\275\346\225\270/parseint_\345\222\214_parsefloat_\345\207\275\346\225\270/index.html" "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\240\220\345\205\210\345\256\232\347\276\251\347\232\204\345\207\275\346\225\270/parseint_\345\222\214_parsefloat_\345\207\275\346\225\270/index.html" new file mode 100644 index 0000000000..65d1287175 --- /dev/null +++ "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\240\220\345\205\210\345\256\232\347\276\251\347\232\204\345\207\275\346\225\270/parseint_\345\222\214_parsefloat_\345\207\275\346\225\270/index.html" @@ -0,0 +1,21 @@ +--- +title: parseInt 和 parseFloat 函數 +slug: >- + Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/預先定義的函數/parseInt_和_parseFloat_函數 +--- +

 

+
+

parseInt 和 parseFloat 函數

+

這兩個〝分析〞函數,parseIntparseFloat,會在給與字串作為參數時返回數值。

+

parseFloat 的語句如下

+
parseFloat(str)
+
+

此處的 parseFloat 會分析他自己的參數,字串 str,並試著返回浮點數。如果遇到正負符號 (+ 或 -)、數字 (0-9)、小數點、指數以外的字元,他就會返回在此之前的數值,並忽略那些字元。如果連第一個字元也不可以轉換為數字,就會返回〝NaN〞(不是數字)。

+

parseInt 的語句如下

+
parseInt(str [, radix])
+
+

parseInt 會分析他自己的參數,字串 str,並試著返回由第二個參數所指定的 radix (基數)的整數。radix 為選用性參數。舉例來說,以 10 為底的基數表示要轉換為十進制數,8 是八進制,16 是十六進制,依此類推。對於 10 以上的基數,就會使用字母來表示大於九的數字。例如,十六進制數(基數 16),就會用到 A 到 F 的字母。

+

如果 parseInt 遇到不是在指定基數之內的字元,就會直接忽略這個字元及其隨後字元,並返回在此之前已經分析出來的整數值。如果連第一個字元也不可以轉換為指定基數之內的字元,就會返回〝NaN〞。parseInt 函數會切除字串以取得整數值。

+
+

{{ PreviousNext("Core_JavaScript_1.5_教學:預先定義的函數:isNaN_函數", "Core_JavaScript_1.5_教學:預先定義的函數:Number_和_String_函數") }}

+

{{ languages( { "en": "en/Core_JavaScript_1.5_Guide/Predefined_Functions/parseInt_and_parseFloat_Functions", "es": "es/Gu\u00eda_JavaScript_1.5/Funciones_predefinidas/Funciones_parseInt_y_parseFloat", "fr": "fr/Guide_JavaScript_1.5/Fonctions_pr\u00e9d\u00e9finies/Les_fonctions_parseInt_et_parseFloat", "ja": "ja/Core_JavaScript_1.5_Guide/Predefined_Functions/parseInt_and_parseFloat_Functions", "pl": "pl/Przewodnik_po_j\u0119zyku_JavaScript_1.5/Funkcje_predefiniowane/Funkcje_parseInt_i_parseFloat" } ) }}

diff --git "a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\240\220\345\205\210\345\256\232\347\276\251\347\232\204\346\240\270\345\277\203\347\211\251\344\273\266/array_\347\211\251\344\273\266/index.html" "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\240\220\345\205\210\345\256\232\347\276\251\347\232\204\346\240\270\345\277\203\347\211\251\344\273\266/array_\347\211\251\344\273\266/index.html" new file mode 100644 index 0000000000..a806c4dfac --- /dev/null +++ "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\240\220\345\205\210\345\256\232\347\276\251\347\232\204\346\240\270\345\277\203\347\211\251\344\273\266/array_\347\211\251\344\273\266/index.html" @@ -0,0 +1,151 @@ +--- +title: Array 物件 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/預先定義的核心物件/Array_物件 +--- +

 

+

Array 物件

+

JavaScript 並沒有明確的陣列資料類型。不過你可以在你的應用程式中,使用預先定義的 Array 物件和他的方法來運用陣列。Array 物件有各種陣列的操作方法,如合併、反轉、排序。他還有用來確定陣列的長度的屬性,還有和正規表達式一起使用的屬性。

+

陣列是值的有序集合,你可以使用名稱或索引來參考這些值。例如,你有一個稱作 emp 的陣列,其中內含職員的名字,並按照職員的編號來索引。於是 emp{{ mediawiki.external(1) }} 就代表編號 1 的職員,emp{{ mediawiki.external(2) }} 就代表編號 2 的職員,依此類推。

+

 

+

陣列的建立

+

Array 物件的建立如下︰

+
1. arrayObjectName = new Array(element0, element1, ..., elementN)
+2. arrayObjectName = new Array(arrayLength)
+
+

arrayObjectName 就是新物件的名稱、或者是既存物件的屬性。當使用 Array 的屬性和方法的時候,arrayObjectName 就是既存的 Array 物件的名稱、或者是既存物件的屬性。

+

element0, element1, ..., elementN 就是陣列元素的值的列表。如果指定了這個形式的話,陣列就會以指定的值作為元素來初始化,且陣列的 length 屬性會被設為參數的數目。

+

arrayLength 就是陣列的初期長度。下面的代碼建立帶有五個元素的陣列︰

+
billingMethod = new Array(5)
+
+

陣列的字面表達同時也是 Array 物件;舉例來說,下面的字面表達就是 Array 物件。參閱 陣列的字面表達 以取得陣列的字面表達的細節。

+
coffees = ["French Roast", "Columbian", "Kona"]
+
+

陣列的存放

+

你可以藉由把值代入給陣列自己的元素的方式來存放到陣列裡。例如,

+
emp[1] = "Casey Jones"
+emp[2] = "Phil Lesh"
+emp[3] = "August West"
+
+

你也可以在建立陣列的同時來作存放︰

+
myArray = new Array("Hello", myVar, 3.14159)
+
+

陣列元素的參考

+

你可以使用元素的序號來參考陣列的元素。例如,假設你定義了如下的陣列︰

+
myArray = new Array("Wind","Rain","Fire")
+
+

然後你可以使用 myArray{{ mediawiki.external(0) }} 來參考第一個元素,使用 myArray{{ mediawiki.external(1) }} 來參考第二個元素。

+

元素的索引是從零 (0) 開始的,不過陣列的長度(例如,myArray.length)反映的是陣列中的元素的數目。

+

Array 的方法

+

Array 物件有以下的方法︰

+ +

 

+
   myArray = new Array("1","2","3")
+   myArray = myArray.concat("a", "b", "c"); // myArray 現在是 ["1", "2", "3", "a", "b", "c"]
+
+

 

+ +

 

+
   myArray = new Array("Wind","Rain","Fire")
+   list = myArray.join(" - "); // list 的內容是 "Wind - Rain - Fire"
+
+

 

+ +

 

+
   myArray = new Array("1", "2", "3");
+   last=myArray.pop(); // MyArray 現在是 ["1", "2"], last = "3"
+
+

 

+ +

 

+
   myArray = new Array("1", "2");
+   myArray.push("3"); // MyArray 現在是 ["1", "2", "3"]
+
+

 

+ +

 

+
   myArray = new Array ("1", "2", "3");
+   myArray.reverse(); // 調換陣列的結果是 myArray = [ "3", "2", "1" ]
+
+

 

+ +

 

+
   myArray = new Array ("1", "2", "3");
+   first=myArray.shift(); // MyArray 現在是 ["2", "3"],first 是 "1"
+
+

 

+ +

 

+
   myArray = new Array ("a", "b", "c", "d", "e");
+   myArray = myArray.slice(1,4); // 從索引 1 為起點抽出所有的元素,直到索引 4 為止,返回 [ "b", "c", "d" ]
+
+

 

+ +

 

+
   myArray = new Array ("1", "2", "3", "4", "5");
+   myArray.splice(1,3,"a","b","c", "d"); // MyArray 現在是 ["1", "a", "b", "c", "d", "5"]
+   // 這個代碼從索引 1(也就是 "2")開始,把那裡的 3 個元素移除掉,
+   // 然後把所有的連續元素插入到那個位置。
+
+

 

+ +

 

+
   myArray = new Array("Wind","Rain","Fire")
+   myArray.sort(); // 排序陣列的結果是 myArrray = [ "Fire", "Rain", "Wind" ]
+
+

 

+

sort 也接受 Callback 函數以確定該如何排序陣列的內容。這個函數會對兩個值作比較,並返回三個值的其中一者︰

+ +

舉例來說,下面的代碼將以陣列最後面的字母來排序︰

+

 

+
   var sortFn = function(a,b){
+       if (a[a.length - 1] < b[b.length - 1]) return -1;
+       if (a[a.length - 1] > b[b.length - 1]) return 1;
+       if (a[a.length - 1] == b[b.length - 1]) return 0;
+       }
+   myArray.sort(sortFn); // 排序陣列的結果是 myArray = ["Wind","Fire","Rain"]
+
+

 

+ +

二維陣列

+

下面的代碼建立二維陣列。

+
a = new Array(4)
+for (i=0; i < 4; i++) {
+   a[i] = new Array(4)
+   for (j=0; j < 4; j++) {
+      a[i][j] = "["+i+","+j+"]"
+   }
+}
+
+

本例以如下的行來建立陣列︰

+
行 0:[0,0][0,1][0,2][0,3]
+行 1:[1,0][1,1][1,2][1,3]
+行 2:[2,0][2,1][2,2][2,3]
+行 3:[3,0][3,1][3,2][3,3]
+
+

陣列和正規表達式

+

如果有一個陣列是正規表達式和字串之間比對的結果,這個陣列會返回有關比對的資訊的屬性和元素。陣列可以是 RegExp.execString.matchString.split 的返回值。若需要與正規表達式一同使用陣列的資訊,詳見第四章,正規表達式

+

{{ PreviousNext("Core_JavaScript_1.5_教學:預先定義的核心物件", "Core_JavaScript_1.5_教學:預先定義的核心物件:Boolean_物件") }}

diff --git "a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\240\220\345\205\210\345\256\232\347\276\251\347\232\204\346\240\270\345\277\203\347\211\251\344\273\266/boolean_\347\211\251\344\273\266/index.html" "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\240\220\345\205\210\345\256\232\347\276\251\347\232\204\346\240\270\345\277\203\347\211\251\344\273\266/boolean_\347\211\251\344\273\266/index.html" new file mode 100644 index 0000000000..02648f7073 --- /dev/null +++ "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\240\220\345\205\210\345\256\232\347\276\251\347\232\204\346\240\270\345\277\203\347\211\251\344\273\266/boolean_\347\211\251\344\273\266/index.html" @@ -0,0 +1,12 @@ +--- +title: Boolean 物件 +slug: >- + Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/預先定義的核心物件/Boolean_物件 +--- +

 

+

Boolean 物件

+

Boolean 物件是原始的 Boolean 資料類型包裝而成。使用下面的語法來建立 Boolean 物件︰

+
booleanObjectName = new Boolean(value)
+
+

別把原始的布林值的 truefalseBoolean 物件的 true 和 false 值給混淆了。任何物件的值只要不是 undefinednull0NaN、空字串,即使是值為 false 的 Boolean 物件,當傳入到條件語句裡的時候,其求值結果仍為 true。參閱 if...else 語法 取得更進一步資訊。

+

{{ PreviousNext("Core_JavaScript_1.5_教學:預先定義的核心物件:Array_物件", "Core_JavaScript_1.5_教學:預先定義的核心物件:Date_物件") }}

diff --git "a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\240\220\345\205\210\345\256\232\347\276\251\347\232\204\346\240\270\345\277\203\347\211\251\344\273\266/date_\347\211\251\344\273\266/index.html" "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\240\220\345\205\210\345\256\232\347\276\251\347\232\204\346\240\270\345\277\203\347\211\251\344\273\266/date_\347\211\251\344\273\266/index.html" new file mode 100644 index 0000000000..ca94741f14 --- /dev/null +++ "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\240\220\345\205\210\345\256\232\347\276\251\347\232\204\346\240\270\345\277\203\347\211\251\344\273\266/date_\347\211\251\344\273\266/index.html" @@ -0,0 +1,82 @@ +--- +title: Date 物件 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/預先定義的核心物件/Date_物件 +--- +

 

+

Date 物件

+

JavaScript 並沒有日期的資料類型。不過你可以在你的應用程式中使用 Date 物件及其方法來使用日期和時間。Date 物件有非常大量的方法可用來設定、取得、操作日期。不過沒有任何的屬性。

+

JavaScript 處理日期的方式很類似 Java。這兩個語言有很多同樣的日期方法,而且這兩個語言都是以 1970 年 1 月 1 日 00:00:00 開始的毫秒數來儲存日期。

+

Date 物件的範圍是以 1970 年 1 月 1 日 (UTC) 為基準,從 -100,000,000 日一直到 100,000,000 日。

+

如下建立 Date 物件︰

+
dateObjectName = new Date([parameters])
+
+

此處的 dateObjectName 就是將要建立的 Date 物件的名稱;他可以是新的物件或是既存物件的屬性。

+

前敘語法中的 parameters 可以是下列的任何一種形式︰

+ +

JavaScript 1.2 及早期版本
+ Date 物件的行為如下︰

+ +

Date 物件的方法

+

用於處理日期和時間的 Date 物件的方法主要可分為這幾類︰

+ +

使用 "get" 和 "set" 方法,你可以分別取得或設定秒、分、時、日、星期、月、年。還有 getDay 方法可返回星期,但沒有相對應的 setDay 方法,因為星期會自動設定。這些方法使用整數來表示如下的這些值︰

+ +

舉例來說,假設你定義了如下日期︰

+
Xmas95 = new Date("December 25, 1995")
+
+

Xmas95.getMonth() 返回 11,而 Xmas95.getFullYear() 返回 1995。

+

getTimesetTime 方法對於日期的比較來說很有用。getTime 方法返回自 1970 年 1 月 1 日 00:00:00 以來的毫秒數。

+

例如,下面的代碼顯示今年的剩餘天數︰

+
today = new Date()
+endYear = new Date(1995,11,31,23,59,59,999) // 設定日和月
+endYear.setFullYear(today.getFullYear()) // 設定為今年
+msPerDay = 24 * 60 * 60 * 1000 // 一天的毫秒數
+daysLeft = (endYear.getTime() - today.getTime()) / msPerDay
+daysLeft = Math.round(daysLeft) // 返回今年的剩餘天數
+
+

本範例建立了名為 today 的 Date 物件,其中內含有今天的日期。然後,使用一天的毫秒數,計算今天和 endYear 之間的天數,使用 getTime 並捨入為天數。

+

The parse 方法對於把值從日期字串代入到既存的 Date 物件來說很有用。例如,下面的代碼使用 parsesetTime 把日期的值代入到 IPOdate 物件︰

+
IPOdate = new Date()
+IPOdate.setTime(Date.parse("Aug 9, 1995"))
+
+

Date 物件的使用︰範例

+

在下面的範例中,函數 JSClock() 返回以數位時鐘為格式的時間。

+
function JSClock() {
+   var time = new Date()
+   var hour = time.getHours()
+   var minute = time.getMinutes()
+   var second = time.getSeconds()
+   var temp = "" + ((hour > 12) ? hour - 12 : hour)
+   if (hour == 0)
+      temp = "12";
+   temp += ((minute < 10) ? ":0" : ":") + minute
+   temp += ((second < 10) ? ":0" : ":") + second
+   temp += (hour >= 12) ? " P.M." : " A.M."
+   return temp
+}
+
+

JSClock 函數首先建立稱為 time 的新 Date 物件;因為沒有提供參數,time 會以今天的日期和時間來建立。然後呼叫 getHoursgetMinutesgetSeconds 方法把時、分、秒的值代入到 hourminutesecond

+

以下的四個語句會以 time 為基準建立字串。第一個語句建立變數 temp,使用條件表達式把值代入;如果 hour 大於 12,就會是 (hour - 12),否則會是單純的 hour,除非 hour 為 0,這時就會是 12。

+

下一個語句把 minute 的值附加到 temp 裡。如果 minute 的值小於 10,條件表達式就會加上前置為零的字串;否則加上分隔用分號的字串。接下來的語句把秒的值以同樣方式附加到 temp。

+

最後,如果 hour 大於 12,條件表達式就把 "PM" 附加到 temp;否則就把 "AM" 附加到 temp

+

{{ PreviousNext("Core_JavaScript_1.5_教學:預先定義的核心物件:Boolean_物件", "Core_JavaScript_1.5_教學:預先定義的核心物件:Function_物件") }}

diff --git "a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\240\220\345\205\210\345\256\232\347\276\251\347\232\204\346\240\270\345\277\203\347\211\251\344\273\266/function_\347\211\251\344\273\266/index.html" "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\240\220\345\205\210\345\256\232\347\276\251\347\232\204\346\240\270\345\277\203\347\211\251\344\273\266/function_\347\211\251\344\273\266/index.html" new file mode 100644 index 0000000000..4acf1e73ca --- /dev/null +++ "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\240\220\345\205\210\345\256\232\347\276\251\347\232\204\346\240\270\345\277\203\347\211\251\344\273\266/function_\347\211\251\344\273\266/index.html" @@ -0,0 +1,45 @@ +--- +title: Function 物件 +slug: >- + Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/預先定義的核心物件/Function_物件 +--- +

 

+

Function 物件

+

預先定義的 Function 物件會把指定的 JavaScript 字串的代碼編譯成函數。

+

建立 Function 物件如下︰

+
functionObjectName = new Function ([arg1, arg2, ... argn], functionBody)
+
+

functionObjectName 就是變數的名稱或既存物件的屬性。他也可以是後跟小寫的事件處理器名稱的物件,如 window.onerror

+

arg1, arg2, ... argn 就是要被函數用作形式參數的名稱的參數。其中每一個都必須是字串,並合於有效的 JavaScript 識別子。例如 "x" 或 "theForm"。

+

functionBody 就是指定的 JavaScript 代碼的字串,將會編譯成函數本體。

+

Function 物件會在每一次被用到時求值。這比宣告函數並在你的代碼中呼叫還要沒效率,因為宣告過的函數已經編譯過了。

+

除了此處所描述的函數的定義方式以外,你也可以使用 function 語句和函數的表達式。參閱 Core JavaScript 1.5 參考 取得更進一步資訊。

+

下面的代碼把函數代入到變數 setBGColor。這個函數會設定目前文件的背景色。

+
var setBGColor = new Function("document.bgColor='antiquewhite'")
+
+

若要呼叫這個 Function 物件,你可以把指定的變數名稱如同函數一般來使用。下面的代碼執行了由 setBGColor 變數所指定的函數︰

+
var colorChoice="antiquewhite"
+if (colorChoice=="antiquewhite") {setBGColor()}
+
+

你可以使用下列任一方式把函數代入給事件處理器︰

+
1. document.form1.colorButton.onclick=setBGColor
+2. <INPUT NAME="colorButton" TYPE="button"
+      VALUE="Change background color"
+      onClick="setBGColor()">
+
+

上面所建立的變數 setBGColor 類似於宣告下面的函數︰

+
function setBGColor() {
+   document.bgColor='antiquewhite'
+}
+
+

把函數代入給變數類似於宣告函數,但有幾點不同︰

+ +

你可以在函數的內部嵌入函數。內嵌的(內部)函數對於包含這個函數的(外部)函數而言是私有的︰

+ +

{{ PreviousNext("Core_JavaScript_1.5_教學:預先定義的核心物件:Date_物件", "Core_JavaScript_1.5_教學:預先定義的核心物件:Math_物件") }}

diff --git "a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\240\220\345\205\210\345\256\232\347\276\251\347\232\204\346\240\270\345\277\203\347\211\251\344\273\266/math_\347\211\251\344\273\266/index.html" "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\240\220\345\205\210\345\256\232\347\276\251\347\232\204\346\240\270\345\277\203\347\211\251\344\273\266/math_\347\211\251\344\273\266/index.html" new file mode 100644 index 0000000000..8aa6bb0223 --- /dev/null +++ "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\240\220\345\205\210\345\256\232\347\276\251\347\232\204\346\240\270\345\277\203\347\211\251\344\273\266/math_\347\211\251\344\273\266/index.html" @@ -0,0 +1,69 @@ +--- +title: Math 物件 +slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/預先定義的核心物件/Math_物件 +--- +

 

+

Math 物件

+

預先定義的 Math 物件具有針對數學常數和函數的屬性和方法。例如,Math 物件的 PI 屬性有圓周率的值 (3.141...),你可以在應用程式中如下使用。

+
Math.PI
+
+

同樣的,Math 的方法就是標準的數學函數。其中包括三角函數、對數函數、指數函數、以及其他函數。例如,如果你想要使用三角函數 sine,你可以如下編寫。

+
Math.sin(1.56)
+
+

注意,Math 所有的三角函數的方法只接受以弧度為單位的參數。

+

下表列出了 Math 物件的方法。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
方法說明
abs絕對值。
sin, cos, tan標準三角函數;參數以弧度為單位。
acos, asin, atan, atan2反三角函數;返回值以弧度為單位。
exp, log指數函數和以 e 為底的自然對數。
ceil返回大於等於參數的最小整數。
floor返回小於等於參數的最大整數。
min, max返回兩個參數中最大的或最小的。
pow指數函數;第一個參數為底數,第二個為指數。
random返回介於 0 和 1 之間的隨機數。
round把參數捨入至最接近的整數。
sqrt平方根。
+

表 7.1: Math 的方法

+

有別於其他的物件,你永遠不需要自行建立 Math 物件。你永遠可以使用預先定義的 Math 物件。

+

{{ PreviousNext("Core_JavaScript_1.5_教學:預先定義的核心物件:Function_物件", "Core_JavaScript_1.5_教學:預先定義的核心物件:Number_物件") }}

diff --git "a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\240\220\345\205\210\345\256\232\347\276\251\347\232\204\346\240\270\345\277\203\347\211\251\344\273\266/number_\347\211\251\344\273\266/index.html" "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\240\220\345\205\210\345\256\232\347\276\251\347\232\204\346\240\270\345\277\203\347\211\251\344\273\266/number_\347\211\251\344\273\266/index.html" new file mode 100644 index 0000000000..01ff1ca26f --- /dev/null +++ "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\240\220\345\205\210\345\256\232\347\276\251\347\232\204\346\240\270\345\277\203\347\211\251\344\273\266/number_\347\211\251\344\273\266/index.html" @@ -0,0 +1,80 @@ +--- +title: Number 物件 +slug: >- + Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/預先定義的核心物件/Number_物件 +--- +

 

+

Number 物件

+

The Number 物件具有用於數值常數的屬性,如最大值、非數字、無限大。你不能改變這些屬性的值,你可以如下使用這些屬性︰

+
biggestNum = Number.MAX_VALUE
+smallestNum = Number.MIN_VALUE
+infiniteNum = Number.POSITIVE_INFINITY
+negInfiniteNum = Number.NEGATIVE_INFINITY
+notANum = Number.NaN
+
+

你永遠可以如上方式參照預先定義的 Number 物件的屬性,而不是參照你自己建立的 Number 物件的屬性。

+

下表列出 Number 物件的屬性。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
屬性說明
MAX_VALUE所能表示的最大的數字
MIN_VALUE所能表示的最小的數字
NaN特殊的 "not a number"(非數字)值
NEGATIVE_INFINITY特殊的負無限大的值;溢出時返回
POSITIVE_INFINITY特殊的正無限大的值;溢出時返回
+

表 7.2: Number 的屬性

+

Number 的原型提供從 Number 物件取得各種格式的資訊的方法。下表列出 Number.prototype 的方法。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
方法說明
toExponential返回以指數符號表示的數字的字串。
toFixed返回以固定小數點表示的數字的字串。
toPrecision返回以指定精度的固定小數點表示的數字的字串。
toSource返回表示指定的 Number 物件的字面表達。你可以使用這個值來建立新的物件。覆蓋 Object.toSource 方法。
toString返回表示指定物件的字串。覆蓋 Object.toString 方法。
valueOf返回指定物件的原始值。覆蓋 Object.valueOf 方法。
+

表 7.3: Number.prototype 的方法

+

{{ PreviousNext("Core_JavaScript_1.5_教學:預先定義的核心物件:Math_物件", "Core_JavaScript_1.5_教學:預先定義的核心物件:RegExp_物件") }}

diff --git "a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\240\220\345\205\210\345\256\232\347\276\251\347\232\204\346\240\270\345\277\203\347\211\251\344\273\266/regexp_\347\211\251\344\273\266/index.html" "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\240\220\345\205\210\345\256\232\347\276\251\347\232\204\346\240\270\345\277\203\347\211\251\344\273\266/regexp_\347\211\251\344\273\266/index.html" new file mode 100644 index 0000000000..6d26e86067 --- /dev/null +++ "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\240\220\345\205\210\345\256\232\347\276\251\347\232\204\346\240\270\345\277\203\347\211\251\344\273\266/regexp_\347\211\251\344\273\266/index.html" @@ -0,0 +1,9 @@ +--- +title: RegExp 物件 +slug: >- + Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/預先定義的核心物件/RegExp_物件 +--- +

 

+

RegExp 物件

+

RegExp 物件可讓你運用正規表達式。已在第 4 章中解說過,正規表達式

+

{{ PreviousNext("Core_JavaScript_1.5_教學:預先定義的核心物件:Number_物件", "Core_JavaScript_1.5_教學:預先定義的核心物件:String_物件") }}

diff --git "a/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\240\220\345\205\210\345\256\232\347\276\251\347\232\204\346\240\270\345\277\203\347\211\251\344\273\266/string_\347\211\251\344\273\266/index.html" "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\240\220\345\205\210\345\256\232\347\276\251\347\232\204\346\240\270\345\277\203\347\211\251\344\273\266/string_\347\211\251\344\273\266/index.html" new file mode 100644 index 0000000000..9e18d6ca98 --- /dev/null +++ "b/files/zh-tw/orphaned/web/javascript/obsolete_pages/obsolete_pages/obsolete_pages/\351\240\220\345\205\210\345\256\232\347\276\251\347\232\204\346\240\270\345\277\203\347\211\251\344\273\266/string_\347\211\251\344\273\266/index.html" @@ -0,0 +1,88 @@ +--- +title: String 物件 +slug: >- + Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/預先定義的核心物件/String_物件 +--- +

 

+

String 物件

+

String 物件只有一個屬性,length,用來指明字串中的字元數目。例如,下面的代碼把 13 的值代入給 x,因為 "Hello, World!" 有 13 個字元︰

+
mystring = "Hello, World!"
+x = mystring.length
+
+

String 物件有兩種類型的方法︰一種是返回對字串本身的修改,如 substringtoUpperCase,另一種是返回字串的 HTML 格式版本,如 boldlink

+

舉例來說,延用前面的例子,mystring.toUpperCase()"hello, world!".toUpperCase() 都會返回字串 "HELLO, WORLD!"。

+

substring 方法接受兩個參數,並返回介於兩個參數之間的字串的子集。延用前面的例子,mystring.substring(4, 9) 返回字串 "o, Wo"。參閱 Core JavaScript 參考 中的 String 物件的 substring 方法,以取得更進一步資訊。

+

String 物件也有大量的針對自動的 HTML 格式化的方法,如 bold 建立粗體文字,link 建立超連結。例如,你可以使用 link 方法建立連結到某個 URL 的超連結,如下︰

+
mystring.link("http://www.helloworld.com")
+
+

下表列出 String 物件的方法。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
方法說明
anchor建立已命名的 HTML 錨點。
big, blink, bold, fixed, italics, small, strike, sub, sup建立 HTML 格式的字串。
charAt, charCodeAt返回字串中指定位置的字元或者字元內碼。
indexOf, lastIndexOf返回字串中指定子字串的位置,或指定子字串的最後的位置。
link建立 HTML 超連結。
concat合併兩個字串的文字,並返回新的字串。
fromCharCode從指定的 Unicode 值的序列建構字串。這是 String 類別的方法,而不是 String 實體的。
split藉由把字串分成子字串的方式,把 String 物件分割成字串的陣列。
slice抽出字串的片斷,並返回新的字串。
substring, substr以指定的起始或終止索引、或起始索引和長度,返回指定字串的子集。
match, replace, search與正則表達式配合使用。
toLowerCase, toUpperCase返回全是大寫或全是小寫的字串。
+

表 7.4: String 實體的方法

+

字串的字面表達並不是 String 物件

+

String 物件只是字串的原始資料類型的包裝而已。別把字串的字面表達和 String 物件相混淆了。例如,下面的代碼建立字串的字面表達 s1 和 String 物件 s2

+
s1 = "foo" // 建立字串的字面表達值
+s2 = new String("foo") // 建立 String 物件
+
+

你可以在字串的字面表達值上呼叫所有的 String 物件的方法—JavaScript 會自動把字串的字面表達轉換成臨時的 String 物件,呼叫其方法,然後丟棄臨時的 String 物件。你也可以在字面表達上使用 String.length 屬性。

+

你應該使用字串的字面表達,除非你確定需要使用 String 物件,因為 String 物件會有反直覺的行為。例如︰

+
s1 = "2 + 2" // 建立字串的字面表達值
+s2 = new String("2 + 2") //建立 String 物件
+eval(s1) // 返回數字 4
+eval(s2) // 返回字串 "2 + 2"
+
+

{{ PreviousNext("Core_JavaScript_1.5_教學:預先定義的核心物件:RegExp_物件", "Core_JavaScript_1.5_教學:繼承") }}

diff --git "a/files/zh-tw/orphaned/web/svg/\346\225\231\345\255\270/index.html" "b/files/zh-tw/orphaned/web/svg/\346\225\231\345\255\270/index.html" new file mode 100644 index 0000000000..5521386506 --- /dev/null +++ "b/files/zh-tw/orphaned/web/svg/\346\225\231\345\255\270/index.html" @@ -0,0 +1,13 @@ +--- +title: 教學 +slug: Web/SVG/教學 +--- +

 

+


+本教學解說 SVG(Scalable Vector Graphics)的 1.1 版本,是一種 W3C XML 的衍伸語言,且已部分實裝於 Firefox 1.5、Opera 8.5 還有其他的瀏覽器。

+

本教學仍處於非常早期的階段。如果可能的話,請幫忙彙整並寫成一、兩個段落。為本教學增添內容!

+
簡介
+ + +

{{ languages( { "en": "en/SVG/Tutorial", "fr": "fr/SVG/Tutoriel", "ja": "ja/SVG/Tutorial", "pl": "pl/SVG/Przewodnik" } ) }}

-- cgit v1.2.3-54-g00ecf