diff --git a/files/zh-tw/web/javascript/guide/grammar_and_types/index.md b/files/zh-tw/web/javascript/guide/grammar_and_types/index.md index eb564483a83dc1..a7a667ee10f0f2 100644 --- a/files/zh-tw/web/javascript/guide/grammar_and_types/index.md +++ b/files/zh-tw/web/javascript/guide/grammar_and_types/index.md @@ -550,7 +550,7 @@ console.log("John's cat".length); // In this case, 10. ``` -In ES2015, template literals are also available. Template literals are enclosed by the back-tick (\` \`) ([grave accent](http://en.wikipedia.org/wiki/Grave_accent)) character instead of double or single quotes. Template strings provide syntactic sugar for constructing strings. This is similar to string interpolation features in Perl, Python and more. Optionally, a tag can be added to allow the string construction to be customized, avoiding injection attacks or constructing higher level data structures from string contents. +In ES2015, template literals are also available. Template literals are enclosed by the back-tick (\` \`) ([grave accent](https://en.wikipedia.org/wiki/Grave_accent)) character instead of double or single quotes. Template strings provide syntactic sugar for constructing strings. This is similar to string interpolation features in Perl, Python and more. Optionally, a tag can be added to allow the string construction to be customized, avoiding injection attacks or constructing higher level data structures from string contents. ```js // Basic literal string creation diff --git a/files/zh-tw/web/javascript/guide/introduction/index.md b/files/zh-tw/web/javascript/guide/introduction/index.md index 09ee11fb16bada..01b143dc275d2a 100644 --- a/files/zh-tw/web/javascript/guide/introduction/index.md +++ b/files/zh-tw/web/javascript/guide/introduction/index.md @@ -57,9 +57,9 @@ Java 是一個為了快速執行與安全型態而設計的基於類別的程式 ## JavaScript 與 ECMAScript 規格 -Netscape 公司發明了 JavaScript ,而 JavaScript 的第一次應用正是在 Netscape 瀏覽器。然而,Netscape 後來和 [Ecma International](http://www.ecma-international.org/)(一個致力於將資訊及通訊系統標準化的歐洲組織,前身為 ECMA - 歐洲計算機製造商協會)合作,開發一個基於 JavaScript 核心並同時兼具標準化與國際化的程式語言,這個經過標準化的 JavaScript 便稱作 ECMAScript ,和 JavaScript 有著相同的應用方式並支援相關標準。各個公司都可以使用這個開放的標準語言去開發 JavaScript 的專案。ECMAScript 標準記載於 ECMA-262 這個規格中。 +Netscape 公司發明了 JavaScript ,而 JavaScript 的第一次應用正是在 Netscape 瀏覽器。然而,Netscape 後來和 [Ecma International](https://ecma-international.org/)(一個致力於將資訊及通訊系統標準化的歐洲組織,前身為 ECMA - 歐洲計算機製造商協會)合作,開發一個基於 JavaScript 核心並同時兼具標準化與國際化的程式語言,這個經過標準化的 JavaScript 便稱作 ECMAScript ,和 JavaScript 有著相同的應用方式並支援相關標準。各個公司都可以使用這個開放的標準語言去開發 JavaScript 的專案。ECMAScript 標準記載於 ECMA-262 這個規格中。 -ECMA-262 標準同時也經過 [ISO](http://www.iso.ch/)(國際標準化組織)認証,成為 ISO-16262 標準。你可以在 Mozilla 的網站上找到 [PDF 版本的 ECMA-262](http://www-archive.mozilla.org/js/language/E262-3.pdf),但這板本已過期;你也可以在 [Ecma International 的網站](http://www.ecma-international.org/publications/standards/Ecma-262.htm) 找到這個規格。 ECMAScript 規格中並沒有描述已經被 W3C(全球資訊網協會)標準化的文件物件模型(DOM)。文件物件模型定義了 HTML 文件物件(document objects)和腳本之間運作的方式。 +ECMA-262 標準同時也經過 [ISO](https://www.iso.org/home.html)(國際標準化組織)認証,成為 ISO-16262 標準。你可以在 Mozilla 的網站上找到 [PDF 版本的 ECMA-262](https://www-archive.mozilla.org/js/language/E262-3.pdf),但這板本已過期;你也可以在 [Ecma International 的網站](https://ecma-international.org/publications-and-standards/standards/ecma-262/) 找到這個規格。 ECMAScript 規格中並沒有描述已經被 W3C(全球資訊網協會)標準化的文件物件模型(DOM)。文件物件模型定義了 HTML 文件物件(document objects)和腳本之間運作的方式。 ### JavaScript 版本與 ECMAScript 版本之間的關係 diff --git a/files/zh-tw/web/javascript/guide/regular_expressions/index.md b/files/zh-tw/web/javascript/guide/regular_expressions/index.md index 38f8bec919d548..1083d66b4326c5 100644 --- a/files/zh-tw/web/javascript/guide/regular_expressions/index.md +++ b/files/zh-tw/web/javascript/guide/regular_expressions/index.md @@ -41,43 +41,43 @@ var re = new RegExp("ab+c"); 下面的表格列出了在正則表達式中可以利用的特殊字符完整列表以及描述。 -| 字元 | 解說 | -| --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| [`\`](#special-backslash) | 反斜線放在非特殊符號前面,使非特殊符號不會被逐字譯出,代表特殊作用。 例如:'b' 如果沒有 '\\' 在前頭,功能是找出小寫 b;若改為 '\b' 則代表的是邊界功能,block 用意。 /\bter\b/.test("interest") //false /\bter\b/.test("in ter est") //true `/a*/` 找出 0 個或是 1 個以上的 a;而 /a\\\*/ 找出 'a\*' 這個字串 /aaaa\*/g.test("caaady") //true /a\\\*/.test("caaady") //false '\\' 也能使自身表現出來,表現 '\\' ,必須以 '\\\\' 表達。 /\[\\\\]/.test(">\\\\<") //true | -| [`^`](#special-caret) | 匹配輸入的開頭,如果 multiline flag 被設為 true,則會匹配換行字元後。例如:`/^A/` 不會匹配「an A」的 A,但會匹配「An E」中的 A。「`^`」出現在字元集模式的字首中有不同的意思,詳見[補字元集](#special-negated-character-set)。 | -| [`$`](#special-dollar) | 匹配輸入的結尾,如果 multiline flag 被設為 true,則會匹配換行字元。例如:`/t$/` 不會匹配「eater」中的 t,卻會匹配「eat」中的 t。 | -| [`*`](#special-asterisk) | 匹配前一字元 0 至多次。 下面舉例要求基本 'aaaa' ,'a\*' 後面有 0 個或多個 a 的意思 /aaaaa\*/g.test("caaady") //false 例如:`/bo*/` 匹配「A ghost booooed」中的 boooo、「A bird warbled」中的 b,但在「A goat grunted」中不會匹配任何字串。 | -| [`+`](#special-plus) | 匹配前一字元 1 至多次,等同於 `{1,}`。例如:`/a+/` 匹配「candy」中的 a,以及所有「caaaaaaandy」中的 a。 | -| [`?`](#special-questionmark) | 匹配前一字元 0 至 1 次,等同於 `{0,1}`。例如:`/e?le?/` 匹配「angel」中的 el、「angle」中的 le、以及「oslo」中的 l。如果是使用在 `*`、`+`、`?` 或 `{}` 等 quantifier 之後,將會使這些 quantifier non-greedy(也就是儘可能匹配最少的字元),與此相對的是 greedy(匹配儘可能多的字元)。例如:在「123abc」中應用 `/\d+/` 可匹配「123」,但使用 `/\d+?/` 在相同字串上只能匹配「1」。 Also used in lookahead assertions, as described in the `x(?=y)` and `x(?!y)` entries of this table. | -| [`.`](#special-dot) | (小數點)匹配除了換行符號之外的單一字元。例如:/.n/ 匹配「nay, an apple is on the tree」中的 an 和 on,但在「nay」中沒有匹配。 | -| [`(x)`](#special-capturing-parentheses) | Capturing Parentheses 匹配 'x' 並記住此次的匹配,如下面的範例所示。在 正則表達示 /(foo) (bar) \1 \2/ 中的 (foo) 與 (bar) 可匹配了 "foo bar foo bar" 這段文字中的前兩個字,而 \1 與 \2 則匹配了後面的兩個字。注意, \1, \2, ..., \n 代表的就是前面的 pattern,以本範例來說,/(foo) (bar) \1 \2/ 等同於 /(foo) (bar) (foo) (bar)/。用於取代(replace)的話,則是用 $1, $2,...,$n。如 'bar boo'.replace(/(...) (...)/, '$2 $1'). `$&` 表示已匹配的字串 | -| [`(?:x)`](#special-non-capturing-parentheses) | *Non-Capturing Parentheses*找出 'x',這動作不會記憶 `()`為 group 的意思,檢查時會再 wrap 一次,若有 `g` flag 會無效, `?:` 代表只要 group 就好,不要 wrap 有無 `()` 差別 ? `'foo'.match(/(foo)/)` `// ['foo', 'foo', index: 0, input: 'foo' ] 'foo'.match(/foo/) // [ 'foo', index: 0, input: 'foo' ]`有無`?:`差別? `'foo'.match(/(foo){1,2}/) // [ 'foo', 'foo', index: 0, input: 'foo' ] 'foo'.match(/(?:foo){1,2}/) [ 'foo', index: 0, input: 'foo' ]` 連`()`都沒有,則`{1,2}`只是適用在`foo`的第二個`o`的條件而已。更多資訊詳見 [Using parentheses](/zh-TW/docs/Web/JavaScript/Guide/Regular_Expressions#Using_parentheses) 。 | -| [`x(?=y)`](#special-lookahead) | 符合'x',且後接的是'y'。'y'為'x'存在的意義。 例如:`/Jack(?=Sprat)/,`在後面是 Sprat 的存在下,Jack 才有意義。 `/Jack(?=Sprat\|Frost)/`後面是 Sprat「或者是」Frost 的存在下,Jack 才有意義。但我們要找的目標是 Jack,後面的條件都只是 filter/條件的功能而已。 | -| [`x(?!y)`](#special-negated-look-ahead) | 符合'x',且後接的不是'y'。'y'為否定'x'存在的意義,後面不行前功盡棄(negated lookahead)。 例如: `/\d+(?!\.)/` ,要找一個或多個數字時,在後面接的不是「點」的情況下成立。 `var result = /\d+(?!\.)/.exec("3.141")` , result 執行出來為\[ '141', index: 2, input: '3.141'], index:2,代表 141 從 index = 2 開始。 | -| [`x\|y`](#special-or) | 符合「x」或「y」。舉例來說,`/green\|red/` 的話,會匹配 `"green apple"` 中的 `"green"` 以及 `"red apple."` 的 `"red"` 。 | -| [`{n}`](#special-quantifier) | 規定符號確切發生的次數,n 為正整數例如:`/a{2}/`無法在 "candy" 找到、但 "caandy" 行;若字串擁有 2 個以上 "caaandy" 還是只會認前面 2 個。 | -| [`{n,m}`](#special-quantifier-range) | 搜尋條件:n 為至少、m 為至多,其 n、m 皆為正整數。若把 m 設定為 0,則為 Invalid regular expression。例如:`/a{1,3}/`無法在 "cndy" 匹配到;而在 "candy" 中的第 1 個"a"符合;在 "caaaaaaandy" 中的前 3 個 "aaa" 符合,雖然此串有許多 a,但只認前面 3 個。 | -| [`[xyz]`](#special-character-set) | 字元的集合。此格式會匹配中括號內所有字元, including [escape sequences](/zh-TW/docs/JavaScript/Guide/Values,_variables,_and_literals#Unicode_escape_sequences)。特殊字元,例如點(`.`) 和米字號(`*`),在字元集合中不具特殊意義,所以不需轉換。若要設一個字元範圍的集合,可以使用橫線 `"-"` ,如下例所示: `[a-d]` 等同於 `[abcd]。`會匹配 "brisket" 的 "b" 、"city" 的 'c' ……等。 而`/[a-z.]+/` 和 `/[\w.]+/` 均可匹配字串 "test.i.ng" 。 | -| [`[^xyz]`](#special-negated-character-set) | bracket 中寫入的字元將被否定,匹配非出現在 bracket 中的符號。 可用 '-' 來界定字元的範圍。一般直接表達的符號都可以使用這種方式。`[^abc]`可以寫作\[^`a-c]`. "brisket" 中找到 'r' 、"chop."中找到 'h'。 | -| [`[\b]`](#special-backspace) | 吻合倒退字元 (U+0008). (不會跟 \b 混淆) | -| [`\b`](#special-word-boundary) | 吻合文字邊界。A word boundary matches the position where a word character is not followed or preceded by another word-character. Note that a matched word boundary is not included in the match. In other words, the length of a matched word boundary is zero. (Not to be confused with `[\b]`.)Examples: `/\bm/` matches the 'm' in "moon" ; `/oo\b/` does not match the 'oo' in "moon", because 'oo' is followed by 'n' which is a word character; `/oon\b/` matches the 'oon' in "moon", because 'oon' is the end of the string, thus not followed by a word character; `/\w\b\w/` will never match anything, because a word character can never be followed by both a non-word and a word character.**Note:** JavaScript's regular expression engine defines a [specific set of characters](http://www.ecma-international.org/ecma-262/5.1/#sec-15.10.2.6) to be "word" characters. Any character not in that set is considered a word break. This set of characters is fairly limited: it consists solely of the Roman alphabet in both upper- and lower-case, decimal digits, and the underscore character. Accented characters, such as "é" or "ü" are, unfortunately, treated as word breaks. | -| [`\B`](#special-non-word-boundary) | 吻合非文字邊界。This matches a position where the previous and next character are of the same type: Either both must be words, or both must be non-words. The beginning and end of a string are considered non-words.For example, `/\B../` matches 'oo' in "noonday", and `/y\B./` matches 'ye' in "possibly yesterday." | -| [`\cX`](#special-control) | Where _X_ is a character ranging from A to Z. Matches a control character in a string.For example, `/\cM/` matches control-M (U+000D) in a string. | -| [`\d`](#special-digit) | 吻合數字,寫法等同於 `[0-9] 。`例如:`/\d/` 或 `/[0-9]/` 在 "B2 is the suite number." 中找到 '2' | -| [`\D`](#special-non-digit) | 吻合非數字,寫法等同於 `[^0-9]。`例如:`/\D/` 或`/[^0-9]/` 在 "B2 is the suite number." 中找到 'B' 。 | -| [`\f`](#special-form-feed) | Matches a form feed (U+000C). | -| [`\n`](#special-line-feed) | Matches a line feed (U+000A). | -| [`\r`](#special-carriage-return) | Matches a carriage return (U+000D). | -| [`\s`](#special-white-space) | Matches a single white space character, including space, tab, form feed, line feed. Equivalent to `[ \f\n\r\t\v\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]`.For example, `/\s\w*/` matches ' bar' in "foo bar." | -| [`\S`](#special-non-white-space) | Matches a single character other than white space. Equivalent to `[^ \f\n\r\t\v\u00a0\\u1680u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u202f\u205f\u3000]`.For example, `/\S\w*/` matches 'foo' in "foo bar." | -| [`\t`](#special-tab) | Matches a tab (U+0009). | -| [`\v`](#special-vertical-tab) | Matches a vertical tab (U+000B). | -| [`\w`](#special-word) | 包含數字字母與底線,等同於`[A-Za-z0-9_]`。例如: `/\w/` 符合 'apple'中的 'a' 、'$5.28 中的 '5' 以及 '3D' 中的 '3'。For example, `/\w/` matches 'a' in "apple," '5' in "$5.28," and '3' in "3D." | -| [`\W`](#special-non-word) | 包含"非"數字字母與底線,等同於`[^A-Za-z0-9_]`。例如: `/\W/` 或是 `/[^A-Za-z0-9_]/` 符合 "50%." 中的 '%'For example, `/\W/` or `/[^A-Za-z0-9_]/` matches '%' in "50%." | -| [`\n`](#special-backreference) | 其中 _n_ 是一個正整數,表示第 _n_ 個括號中的子字串匹配(包含括號中的所有的字串匹配)例如: `/apple(,)\sorange\1/` 符合 "apple, orange, cherry, peach." 的 'apple, orange,' 。( \`\1\` 表示第一個 partten ,也就是 \`(,)\`)For example, `/apple(,)\sorange\1/` matches 'apple, orange,' in "apple, orange, cherry, peach." | -| [`\0`](#special-null) | Matches a NULL (U+0000) character. Do not follow this with another digit, because `\0` is an octal [escape sequence](/zh-TW/docs/JavaScript/Guide/Values,_variables,_and_literals#Unicode_escape_sequences). Instead use `\x00`. | -| [`\xhh`](#special-hex-escape) | Matches the character with the code hh (two hexadecimal digits) | -| [`\uhhhh`](#special-unicode-escape) | Matches the character with the code hhhh (four hexadecimal digits). | +| 字元 | 解說 | +| --------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [`\`](#special-backslash) | 反斜線放在非特殊符號前面,使非特殊符號不會被逐字譯出,代表特殊作用。 例如:'b' 如果沒有 '\\' 在前頭,功能是找出小寫 b;若改為 '\b' 則代表的是邊界功能,block 用意。 /\bter\b/.test("interest") //false /\bter\b/.test("in ter est") //true `/a*/` 找出 0 個或是 1 個以上的 a;而 /a\\\*/ 找出 'a\*' 這個字串 /aaaa\*/g.test("caaady") //true /a\\\*/.test("caaady") //false '\\' 也能使自身表現出來,表現 '\\' ,必須以 '\\\\' 表達。 /\[\\\\]/.test(">\\\\<") //true | +| [`^`](#special-caret) | 匹配輸入的開頭,如果 multiline flag 被設為 true,則會匹配換行字元後。例如:`/^A/` 不會匹配「an A」的 A,但會匹配「An E」中的 A。「`^`」出現在字元集模式的字首中有不同的意思,詳見[補字元集](#special-negated-character-set)。 | +| [`$`](#special-dollar) | 匹配輸入的結尾,如果 multiline flag 被設為 true,則會匹配換行字元。例如:`/t$/` 不會匹配「eater」中的 t,卻會匹配「eat」中的 t。 | +| [`*`](#special-asterisk) | 匹配前一字元 0 至多次。 下面舉例要求基本 'aaaa' ,'a\*' 後面有 0 個或多個 a 的意思 /aaaaa\*/g.test("caaady") //false 例如:`/bo*/` 匹配「A ghost booooed」中的 boooo、「A bird warbled」中的 b,但在「A goat grunted」中不會匹配任何字串。 | +| [`+`](#special-plus) | 匹配前一字元 1 至多次,等同於 `{1,}`。例如:`/a+/` 匹配「candy」中的 a,以及所有「caaaaaaandy」中的 a。 | +| [`?`](#special-questionmark) | 匹配前一字元 0 至 1 次,等同於 `{0,1}`。例如:`/e?le?/` 匹配「angel」中的 el、「angle」中的 le、以及「oslo」中的 l。如果是使用在 `*`、`+`、`?` 或 `{}` 等 quantifier 之後,將會使這些 quantifier non-greedy(也就是儘可能匹配最少的字元),與此相對的是 greedy(匹配儘可能多的字元)。例如:在「123abc」中應用 `/\d+/` 可匹配「123」,但使用 `/\d+?/` 在相同字串上只能匹配「1」。 Also used in lookahead assertions, as described in the `x(?=y)` and `x(?!y)` entries of this table. | +| [`.`](#special-dot) | (小數點)匹配除了換行符號之外的單一字元。例如:/.n/ 匹配「nay, an apple is on the tree」中的 an 和 on,但在「nay」中沒有匹配。 | +| [`(x)`](#special-capturing-parentheses) | Capturing Parentheses 匹配 'x' 並記住此次的匹配,如下面的範例所示。在 正則表達示 /(foo) (bar) \1 \2/ 中的 (foo) 與 (bar) 可匹配了 "foo bar foo bar" 這段文字中的前兩個字,而 \1 與 \2 則匹配了後面的兩個字。注意, \1, \2, ..., \n 代表的就是前面的 pattern,以本範例來說,/(foo) (bar) \1 \2/ 等同於 /(foo) (bar) (foo) (bar)/。用於取代(replace)的話,則是用 $1, $2,...,$n。如 'bar boo'.replace(/(...) (...)/, '$2 $1'). `$&` 表示已匹配的字串 | +| [`(?:x)`](#special-non-capturing-parentheses) | *Non-Capturing Parentheses*找出 'x',這動作不會記憶 `()`為 group 的意思,檢查時會再 wrap 一次,若有 `g` flag 會無效, `?:` 代表只要 group 就好,不要 wrap 有無 `()` 差別 ? `'foo'.match(/(foo)/)` `// ['foo', 'foo', index: 0, input: 'foo' ] 'foo'.match(/foo/) // [ 'foo', index: 0, input: 'foo' ]`有無`?:`差別? `'foo'.match(/(foo){1,2}/) // [ 'foo', 'foo', index: 0, input: 'foo' ] 'foo'.match(/(?:foo){1,2}/) [ 'foo', index: 0, input: 'foo' ]` 連`()`都沒有,則`{1,2}`只是適用在`foo`的第二個`o`的條件而已。更多資訊詳見 [Using parentheses](/zh-TW/docs/Web/JavaScript/Guide/Regular_Expressions#Using_parentheses) 。 | +| [`x(?=y)`](#special-lookahead) | 符合'x',且後接的是'y'。'y'為'x'存在的意義。 例如:`/Jack(?=Sprat)/,`在後面是 Sprat 的存在下,Jack 才有意義。 `/Jack(?=Sprat\|Frost)/`後面是 Sprat「或者是」Frost 的存在下,Jack 才有意義。但我們要找的目標是 Jack,後面的條件都只是 filter/條件的功能而已。 | +| [`x(?!y)`](#special-negated-look-ahead) | 符合'x',且後接的不是'y'。'y'為否定'x'存在的意義,後面不行前功盡棄(negated lookahead)。 例如: `/\d+(?!\.)/` ,要找一個或多個數字時,在後面接的不是「點」的情況下成立。 `var result = /\d+(?!\.)/.exec("3.141")` , result 執行出來為\[ '141', index: 2, input: '3.141'], index:2,代表 141 從 index = 2 開始。 | +| [`x\|y`](#special-or) | 符合「x」或「y」。舉例來說,`/green\|red/` 的話,會匹配 `"green apple"` 中的 `"green"` 以及 `"red apple."` 的 `"red"` 。 | +| [`{n}`](#special-quantifier) | 規定符號確切發生的次數,n 為正整數例如:`/a{2}/`無法在 "candy" 找到、但 "caandy" 行;若字串擁有 2 個以上 "caaandy" 還是只會認前面 2 個。 | +| [`{n,m}`](#special-quantifier-range) | 搜尋條件:n 為至少、m 為至多,其 n、m 皆為正整數。若把 m 設定為 0,則為 Invalid regular expression。例如:`/a{1,3}/`無法在 "cndy" 匹配到;而在 "candy" 中的第 1 個"a"符合;在 "caaaaaaandy" 中的前 3 個 "aaa" 符合,雖然此串有許多 a,但只認前面 3 個。 | +| [`[xyz]`](#special-character-set) | 字元的集合。此格式會匹配中括號內所有字元, including [escape sequences](/zh-TW/docs/JavaScript/Guide/Values,_variables,_and_literals#Unicode_escape_sequences)。特殊字元,例如點(`.`) 和米字號(`*`),在字元集合中不具特殊意義,所以不需轉換。若要設一個字元範圍的集合,可以使用橫線 `"-"` ,如下例所示: `[a-d]` 等同於 `[abcd]。`會匹配 "brisket" 的 "b" 、"city" 的 'c' ……等。 而`/[a-z.]+/` 和 `/[\w.]+/` 均可匹配字串 "test.i.ng" 。 | +| [`[^xyz]`](#special-negated-character-set) | bracket 中寫入的字元將被否定,匹配非出現在 bracket 中的符號。 可用 '-' 來界定字元的範圍。一般直接表達的符號都可以使用這種方式。`[^abc]`可以寫作\[^`a-c]`. "brisket" 中找到 'r' 、"chop."中找到 'h'。 | +| [`[\b]`](#special-backspace) | 吻合倒退字元 (U+0008). (不會跟 \b 混淆) | +| [`\b`](#special-word-boundary) | 吻合文字邊界。A word boundary matches the position where a word character is not followed or preceded by another word-character. Note that a matched word boundary is not included in the match. In other words, the length of a matched word boundary is zero. (Not to be confused with `[\b]`.)Examples: `/\bm/` matches the 'm' in "moon" ; `/oo\b/` does not match the 'oo' in "moon", because 'oo' is followed by 'n' which is a word character; `/oon\b/` matches the 'oon' in "moon", because 'oon' is the end of the string, thus not followed by a word character; `/\w\b\w/` will never match anything, because a word character can never be followed by both a non-word and a word character.**Note:** JavaScript's regular expression engine defines a [specific set of characters](https://262.ecma-international.org/5.1/#sec-15.10.2.6) to be "word" characters. Any character not in that set is considered a word break. This set of characters is fairly limited: it consists solely of the Roman alphabet in both upper- and lower-case, decimal digits, and the underscore character. Accented characters, such as "é" or "ü" are, unfortunately, treated as word breaks. | +| [`\B`](#special-non-word-boundary) | 吻合非文字邊界。This matches a position where the previous and next character are of the same type: Either both must be words, or both must be non-words. The beginning and end of a string are considered non-words.For example, `/\B../` matches 'oo' in "noonday", and `/y\B./` matches 'ye' in "possibly yesterday." | +| [`\cX`](#special-control) | Where _X_ is a character ranging from A to Z. Matches a control character in a string.For example, `/\cM/` matches control-M (U+000D) in a string. | +| [`\d`](#special-digit) | 吻合數字,寫法等同於 `[0-9] 。`例如:`/\d/` 或 `/[0-9]/` 在 "B2 is the suite number." 中找到 '2' | +| [`\D`](#special-non-digit) | 吻合非數字,寫法等同於 `[^0-9]。`例如:`/\D/` 或`/[^0-9]/` 在 "B2 is the suite number." 中找到 'B' 。 | +| [`\f`](#special-form-feed) | Matches a form feed (U+000C). | +| [`\n`](#special-line-feed) | Matches a line feed (U+000A). | +| [`\r`](#special-carriage-return) | Matches a carriage return (U+000D). | +| [`\s`](#special-white-space) | Matches a single white space character, including space, tab, form feed, line feed. Equivalent to `[ \f\n\r\t\v\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]`.For example, `/\s\w*/` matches ' bar' in "foo bar." | +| [`\S`](#special-non-white-space) | Matches a single character other than white space. Equivalent to `[^ \f\n\r\t\v\u00a0\\u1680u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u202f\u205f\u3000]`.For example, `/\S\w*/` matches 'foo' in "foo bar." | +| [`\t`](#special-tab) | Matches a tab (U+0009). | +| [`\v`](#special-vertical-tab) | Matches a vertical tab (U+000B). | +| [`\w`](#special-word) | 包含數字字母與底線,等同於`[A-Za-z0-9_]`。例如: `/\w/` 符合 'apple'中的 'a' 、'$5.28 中的 '5' 以及 '3D' 中的 '3'。For example, `/\w/` matches 'a' in "apple," '5' in "$5.28," and '3' in "3D." | +| [`\W`](#special-non-word) | 包含"非"數字字母與底線,等同於`[^A-Za-z0-9_]`。例如: `/\W/` 或是 `/[^A-Za-z0-9_]/` 符合 "50%." 中的 '%'For example, `/\W/` or `/[^A-Za-z0-9_]/` matches '%' in "50%." | +| [`\n`](#special-backreference) | 其中 _n_ 是一個正整數,表示第 _n_ 個括號中的子字串匹配(包含括號中的所有的字串匹配)例如: `/apple(,)\sorange\1/` 符合 "apple, orange, cherry, peach." 的 'apple, orange,' 。( \`\1\` 表示第一個 partten ,也就是 \`(,)\`)For example, `/apple(,)\sorange\1/` matches 'apple, orange,' in "apple, orange, cherry, peach." | +| [`\0`](#special-null) | Matches a NULL (U+0000) character. Do not follow this with another digit, because `\0` is an octal [escape sequence](/zh-TW/docs/JavaScript/Guide/Values,_variables,_and_literals#Unicode_escape_sequences). Instead use `\x00`. | +| [`\xhh`](#special-hex-escape) | Matches the character with the code hh (two hexadecimal digits) | +| [`\uhhhh`](#special-unicode-escape) | Matches the character with the code hhhh (four hexadecimal digits). | Escaping user input that is to be treated as a literal string within a regular expression—that would otherwise be mistaken for a special character—can be accomplished by simple replacement: diff --git a/files/zh-tw/web/javascript/guide/typed_arrays/index.md b/files/zh-tw/web/javascript/guide/typed_arrays/index.md index d68a807e6a2c0a..a7fb8304c4122f 100644 --- a/files/zh-tw/web/javascript/guide/typed_arrays/index.md +++ b/files/zh-tw/web/javascript/guide/typed_arrays/index.md @@ -140,7 +140,7 @@ var amountDueView = new Float32Array(buffer, 20, 1); 舉例來說,可以用 `amountDueView[0]` 存取 amountDue。 > [!NOTE] -> C 結構的 [data structure alignment](http://en.wikipedia.org/wiki/Data_structure_alignment) 是與使用平台有關,須小心這些填充上的差異。 +> C 結構的[資料結構對齊](https://zh.wikipedia.org/wiki/数据结构对齐)是與使用平台有關,須小心這些填充上的差異。 ### Conversion to normal arrays @@ -158,5 +158,5 @@ normalArray.constructor === Array; - [Getting `ArrayBuffer`s or typed arrays from _Base64_-encoded strings](/zh-TW/docs/Web/JavaScript/Base64_encoding_and_decoding#Appendix.3A_Decode_a_Base64_string_to_Uint8Array_or_ArrayBuffer) - [`StringView` – a C-like representation of strings based on typed arrays](/zh-TW/docs/Code_snippets/StringView) - [Faster Canvas Pixel Manipulation with Typed Arrays](https://hacks.mozilla.org/2011/12/faster-canvas-pixel-manipulation-with-typed-arrays) -- [Typed Arrays: Binary Data in the Browser](http://www.html5rocks.com/en/tutorials/webgl/typed_arrays) +- [型別陣列——瀏覽器中的二進位資料](https://web.dev/articles/webgl-typed-arrays) - {{Glossary("Endianness")}} diff --git a/files/zh-tw/web/javascript/guide/using_promises/index.md b/files/zh-tw/web/javascript/guide/using_promises/index.md index 73fa4741a34395..2bc56c611e7ef2 100644 --- a/files/zh-tw/web/javascript/guide/using_promises/index.md +++ b/files/zh-tw/web/javascript/guide/using_promises/index.md @@ -192,7 +192,7 @@ async function foo() { } ``` -這基於 Promise,例如 `doSomething()` 和之前一樣。你可以閱讀在[這裡](https://developers.google.com/web/fundamentals/getting-started/primers/async-functions)閱讀更多。 +這基於 Promise,例如 `doSomething()` 和之前一樣。你可以閱讀在[這裡](/zh-TW/docs/Web/JavaScript/Reference/Statements/async_function)閱讀更多。 Promise 藉由捕捉所有錯誤,包含例外和程式錯誤,解決了 Callback 地獄的缺點。這是非同步運算的基本特性。 @@ -283,8 +283,8 @@ console.log(1); // 1, 2, 3, 4 ## 看更多 - {{jsxref("Promise.then()")}} -- [Promises/A+ 特色](http://promisesaplus.com/) +- [Promises/A+ 特色](https://promisesaplus.com/) - [Venkatraman.R - JS Promise (Part 1, Basics)](https://medium.com/@ramsunvtech/promises-of-promise-part-1-53f769245a53) - [Venkatraman.R - JS Promise (Part 2 - Using Q.js, When.js and RSVP.js)](https://medium.com/@ramsunvtech/js-promise-part-2-q-js-when-js-and-rsvp-js-af596232525c#.dzlqh6ski) - [Venkatraman.R - Tools for Promises Unit Testing](https://tech.io/playgrounds/11107/tools-for-promises-unittesting/introduction) -- [Nolan Lawson: We have a problem with promises — Common mistakes with promises](http://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html) +- [Nolan Lawson: We have a problem with promises — Common mistakes with promises](https://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html) diff --git a/files/zh-tw/web/javascript/javascript_technologies_overview/index.md b/files/zh-tw/web/javascript/javascript_technologies_overview/index.md index 93d8a4e5fbe241..e2a31c5d49762c 100644 --- a/files/zh-tw/web/javascript/javascript_technologies_overview/index.md +++ b/files/zh-tw/web/javascript/javascript_technologies_overview/index.md @@ -33,32 +33,32 @@ JavaScript 的核心語言是由 ECMA TC-39 委員會統一標準,並且命名 ### WebID -[WebIDL 規格書](http://dev.w3.org/2006/webapi/WebIDL/) 是 DOM 技術與 ECMAScript 之間相互黏合的基礎。 +[WebIDL 規格書](https://webidl.spec.whatwg.org/) 是 DOM 技術與 ECMAScript 之間相互黏合的基礎。 ### DOM 核心 W3C 統一規範了文件物件模型的核心部分。它定義了無關語言而將 HTML 與 XML 文件抽象化為物件的介面,以及對抽象化物件進行處理的機制。在 DOM 的定義中包含: -- [DOM core](http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html) 中的文件結構、樹狀模型,DOM 事件結構:Node, Element, DocumentFragment, Document, DOMImplementation, Event, EventTarget, … -- [DOM events](http://dev.w3.org/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html) 中對 DOM 事件結構(DOM Event Architecture)和特定事件的廣義定義。 -- 其他如 [DOM Traversal](http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html) 和 [DOM Range](http://html5.org/specs/dom-range.html)。 +- [DOM core](https://dom.spec.whatwg.org/) 中的文件結構、樹狀模型,DOM 事件結構:Node, Element, DocumentFragment, Document, DOMImplementation, Event, EventTarget, … +- [DOM events](https://w3c.github.io/uievents/) 中對 DOM 事件結構(DOM Event Architecture)和特定事件的廣義定義。 +- 其他如 [DOM Traversal](https://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html) 和 [DOM Range](https://html5.org/specs/dom-range.html)。 以 ECMAScript 的觀點來看,DOM 規範所定義的物件被稱為宿主物件(Host objects) 。 ### HTML DOM -網頁標記語言 [HTML](http://www.whatwg.org/html) 是依據 DOM 來規格化。在 DOM 核心中,定義了虛擬概念的分層,而 HTML 也定義了元素的意義。 HTML DOM 包含了 HTML 元素的 `className` 屬性與諸如 {{ domxref("document.body") }} 的 API。 +網頁標記語言 [HTML](https://html.spec.whatwg.org/multipage/) 是依據 DOM 來規格化。在 DOM 核心中,定義了虛擬概念的分層,而 HTML 也定義了元素的意義。 HTML DOM 包含了 HTML 元素的 `className` 屬性與諸如 {{ domxref("document.body") }} 的 API。 HTML 的規格書也定義了在文件上的一些限制;例如,他要求所有 `ul` 元素(代表無順序編號的清單)的子元素必須是 `li 元素(代表清單`中的項目)。而未在標準中定義的元素和屬性通常在規格中被禁用。 ## 其他重要的 API -- setTimeout 和 setInterval 函數首次納入 HTML 標準中的 [Window](http://www.whatwg.org/html/#window) 介面 -- [XMLHttpRequest](http://dev.w3.org/2006/webapi/XMLHttpRequest-2/):允許傳送非同步 HTTP 請求的 API。 -- [CSS Object Model](http://dev.w3.org/csswg/cssom/):CSSOM 用來將 CSS 的規則轉換為物件。 -- [WebWorkers](http://www.whatwg.org/specs/web-workers/current-work/):允許平行計算的 API。 -- [WebSockets](http://www.whatwg.org/C/#network):允許低階雙向溝通的 API。 -- [Canvas 2D Context](http://www.whatwg.org/html/#2dcontext):canvas 元素的繪圖 API。 +- setTimeout 和 setInterval 函數首次納入 HTML 標準中的 [Window](https://html.spec.whatwg.org/multipage/nav-history-apis.html#window) 介面 +- [XMLHttpRequest](https://xhr.spec.whatwg.org/):允許傳送非同步 HTTP 請求的 API。 +- [CSS Object Model](https://drafts.csswg.org/cssom/):CSSOM 用來將 CSS 的規則轉換為物件。 +- [WebWorkers](https://html.spec.whatwg.org/multipage/workers.html):允許平行計算的 API。 +- [WebSockets](https://html.spec.whatwg.org/multipage/comms.html#network):允許低階雙向溝通的 API。 +- [Canvas 2D Context](https://html.spec.whatwg.org/multipage/canvas.html#2dcontext):canvas 元素的繪圖 API。 ## Shell @@ -78,10 +78,10 @@ A JavaScript shell allows you to quickly test snippets of JavaScript code withou - [Firebug](https://addons.mozilla.org/en-US/firefox/addon/firebug/) - Firefox 的開發者工具,同樣包函主控台 - [Babel REPL](https://babeljs.io/repl) - 以瀏覽器為基準的 [REPL](https://en.wikipedia.org/wiki/REPL),主要用來實驗未來的 JavaScript -- [TypeScript playground](https://www.typescriptlang.org/play) — A browser-based playground for experimenting both new JavaScript features (via the tsc compiler) and TypeScript syntax. +- [TypeScript playground](https://www.typescriptlang.org/play/) — A browser-based playground for experimenting both new JavaScript features (via the tsc compiler) and TypeScript syntax. ## 瀏覽器支援 -每個網頁開發者都曾經體會過[一團混亂的 DOM 支援狀況](http://ejohn.org/blog/the-dom-is-a-mess/)。某些功能上不同瀏覽器的支援可能差異很大,因為過去重要的 DOM 功能都沒有明確的規範,進而使不同網頁瀏覽器對相同的使用情境實踐了互不相容的功能(像是 Internet Explorer 的事件模型)。最近(截至 2011 年 6 月),由 W3C 與(特別是)WHATWG 對舊功能重新進行詳盡的定義以提升互通性成為了趨勢 。為了跟進這個趨勢,許多網頁瀏覽器也根據這些新規格改進它們的實作。 +每個網頁開發者都曾經體會過[一團混亂的 DOM 支援狀況](https://johnresig.com/blog/the-dom-is-a-mess/)。某些功能上不同瀏覽器的支援可能差異很大,因為過去重要的 DOM 功能都沒有明確的規範,進而使不同網頁瀏覽器對相同的使用情境實踐了互不相容的功能(像是 Internet Explorer 的事件模型)。最近(截至 2011 年 6 月),由 W3C 與(特別是)WHATWG 對舊功能重新進行詳盡的定義以提升互通性成為了趨勢 。為了跟進這個趨勢,許多網頁瀏覽器也根據這些新規格改進它們的實作。 -雖然並未完全可靠,使用 JavaScript 函式庫是解決跨瀏覽器相容問題的最普遍方式。 這些函式庫將 DOM 的功能抽象化,確保其 API 在不同的瀏覽器中能以相似的方式運作。廣為被使用的框架包括 [jQuery](http://jquery.com/)、[prototype](http://www.prototypejs.org/) 和 [YUI](http://developer.yahoo.com/yui/)。 +雖然並未完全可靠,使用 JavaScript 函式庫是解決跨瀏覽器相容問題的最普遍方式。 這些函式庫將 DOM 的功能抽象化,確保其 API 在不同的瀏覽器中能以相似的方式運作。廣為被使用的框架包括 [jQuery](https://jquery.com/)、[prototype](http://prototypejs.org/) 和 [YUI](https://clarle.github.io/yui3/)。 diff --git a/files/zh-tw/web/javascript/language_overview/index.md b/files/zh-tw/web/javascript/language_overview/index.md index 017b35f928f697..dfc5eacbc5b04d 100644 --- a/files/zh-tw/web/javascript/language_overview/index.md +++ b/files/zh-tw/web/javascript/language_overview/index.md @@ -7,11 +7,11 @@ slug: Web/JavaScript/Language_overview ## 介紹 -為何需要重新介紹?因為 [JavaScript](/zh_tw/JavaScript) 堪稱是[全世界最被人誤解的程式語言](http://javascript.crockford.com/javascript.html)。儘管 JavaScript 再怎麼的被嘲諷為小兒科,在它誤導人的簡潔下隱藏著強大的語言功能。2005 年是個許多知名 JavaScript 應用程式推出的年度,在在證明:更加瞭解這項科技對任何網頁開發者來說皆是重要的技能。 +為何需要重新介紹?因為 [JavaScript](/zh_tw/JavaScript) 堪稱是[全世界最被人誤解的程式語言](https://crockford.com/javascript/javascript.html)。儘管 JavaScript 再怎麼的被嘲諷為小兒科,在它誤導人的簡潔下隱藏著強大的語言功能。2005 年是個許多知名 JavaScript 應用程式推出的年度,在在證明:更加瞭解這項科技對任何網頁開發者來說皆是重要的技能。 先從該語言的歷史說起。1995 年,Brendan Eich,一位 Netscape (網景)的工程師,創造了 JavaScript。1996 年初,JavaScript 隨著 Netscape 2 首次推出。它原本要被命名為 LiveScript,結果因為行銷策略為了強調昇陽的 Java 程式語言的普遍性,而不幸的被改名 — 即便兩者之間沒有太大的關係。從此之後,這便成為了混淆的元兇。 -Microsoft 在幾個月後隨著 IE 3 推出了跟該語言大致上相容的 JScript。Netscape 在 1997 年將該語言送交 [ECMA International](http://www.ecma-international.org/),一個歐洲標準化組織,而在 1997 年的時候產生了初版的 [ECMAScript](/zh_tw/ECMAScript)。該標準在 1999 年的時候以 [ECMAScript 第三版](http://www.ecma-international.org/publications/standards/Ecma-262.htm)的形式推出了更新,從此之後大致上都相當穩定,不過近期有在研發第四版。 +Microsoft 在幾個月後隨著 IE 3 推出了跟該語言大致上相容的 JScript。Netscape 在 1997 年將該語言送交 [ECMA International](https://ecma-international.org/),一個歐洲標準化組織,而在 1997 年的時候產生了初版的 [ECMAScript](/zh_tw/ECMAScript)。該標準在 1999 年的時候以 [ECMAScript 第三版](https://ecma-international.org/publications-and-standards/standards/ecma-262/)的形式推出了更新,從此之後大致上都相當穩定,不過近期有在研發第四版。 這個穩定性對開發者來說是相當好的事情,因為它讓不少實作 (implementation) 有時間慢慢趕上。我會把重點放在第三版的語法。為了避免混淆,我會繼續使用 JavaScript 這個名稱。 diff --git a/files/zh-tw/web/javascript/memory_management/index.md b/files/zh-tw/web/javascript/memory_management/index.md index e2b9eb32eace8d..8977e6cb5f621a 100644 --- a/files/zh-tw/web/javascript/memory_management/index.md +++ b/files/zh-tw/web/javascript/memory_management/index.md @@ -195,7 +195,7 @@ The max amount of available heap memory can be increased with a flag: `node --max-old-space-size=6000 index.js` -We can also expose the garbage collector for debugging memory issues using a flag and the [Chrome Debugger](https://nodejs.org/en/docs/guides/debugging-getting-started/): +We can also expose the garbage collector for debugging memory issues using a flag and the [Chrome Debugger](https://nodejs.org/en/learn/getting-started/debugging): ```sh node --expose-gc --inspect index.js @@ -203,6 +203,6 @@ node --expose-gc --inspect index.js ## 參見 -- [IBM article on "Memory leak patterns in JavaScript" (2007)](http://www.ibm.com/developerworks/web/library/wa-memleak/) -- [Kangax article on how to register event handler and avoid memory leaks (2010)](http://msdn.microsoft.com/en-us/magazine/ff728624.aspx) +- [IBM article on "Memory leak patterns in JavaScript" (2007)](https://developer.ibm.com/technologies/web-development/) +- [Kangax article on how to register event handler and avoid memory leaks (2010)]() - [Performance](/zh-TW/docs/Mozilla/Performance) diff --git a/files/zh-tw/web/javascript/reference/functions/rest_parameters/index.md b/files/zh-tw/web/javascript/reference/functions/rest_parameters/index.md index 58dbbfd6f226f4..5e7c5496e020ac 100644 --- a/files/zh-tw/web/javascript/reference/functions/rest_parameters/index.md +++ b/files/zh-tw/web/javascript/reference/functions/rest_parameters/index.md @@ -131,5 +131,5 @@ console.log(sortArguments(5, 3, 7, 1)); // 顯示 1, 3, 5, 7 - [Array](/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/Array) - [Functions](/zh-TW/docs/Web/JavaScript/Reference/Functions) - [Original proposal at ecmascript.org](http://wiki.ecmascript.org/doku.php?id=harmony:rest_parameters) -- [JavaScript arguments object and beyond](http://javascriptweblog.wordpress.com/2011/01/18/javascripts-arguments-object-and-beyond/) +- [JavaScript arguments object and beyond](https://javascriptweblog.wordpress.com/2011/01/18/javascripts-arguments-object-and-beyond/) - [Destructuring assignment](/zh-TW/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment) diff --git a/files/zh-tw/web/javascript/reference/global_objects/array/index.md b/files/zh-tw/web/javascript/reference/global_objects/array/index.md index 2cf5fe2b9b5092..c81273ef9b0601 100644 --- a/files/zh-tw/web/javascript/reference/global_objects/array/index.md +++ b/files/zh-tw/web/javascript/reference/global_objects/array/index.md @@ -26,7 +26,7 @@ new Array(arrayLength) Array(「陣列」)是類似列表(list)的物件(Object),它們的原型(Prototype)擁有方法(methods)來執行遍歷和變異操作。JavaScript 陣列的長度(元素數量),以及其元素的類型都不是固定的。取決於工程師如何選擇使用陣列,可以隨時更改陣列的長度,也可不連續儲存資料, 所以並不保證這些資料是集中的。一般情況下,這些特性很方便使用;但若這些功能都不符合你的用途,你可能會想使用型別陣列(typed arrays)。 -有些人認為即便會發生警告,仍然[不應該使用關聯陣列](http://www.andrewdupont.net/2006/05/18/javascript-associative-arrays-considered-harmful/),而應該使用 {{jsxref("Global_Objects/Object", "objects")}}。你可參考[輕量級 JavaScript 字典](http://www.less-broken.com/blog/2010/12/lightweight-javascript-dictionaries.html)當中的範例。 +有些人認為即便會發生警告,仍然[不應該使用關聯陣列](https://andrewdupont.net/2006/05/18/javascript-associative-arrays-considered-harmful/),而應該使用 {{jsxref("Global_Objects/Object", "objects")}}。你可參考[輕量級 JavaScript 字典](http://www.less-broken.com/blog/2010/12/lightweight-javascript-dictionaries.html)當中的範例。 ### 存取陣列元素 diff --git a/files/zh-tw/web/javascript/reference/global_objects/array/map/index.md b/files/zh-tw/web/javascript/reference/global_objects/array/map/index.md index 2685c17a1978b8..9c790ae141bf8c 100644 --- a/files/zh-tw/web/javascript/reference/global_objects/array/map/index.md +++ b/files/zh-tw/web/javascript/reference/global_objects/array/map/index.md @@ -151,7 +151,7 @@ var values = Array.prototype.map.call(elems, function (obj) { ### 棘手的範例 -[(透過連結的部落格啟發)](http://www.wirfs-brock.com/allen/posts/166) +[(透過連結的部落格啟發)](https://wirfs-brock.com/allen/posts/166) 透過一個(被遍歷元素的)參數叫出回調是個常見的用法。有些函式也常常在含有其他可選參數的情況下,使用上一個參數。這種行為常常會給人帶來困惑。 diff --git a/files/zh-tw/web/javascript/reference/global_objects/boolean/index.md b/files/zh-tw/web/javascript/reference/global_objects/boolean/index.md index 24443a78dbc3df..43eb227183f7cf 100644 --- a/files/zh-tw/web/javascript/reference/global_objects/boolean/index.md +++ b/files/zh-tw/web/javascript/reference/global_objects/boolean/index.md @@ -117,4 +117,4 @@ var bObjProto = new Boolean({}); - {{jsxref("Boolean.prototype")}} - {{Glossary("Boolean")}} -- [Boolean data type (Wikipedia)](http://en.wikipedia.org/wiki/Boolean_data_type) +- [布林資料類型(維基百科)]() diff --git a/files/zh-tw/web/javascript/reference/global_objects/date/index.md b/files/zh-tw/web/javascript/reference/global_objects/date/index.md index b837f9aa66afd0..171a075a8b432a 100644 --- a/files/zh-tw/web/javascript/reference/global_objects/date/index.md +++ b/files/zh-tw/web/javascript/reference/global_objects/date/index.md @@ -31,7 +31,7 @@ new Date(year, month[, day[, hour[, minutes[, seconds[, milliseconds]]]]]); - : 自世界標準時間(UTC) 1970 年 1 月 1 日 00:00:00 開始的毫秒整數(Integer)值(Unix 紀元;但要注意到大多 Unix 時間戳記是以秒而非毫秒為單位)。 - `dateString` - - : 表示時間日期的字串。這個字串應該要能被 {{jsxref("Date.parse()")}} 方法解析(符合 [IETF-compliant RFC 2822 timestamps](http://tools.ietf.org/html/rfc2822#page-14) 及 [version of ISO8601](http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15) 格式要求). + - : 表示時間日期的字串。這個字串應該要能被 {{jsxref("Date.parse()")}} 方法解析(符合 [IETF-compliant RFC 2822 timestamps](https://datatracker.ietf.org/doc/html/rfc2822#page-14) 及 [version of ISO8601](https://262.ecma-international.org/5.1/#sec-15.9.1.15) 格式要求). > [!NOTE] > 由於各家瀏覽器有所不同且具有差異性,因此非常不鼓勵使用 Date 建構子(或 `Date.parse` 方法,它們是同等的)來解析時間日期字串。 @@ -181,7 +181,3 @@ yourFunctionReturn = printElapsedTime(yourFunction); ## 瀏覽器相容性 {{Compat}} - -\[1] 一些瀏覽器在解析日期時間會發生問題: [3/14/2012 blog from danvk Comparing FF/IE/Chrome on Parsing Date Strings](http://dygraphs.com/date-formats.html) - -\[2] [ISO8601 Date Format is not supported]() in Internet Explorer 8, and other version can have [issues when parsing dates](http://dygraphs.com/date-formats.html) diff --git a/files/zh-tw/web/javascript/reference/global_objects/math/index.md b/files/zh-tw/web/javascript/reference/global_objects/math/index.md index d0d724d8789461..b2a4c682383e55 100644 --- a/files/zh-tw/web/javascript/reference/global_objects/math/index.md +++ b/files/zh-tw/web/javascript/reference/global_objects/math/index.md @@ -71,7 +71,7 @@ slug: Web/JavaScript/Reference/Global_Objects/Math - {{jsxref("Global_Objects/Math/floor", "Math.floor(x)")}} - : 回傳不大於 x 的最大整數值。 - {{jsxref("Global_Objects/Math/fround", "Math.fround(x)")}} - - : Returns the nearest [single precision](http://en.wikipedia.org/wiki/Single-precision_floating-point_format) float representation of a number. + - : Returns the nearest [single precision](https://en.wikipedia.org/wiki/Single-precision_floating-point_format) float representation of a number. - {{jsxref("Global_Objects/Math/hypot", "Math.hypot([x[, y[, …]]])")}} - : 回傳參數平方之和的平方根。 - {{jsxref("Global_Objects/Math/imul", "Math.imul(x, y)")}} diff --git a/files/zh-tw/web/javascript/reference/global_objects/object/create/index.md b/files/zh-tw/web/javascript/reference/global_objects/object/create/index.md index 5551e404b56546..11cac99de1a96b 100644 --- a/files/zh-tw/web/javascript/reference/global_objects/object/create/index.md +++ b/files/zh-tw/web/javascript/reference/global_objects/object/create/index.md @@ -196,4 +196,4 @@ if (typeof Object.create !== "function") { - {{jsxref("Object.defineProperty()")}} - {{jsxref("Object.defineProperties()")}} - {{jsxref("Object.prototype.isPrototypeOf()")}} -- John Resig's post on [getPrototypeOf()](http://ejohn.org/blog/objectgetprototypeof/) +- John Resig's post on [getPrototypeOf()](https://johnresig.com/blog/objectgetprototypeof/) diff --git a/files/zh-tw/web/javascript/reference/global_objects/object/defineproperty/index.md b/files/zh-tw/web/javascript/reference/global_objects/object/defineproperty/index.md index 8e28ef0aa24517..006184799b795c 100644 --- a/files/zh-tw/web/javascript/reference/global_objects/object/defineproperty/index.md +++ b/files/zh-tw/web/javascript/reference/global_objects/object/defineproperty/index.md @@ -339,7 +339,7 @@ Only Internet Explorer 9 and later, and Firefox 23 and later, appear to fully an ### Internet Explorer 8 specific notes -Internet Explorer 8 implemented a `Object.defineProperty()` method that could [only be used on DOM objects](https://msdn.microsoft.com/en-us/library/dd229916%28VS.85%29.aspx). A few things need to be noted: +Internet Explorer 8 implemented a `Object.defineProperty()` method that could [only be used on DOM objects](https://learn.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/). A few things need to be noted: - Trying to use `Object.defineProperty()` on native objects throws an error. - Property attributes must be set to some values. The `configurable`, `enumerable` and `writable` attributes should all be set to `true` for data descriptor and `true` for `configurable`, `false` for `enumerable` for accessor descriptor.(?) Any attempt to provide other value(?) will result in an error being thrown. diff --git a/files/zh-tw/web/javascript/reference/global_objects/object/getprototypeof/index.md b/files/zh-tw/web/javascript/reference/global_objects/object/getprototypeof/index.md index 94ea8d84db8b36..78be224d8b9337 100644 --- a/files/zh-tw/web/javascript/reference/global_objects/object/getprototypeof/index.md +++ b/files/zh-tw/web/javascript/reference/global_objects/object/getprototypeof/index.md @@ -54,5 +54,5 @@ Object.getPrototypeOf("foo"); - {{jsxref("Object.prototype.isPrototypeOf()")}} - {{jsxref("Object.setPrototypeOf()")}} {{experimental_inline}} - [`Object.prototype.__proto__`](/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/Object/proto) -- John Resig 的文章--《 [getPrototypeOf](http://ejohn.org/blog/objectgetprototypeof/) 》 +- John Resig 的文章--《[getPrototypeOf](https://johnresig.com/blog/objectgetprototypeof/)》 - {{jsxref("Reflect.getPrototypeOf()")}} diff --git a/files/zh-tw/web/javascript/reference/global_objects/object/keys/index.md b/files/zh-tw/web/javascript/reference/global_objects/object/keys/index.md index 20afb4e7ec15b1..5c2f11c9c8c312 100644 --- a/files/zh-tw/web/javascript/reference/global_objects/object/keys/index.md +++ b/files/zh-tw/web/javascript/reference/global_objects/object/keys/index.md @@ -125,7 +125,7 @@ if (!Object.keys) { 請注意以上的代碼片段在 IE7 中( IE8 也有可能 ),從不同的 window 傳入物件將包含非可列舉的 key 。 -較精簡的瀏覽器 Polyfill,請參閱 [Javascript - Object.keys Browser Compatibility](http://tokenposts.blogspot.com.au/2012/04/javascript-objectkeys-browser.html). +較精簡的瀏覽器 Polyfill,請參閱 [Javascript - Object.keys Browser Compatibility](https://tokenposts.blogspot.com/2012/04/javascript-objectkeys-browser.html). ## 規範 diff --git a/files/zh-tw/web/javascript/reference/global_objects/parseint/index.md b/files/zh-tw/web/javascript/reference/global_objects/parseint/index.md index ab583b2dbeee67..1125e28809fb30 100644 --- a/files/zh-tw/web/javascript/reference/global_objects/parseint/index.md +++ b/files/zh-tw/web/javascript/reference/global_objects/parseint/index.md @@ -18,7 +18,7 @@ parseInt(string, radix); ### 參數 - `string` - - : 待轉成數字的字串。若 `string` 參數類型不是字串的話,會先將其轉成字串(相當於先執行 [`ToString`](http://www.ecma-international.org/ecma-262/6.0/#sec-tostring) 再執行 `parseInt`)空白值會被忽略。 + - : 待轉成數字的字串。若 `string` 參數類型不是字串的話,會先將其轉成字串(相當於先執行 [`ToString`](https://262.ecma-international.org/6.0/#sec-tostring) 再執行 `parseInt`)空白值會被忽略。 - `radix` - : 從 2 到 36,能代表該進位系統的數字。例如說指定 `10` 就等於指定十進位。**一定要定義這個參數**以避免他人的困惑、也好預估函式的行為。如果沒有指定 radix 的話,給出的結果會按照實做不同而異,請注意,通常預設值**不是** 10 進位。 diff --git a/files/zh-tw/web/javascript/reference/global_objects/promise/index.md b/files/zh-tw/web/javascript/reference/global_objects/promise/index.md index 98939a1a4df0ce..a8fe5ad70ce024 100644 --- a/files/zh-tw/web/javascript/reference/global_objects/promise/index.md +++ b/files/zh-tw/web/javascript/reference/global_objects/promise/index.md @@ -220,7 +220,7 @@ if ("Promise" in window) { ## 使用 XHR 載入圖片 -另一個使用 `Promise` and [`XMLHttpRequest`](/zh-TW/docs/Web/API/XMLHttpRequest) 來載入圖片的簡單例子可以在 MDN GitHub [js-examples](https://github.com/mdn/js-examples/tree/master/promises-test) 儲存庫找到。 你也可以[see it in action](https://mdn.github.io/js-examples/promises-test/)。每個步驟都附以註解,讓你能逐步遵隨 Promise 與 XHR 架構。 +另一個使用 `Promise` and [`XMLHttpRequest`](/zh-TW/docs/Web/API/XMLHttpRequest) 來載入圖片的簡單例子可以在 MDN GitHub [js-examples](https://github.com/mdn/js-examples/tree/main/promises-test) 儲存庫找到。 你也可以[see it in action](https://mdn.github.io/js-examples/promises-test/)。每個步驟都附以註解,讓你能逐步遵隨 Promise 與 XHR 架構。 ## 規範 @@ -232,15 +232,8 @@ if ("Promise" in window) { ## 參見 -- [Using promises](/zh-TW/docs/Web/JavaScript/Guide/Using_promises) -- [Promises/A+ specification](http://promisesaplus.com/) -- [Venkatraman.R - JS Promise (Part 1, Basics)](https://medium.com/@ramsunvtech/promises-of-promise-part-1-53f769245a53) -- [Venkatraman.R - JS Promise (Part 2 - Using Q.js, When.js and RSVP.js)](https://medium.com/@ramsunvtech/js-promise-part-2-q-js-when-js-and-rsvp-js-af596232525c#.dzlqh6ski) -- [Venkatraman.R - Tools for Promises Unit Testing](https://tech.io/playgrounds/11107/tools-for-promises-unittesting/introduction) -- [Jake Archibald: JavaScript Promises: There and Back Again](http://www.html5rocks.com/en/tutorials/es6/promises/) -- [Domenic Denicola: Callbacks, Promises, and Coroutines – Asynchronous Programming Patterns in JavaScript](http://de.slideshare.net/domenicdenicola/callbacks-promises-and-coroutines-oh-my-the-evolution-of-asynchronicity-in-javascript) -- [Matt Greer: JavaScript Promises ... In Wicked Detail](http://www.mattgreer.org/articles/promises-in-wicked-detail/) -- [Forbes Lindesay: promisejs.org](https://www.promisejs.org/) -- [Nolan Lawson: We have a problem with promises — Common mistakes with promises](http://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html) -- [Promise polyfill](https://github.com/jakearchibald/es6-promise/) -- [Udacity: JavaScript Promises](https://www.udacity.com/course/javascript-promises--ud898) +- [`core-js` 中 `Promise` 的 polyfill](https://github.com/zloirock/core-js#ecmascript-promise) +- [使用 Promise](/zh-TW/docs/Web/JavaScript/Guide/Using_promises) 指南 +- [Promises/A+ 規範](https://promisesaplus.com/) +- [JavaScript Promise:簡介](https://web.dev/articles/promises),web.dev(2013) +- [回呼、Promise 和協程:JavaScript 中的非同步程式設計模式](https://www.slideshare.net/slideshow/callbacks-promises-and-coroutines-oh-my-the-evolution-of-asynchronicity-in-javascript/9953720),來自 Domenic Denicola 的幻燈片(2011) diff --git a/files/zh-tw/web/javascript/reference/lexical_grammar/index.md b/files/zh-tw/web/javascript/reference/lexical_grammar/index.md index eecfb5ebc87e3a..da1bbc6506fb6b 100644 --- a/files/zh-tw/web/javascript/reference/lexical_grammar/index.md +++ b/files/zh-tw/web/javascript/reference/lexical_grammar/index.md @@ -11,24 +11,24 @@ slug: Web/JavaScript/Reference/Lexical_grammar 控制字元是用來控制對文本的解釋,但無法被顯示出來。 -| 編碼位置 | 名稱 | 縮寫 | 說明 | -| -------- | -------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------- | -| `U+200C` | 零寬不連字 | \ | 放置在兩個字元之間來避免在某些語言中這兩個字元被當成連字 ([Wikipedia](http://en.wikipedia.org/wiki/Zero-width_non-joiner)) | -| `U+200D` | 零寬連字 | \ | 放置在兩個通常不會發生連字的字元中間在某些語言 來讓他們成為連字 ([Wikipedia](http://en.wikipedia.org/wiki/Zero-width_joiner)) | -| `U+FEFF` | 位元組順序記號 | \ | 出現在腳本的開頭,用來標記此腳本是否為 Unicode 還有文本的位元組順序 ([Wikipedia](http://en.wikipedia.org/wiki/Byte_order_mark)) | +| 編碼位置 | 名稱 | 縮寫 | 說明 | +| -------- | -------------- | ------- | ------------------------------------------------------------------------------------------------------------------------- | +| `U+200C` | 零寬不連字 | \ | 放置在兩個字元之間來避免在某些語言中這兩個字元被當成連字([維基百科](https://zh.wikipedia.org/wiki/零宽不连字)) | +| `U+200D` | 零寬連字 | \ | 放置在兩個通常不會發生連字的字元中間在某些語言 來讓他們成為連字([維基百科](https://zh.wikipedia.org/wiki/零宽连字)) | +| `U+FEFF` | 位元組順序記號 | \ | 出現在腳本的開頭,用來標記此腳本是否為 Unicode 還有文本的位元組順序([維基百科](https://zh.wikipedia.org/wiki/端序記號)) | ## 空白字元 -空白字元提升了程式碼的可讀性也能將 tokens 分開。這些字元通常對程式的執行是不必要的。[壓縮源碼工具](http://en.wikipedia.org/wiki/Minification_%28programming%29)通常會移除不必要的空白來減少資料傳輸量。 +空白字元提升了程式碼的可讀性也能將 tokens 分開。這些字元通常對程式的執行是不必要的。[壓縮源碼工具](https://zh.wikipedia.org/wiki/極簡化)通常會移除不必要的空白來減少資料傳輸量。 -| 編碼位置 | 名稱 | 縮寫 | 說明 | 跳脫字元 | -| -------- | --------------------- | ------- | ------------------------------------------------------------------------------------------------------------ | -------- | -| U+0009 | 定位字元 | \ | 橫向定位字元 | \t | -| U+000B | 縱向定位字元 | \ | 縱向定位字元 | \v | -| U+000C | 換頁字元 | \ | 控制換頁字元 ([Wikipedia](http://en.wikipedia.org/wiki/Page_break#Form_feed)) | \f | -| U+0020 | 空格 | \ | 一般的空白字元 | | -| U+00A0 | 不中斷空格 | \ | 一般的空白字元,但禁止自動換行或合併多個空白 ([Wikipedia](https://en.wikipedia.org/wiki/Non-breaking_space)) | | -| 其他 | 其他 Unicode 空白字元 | \ | [Wikipedia](http://en.wikipedia.org/wiki/Space_%28punctuation%29#Spaces_in_Unicode) | | +| 編碼位置 | 名稱 | 縮寫 | 說明 | 跳脫字元 | +| -------- | --------------------- | ------- | ---------------------------------------------------------------------------------------------------- | -------- | +| U+0009 | 定位字元 | \ | 橫向定位字元 | \t | +| U+000B | 縱向定位字元 | \ | 縱向定位字元 | \v | +| U+000C | 換頁字元 | \ | 控制換頁字元([維基百科](https://en.wikipedia.org/wiki/Page_break#Form_feed)) | \f | +| U+0020 | 空格 | \ | 一般的空白字元 | | +| U+00A0 | 不中斷空格 | \ | 一般的空白字元,但禁止自動換行或合併多個空白([維基百科](https://zh.wikipedia.org/wiki/不换行空格)) | | +| 其他 | 其他 Unicode 空白字元 | \ | [維基百科](https://zh.wikipedia.org/wiki/空格#Unicode定義) | | ## 行終止字元 @@ -36,12 +36,12 @@ slug: Web/JavaScript/Reference/Lexical_grammar 在 ECMAScript 中,只有以下的 Unicode 碼位被視為行終止字元,其他如 Next Line, NEL, U+0085 等的行終止字元被視為空白字元。 -| 編碼位置 | 名稱 | 縮寫 | 說明 | 跳脫字元 | -| -------- | ---------- | ----- | ------------------------------------------------- | -------- | -| U+000A | 換行字元 | \ | 在 UNIX 類的系統中的換行字元 | \n | -| U+000D | 歸位字元 | \ | 在 Commodore 與早期的 Mac 系統中的換行字元 | \r | -| U+2028 | 行分隔字元 | \ | [Wikipedia](http://en.wikipedia.org/wiki/Newline) | | -| U+2029 | 段分隔字元 | \ | [Wikipedia](http://en.wikipedia.org/wiki/Newline) | | +| 編碼位置 | 名稱 | 縮寫 | 說明 | 跳脫字元 | +| -------- | ---------- | ----- | ---------------------------------------------- | -------- | +| U+000A | 換行字元 | \ | 在 UNIX 類的系統中的換行字元 | \n | +| U+000D | 歸位字元 | \ | 在 Commodore 與早期的 Mac 系統中的換行字元 | \r | +| U+2028 | 行分隔字元 | \ | [維基百科](https://zh.wikipedia.org/wiki/換行) | | +| U+2029 | 段分隔字元 | \ | [維基百科](https://zh.wikipedia.org/wiki/換行) | | ## 註解 @@ -363,7 +363,7 @@ tag `string text ${expression} string text` - `continue`, `break`, `throw` - `return` -ECMAScript 規格闡明 [自動插入分號的三個規則](https://tc39.github.io/ecma262/#sec-rules-of-automatic-semicolon-insertion)。 +ECMAScript 規格闡明 [自動插入分號的三個規則](https://tc39.es/ecma262/#sec-rules-of-automatic-semicolon-insertion)。 1\. 如果 [行終止字元](#Line_terminators) 或 "}" 出現在不符文法的地方,一個分號會被自動插入在其之前。 @@ -419,7 +419,7 @@ a + b; ## 參閱 - [Jeff Walden: Binary and octal numbers](http://whereswalden.com/2013/08/12/micro-feature-from-es6-now-in-firefox-aurora-and-nightly-binary-and-octal-numbers/) -- [Mathias Bynens: JavaScript character escape sequences](http://mathiasbynens.be/notes/javascript-escapes) +- [Mathias Bynens: JavaScript character escape sequences](https://mathiasbynens.be/notes/javascript-escapes) - {{jsxref("Boolean")}} - {{jsxref("Number")}} - {{jsxref("RegExp")}} diff --git a/files/zh-tw/web/javascript/reference/operators/typeof/index.md b/files/zh-tw/web/javascript/reference/operators/typeof/index.md index 8570074c9ca69c..303e642d99450a 100644 --- a/files/zh-tw/web/javascript/reference/operators/typeof/index.md +++ b/files/zh-tw/web/javascript/reference/operators/typeof/index.md @@ -104,7 +104,7 @@ typeof Math.sin === "function"; typeof null === "object"; // 自從有 JavaScript 開始就是這樣了 ``` -自從 JavaScript 一開始出現, JavaScript 的值就總以型別標簽跟著一個值的方式表示。物件的型別標簽是 0. 而 `null` 這個值是使用 NULL 指標 (在大部份平台上是 0x00) 來表示. 因此, null 看起來像是一個以 0 為型別標簽的值, 並使得 `typeof` 傳回不甚正確的結果. ([參考來源](http://www.2ality.com/2013/10/typeof-null.html)) +自從 JavaScript 一開始出現, JavaScript 的值就總以型別標簽跟著一個值的方式表示。物件的型別標簽是 0. 而 `null` 這個值是使用 NULL 指標 (在大部份平台上是 0x00) 來表示. 因此, null 看起來像是一個以 0 為型別標簽的值, 並使得 `typeof` 傳回不甚正確的結果. ([參考來源](https://2ality.com/2013/10/typeof-null.html)) 這個問題已計畫[在下一版 ECMAScript 予以修正](http://wiki.ecmascript.org/doku.php?id=harmony:typeof_null) (會以 opt-in 方式提供). 屆時它將會做出如 `typeof null === 'null'` 的正確回傳結果。 diff --git a/files/zh-tw/web/javascript/reference/statements/async_function/index.md b/files/zh-tw/web/javascript/reference/statements/async_function/index.md index ac73d4d4b9db60..889ec4e4a2c449 100644 --- a/files/zh-tw/web/javascript/reference/statements/async_function/index.md +++ b/files/zh-tw/web/javascript/reference/statements/async_function/index.md @@ -122,4 +122,4 @@ async function getProcessedData(url) { - {{jsxref("Operators/async_function", "async function expression")}} - {{jsxref("AsyncFunction")}} 物件 - {{jsxref("Operators/await", "await")}} -- ["Decorating Async Javascript Functions" on "innolitics.com"](http://innolitics.com/10x/javascript-decorators-for-promise-returning-functions/) +- ["Decorating Async Javascript Functions" on "innolitics.com"](https://innolitics.com/articles/javascript-decorators-for-promise-returning-functions/) diff --git a/files/zh-tw/web/javascript/reference/statements/export/index.md b/files/zh-tw/web/javascript/reference/statements/export/index.md index b63e3c74eaa576..3763ecdc14a44e 100644 --- a/files/zh-tw/web/javascript/reference/statements/export/index.md +++ b/files/zh-tw/web/javascript/reference/statements/export/index.md @@ -153,4 +153,4 @@ Note 注意預設輸出不能使用 var, let , const。 - {{jsxref("Statements/import", "import")}} - [ES6 in Depth: Modules](https://hacks.mozilla.org/2015/08/es6-in-depth-modules/), Hacks blog post by Jason Orendorff -- [Axel Rauschmayer's book: "Exploring JS: Modules"](http://exploringjs.com/es6/ch_modules.html) +- [Axel Rauschmayer's book: "Exploring JS: Modules"](https://exploringjs.com/es6/ch_modules.html) diff --git a/files/zh-tw/web/javascript/reference/statements/function_star_/index.md b/files/zh-tw/web/javascript/reference/statements/function_star_/index.md index 0c7be6a0eae2c9..97c1b93481d39b 100644 --- a/files/zh-tw/web/javascript/reference/statements/function_star_/index.md +++ b/files/zh-tw/web/javascript/reference/statements/function_star_/index.md @@ -158,6 +158,6 @@ Starting with Gecko 29, the completed generator function no longer throws a {{js - Other web resources: - [Regenerator](http://facebook.github.io/regenerator/) an ES2015 generator compiler to ES5 - - [Forbes Lindesay: Promises and Generators: control flow utopia — JSConf EU 2013](http://www.youtube.com/watch?v=qbKWsbJ76-s) + - [Forbes Lindesay: Promises and Generators: control flow utopia — JSConf EU 2013](https://www.youtube.com/watch?v=qbKWsbJ76-s) - [Task.js](https://github.com/mozilla/task.js) - [Iterating generators asynchronously](https://github.com/getify/You-Dont-Know-JS/blob/master/async%20%26%20performance/ch4.md#iterating-generators-asynchronously) diff --git a/files/zh-tw/web/javascript/reference/statements/import/index.md b/files/zh-tw/web/javascript/reference/statements/import/index.md index 3e322914c09247..8695c87fd65941 100644 --- a/files/zh-tw/web/javascript/reference/statements/import/index.md +++ b/files/zh-tw/web/javascript/reference/statements/import/index.md @@ -203,4 +203,4 @@ for (const link of document.querySelectorAll("nav > a")) { - [Previewing ES6 Modules and more from ES2015, ES2016 and beyond](https://blogs.windows.com/msedgedev/2016/05/17/es6-modules-and-beyond/) - [ES6 in Depth: Modules](https://hacks.mozilla.org/2015/08/es6-in-depth-modules/), Hacks blog post by Jason Orendorff - [ES modules: A cartoon deep-dive](https://hacks.mozilla.org/2018/03/es-modules-a-cartoon-deep-dive/), Hacks blog post by Lin Clark -- [Axel Rauschmayer's book: "Exploring JS: Modules"](http://exploringjs.com/es6/ch_modules.html) +- [Axel Rauschmayer's book: "Exploring JS: Modules"](https://exploringjs.com/es6/ch_modules.html) diff --git a/files/zh-tw/web/javascript/reference/statements/label/index.md b/files/zh-tw/web/javascript/reference/statements/label/index.md index cfc7fe05db17a2..cb163d968dec29 100644 --- a/files/zh-tw/web/javascript/reference/statements/label/index.md +++ b/files/zh-tw/web/javascript/reference/statements/label/index.md @@ -140,7 +140,7 @@ console.log("swap"); ### 標記的函式宣告式 -從 ECMAScript 2015 開始,標準的函式宣告式現在對規範的 [Web 相容性附件](http://www.ecma-international.org/ecma-262/6.0/#sec-labelled-function-declarations)中的非嚴格程式碼進行了標準化。 +從 ECMAScript 2015 開始,標準的函式宣告式現在對規範的 [Web 相容性附件](https://262.ecma-international.org/6.0/#sec-labelled-function-declarations)中的非嚴格程式碼進行了標準化。 ```js L: function F() {} diff --git a/files/zh-tw/web/javascript/reference/statements/switch/index.md b/files/zh-tw/web/javascript/reference/statements/switch/index.md index ea4ad1c8225fd2..e6f63d62545231 100644 --- a/files/zh-tw/web/javascript/reference/statements/switch/index.md +++ b/files/zh-tw/web/javascript/reference/statements/switch/index.md @@ -127,7 +127,7 @@ It also works when you put default before all other cases. Source for this technique is here: -[Switch statement multiple cases in JavaScript (Stack Overflow)](http://stackoverflow.com/questions/13207927/switch-statement-multiple-cases-in-javascript) +[Switch statement multiple cases in JavaScript (Stack Overflow)](https://stackoverflow.com/questions/13207927/switch-statement-for-multiple-cases-in-javascript) #### Multi-case - single operation diff --git a/files/zh-tw/web/javascript/reference/strict_mode/index.md b/files/zh-tw/web/javascript/reference/strict_mode/index.md index d7bc743116c62d..8589f776e9bca9 100644 --- a/files/zh-tw/web/javascript/reference/strict_mode/index.md +++ b/files/zh-tw/web/javascript/reference/strict_mode/index.md @@ -5,7 +5,7 @@ slug: Web/JavaScript/Reference/Strict_mode {{JsSidebar("More")}} -[ECMAScript 5](http://www.ecma-international.org/publications/standards/Ecma-262.htm) 提供開發者語法嚴格、語法受限的模式 (strict mode) ,會影響語法的使用但沒支援受限模式的瀏覽器一樣可以跑,只是行為有很大的可能會跟你想的不一樣。所以別太依賴受限模式,除非你做過功能性測試。另外這個模式可以混用在普通模式裡,你可以利用這個特性慢慢把舊的程式碼轉變成完全嚴謹和低變化性的狀態。 +[ECMAScript 5](https://ecma-international.org/publications-and-standards/standards/ecma-262/) 提供開發者語法嚴格、語法受限的模式 (strict mode) ,會影響語法的使用但沒支援受限模式的瀏覽器一樣可以跑,只是行為有很大的可能會跟你想的不一樣。所以別太依賴受限模式,除非你做過功能性測試。另外這個模式可以混用在普通模式裡,你可以利用這個特性慢慢把舊的程式碼轉變成完全嚴謹和低變化性的狀態。 這個模式裡做了些語意上的修正: @@ -303,7 +303,7 @@ function privilegedInvoker() { privilegedInvoker(); ``` -Third, `arguments` for strict mode functions no longer provide access to the corresponding function call's variables. In some old ECMAScript implementations `arguments.caller` was an object whose properties aliased variables in that function. This is a [security hazard](http://stuff.mit.edu/iap/2008/facebook/) because it breaks the ability to hide privileged values via function abstraction; it also precludes most optimizations. For these reasons no recent browsers implement it. Yet because of its historical functionality, `arguments.caller` for a strict mode function is also a non-deletable property which throws when set or retrieved: +Third, `arguments` for strict mode functions no longer provide access to the corresponding function call's variables. In some old ECMAScript implementations `arguments.caller` was an object whose properties aliased variables in that function. This is a [security hazard](https://stuff.mit.edu/iap/2008/facebook/) because it breaks the ability to hide privileged values via function abstraction; it also precludes most optimizations. For these reasons no recent browsers implement it. Yet because of its historical functionality, `arguments.caller` for a strict mode function is also a non-deletable property which throws when set or retrieved: ```js "use strict"; @@ -365,7 +365,7 @@ This prohibition isn't strict mode proper, because such function statements are ## Strict mode in browsers -The major browsers now implement strict mode. However, don't blindly depend on it since there still are numerous [Browser versions used in the wild that only have partial support for strict mode](http://caniuse.com/use-strict) or do not support it at all (e.g. Internet Explorer below version 10!). _Strict mode changes semantics._ Relying on those changes will cause mistakes and errors in browsers which don't implement strict mode. Exercise caution in using strict mode, and back up reliance on strict mode with feature tests that check whether relevant parts of strict mode are implemented. Finally, make sure to _test your code in browsers that do and don't support strict mode_. If you test only in browsers that don't support strict mode, you're very likely to have problems in browsers that do, and vice versa. +The major browsers now implement strict mode. However, don't blindly depend on it since there still are numerous [Browser versions used in the wild that only have partial support for strict mode](https://caniuse.com/use-strict) or do not support it at all (e.g. Internet Explorer below version 10!). _Strict mode changes semantics._ Relying on those changes will cause mistakes and errors in browsers which don't implement strict mode. Exercise caution in using strict mode, and back up reliance on strict mode with feature tests that check whether relevant parts of strict mode are implemented. Finally, make sure to _test your code in browsers that do and don't support strict mode_. If you test only in browsers that don't support strict mode, you're very likely to have problems in browsers that do, and vice versa. ## See also @@ -373,7 +373,7 @@ The major browsers now implement strict mode. However, don't blindly depend on i - [Where's Walden? » New ES5 strict mode requirement: function statements not at top level of a program or function are prohibited](http://whereswalden.com/2011/01/24/new-es5-strict-mode-requirement-function-statements-not-at-top-level-of-a-program-or-function-are-prohibited/) - [Where's Walden? » New ES5 strict mode support: new vars created by strict mode eval code are local to that code only](http://whereswalden.com/2011/01/10/new-es5-strict-mode-support-new-vars-created-by-strict-mode-eval-code-are-local-to-that-code-only/) - [JavaScript "use strict" tutorial for beginners.](http://qnimate.com/javascript-strict-mode-in-nutshell/) -- [John Resig - ECMAScript 5 Strict Mode, JSON, and More](http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/) +- [John Resig - ECMAScript 5 Strict Mode, JSON, and More](https://johnresig.com/blog/ecmascript-5-strict-mode-json-and-more/) - [ECMA-262-5 in detail. Chapter 2. Strict Mode.](http://dmitrysoshnikov.com/ecmascript/es5-chapter-2-strict-mode/) - [Strict mode compatibility table](http://kangax.github.io/compat-table/es5/#Strict_mode) - [Transitioning to strict mode](/zh-TW/docs/Web/JavaScript/Reference/Strict_mode/Transitioning_to_strict_mode) diff --git a/files/zh-tw/web/javascript/reference/template_literals/index.md b/files/zh-tw/web/javascript/reference/template_literals/index.md index 5cfa0a6d11087f..18b1409750e295 100644 --- a/files/zh-tw/web/javascript/reference/template_literals/index.md +++ b/files/zh-tw/web/javascript/reference/template_literals/index.md @@ -199,7 +199,7 @@ latex`\unicode`; // SyntaxError: malformed Unicode character escape sequence ``` -Tagged template literals should allow the embedding of languages (for example [DSLs](https://en.wikipedia.org/wiki/Domain-specific_language), or [LaTeX](https://en.wikipedia.org/wiki/LaTeX)), where other escapes sequences are common. The ECMAScript proposal [Template Literal Revision](https://tc39.github.io/proposal-template-literal-revision/) (stage 4, to be integrated in the ECMAScript 2018 standard) removes the syntax restriction of ECMAScript escape sequences from tagged template literals. +Tagged template literals should allow the embedding of languages (for example [DSLs](https://en.wikipedia.org/wiki/Domain-specific_language), or [LaTeX](https://en.wikipedia.org/wiki/LaTeX)), where other escapes sequences are common. The ECMAScript proposal [Template Literal Revision](https://tc39.es/proposal-template-literal-revision/) (stage 4, to be integrated in the ECMAScript 2018 standard) removes the syntax restriction of ECMAScript escape sequences from tagged template literals. However, illegal escape sequence must still be represented in the "cooked" representation. They will show up as {{jsxref("undefined")}} element in the "cooked" array: diff --git a/files/zh-tw/web/mathml/index.md b/files/zh-tw/web/mathml/index.md index 30df26263ba53d..16026536cbf57f 100644 --- a/files/zh-tw/web/mathml/index.md +++ b/files/zh-tw/web/mathml/index.md @@ -27,10 +27,10 @@ slug: Web/MathML ## Tools -- [W3C Validator](http://validator.w3.org) +- [W3C Validator](https://validator.w3.org/) - [FireMath Firefox add-on](https://addons.mozilla.org/de/firefox/addon/8969/) -- [Mathzilla Firefox add-on collection](https://addons.mozilla.org/firefox/collections/fred_wang/mathzilla/) -- [LaTeXML](https://dlmf.nist.gov/LaTeXML/) - 將 LaTeX 文件編譯為 HTML+MathML 網頁 +- [Mathzilla Firefox add-on collection](https://addons.mozilla.org/zh-TW/firefox/collections/5509895/mathzilla/) +- [LaTeXML](https://math.nist.gov/~BMiller/LaTeXML/) - 將 LaTeX 文件編譯為 HTML+MathML 網頁 - [Web Equation](http://webdemo.visionobjects.com/home.html#equation) - 將手寫的數學式轉換成 MathML 或 LaTeX - [MathJax](https://www.mathjax.org/) - 使數學式的展現能跨瀏覽器的 JavaScript display engine diff --git a/files/zh-tw/web/media/formats/containers/index.md b/files/zh-tw/web/media/formats/containers/index.md index 1478f34bd68d2e..dc8736fca50b21 100644 --- a/files/zh-tw/web/media/formats/containers/index.md +++ b/files/zh-tw/web/media/formats/containers/index.md @@ -1037,11 +1037,11 @@ The video is offered first in WebM format (with the [`type`](/zh-TW/docs/Web/HTM | [ISO/IEC 14496-1](https://www.iso.org/standard/55688.html) (MPEG-4 Part 1 Systems) | Defines the original MPEG-4 (MP4) container format | | {{RFC(3533)}} | Defines the Ogg container format | | {{RFC(5334)}} | Defines the Ogg media types and file extensions | -| [QuickTime File Format Specification](https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFPreface/qtffPreface.html) | Defines the QuickTime movie (MOV) format | +| [QuickTime File Format Specification](https://developer.apple.com/documentation/quicktime-file-format) | Defines the QuickTime movie (MOV) format | | [Multimedia Programming Interface and Data Specifications 1.0](https://web.archive.org/web/20090417165828/http://www.kk.iij4u.or.jp/~kondo/wave/mpidata.txt) | The closest thing to an official WAVE specification | -| [Resource Interchange File Format](https://docs.microsoft.com/en-us/windows/desktop/xaudio2/resource-interchange-file-format--riff-) (used by WAV) | Defines the RIFF format; WAVE files are a form of RIFF | +| [Resource Interchange File Format](https://learn.microsoft.com/en-us/windows/win32/xaudio2/resource-interchange-file-format--riff-) (used by WAV) | Defines the RIFF format; WAVE files are a form of RIFF | | [WebM Container Guidelines](https://www.webmproject.org/docs/container/) | Guide for adapting Matroska for WebM | -| [Matroska Specifications](https://matroska.org/technical/specs/index.html) | The specification for the Matroska container format upon which WebM is based | +| [Matroska Specifications](https://matroska.org/technical/elements.html) | The specification for the Matroska container format upon which WebM is based | | [WebM Byte Stream Format](https://w3c.github.io/media-source/webm-byte-stream-format.html) | WebM byte stream format for use with [Media Source Extensions](/zh-TW/docs/Web/API/Media_Source_Extensions_API) | ## Browser compatibility diff --git a/files/zh-tw/web/opensearch/index.md b/files/zh-tw/web/opensearch/index.md index d11087715aa96d..fc6e54991660d8 100644 --- a/files/zh-tw/web/opensearch/index.md +++ b/files/zh-tw/web/opensearch/index.md @@ -145,8 +145,8 @@ In addition, the search plugin service provides a logging mechanism that may be ## 參考 -- [OpenSearch Documentation](http://opensearch.org/), [OpenSearch Documentation about the Url and Param element](https://www.opensearch.org/Specifications/OpenSearch/Extensions/Parameter/1.0) +- [OpenSearch Documentation](https://opensearch.org/), [OpenSearch Documentation about the Url and Param element](https://www.opensearch.org/Specifications/OpenSearch/Extensions/Parameter/1.0) - imdb.com has a [working osd.xml](http://i.media-imdb.com/images/SFccbe1e4d909ef8b8077201c3c5aac349/imdbsearch.xml) -- [`data:` URI scheme](http://en.wikipedia.org/wiki/Data:_URI_scheme) -- [OpenSearch Plugin Generator](http://www.7is7.com/software/firefox/opensearch.html) -- [Ready2Search](https://ready.to/search/en) - create OpenSearch plugins. [Customized Search through Ready2Search](https://ready.to/search/make/en_make_plugin.htm) +- [`data:` URI scheme](https://en.wikipedia.org/wiki/Data_URI_scheme) +- [OpenSearch Plugin Generator](https://7is7.com/software/firefox/opensearch.html) +- [Ready2Search](https://ready.to/search/en/) - create OpenSearch plugins. [Customized Search through Ready2Search](https://ready.to/search/make/en_make_plugin.htm) diff --git a/files/zh-tw/web/progressive_web_apps/index.md b/files/zh-tw/web/progressive_web_apps/index.md index 71e5e78a30f755..c851983d7a90e8 100644 --- a/files/zh-tw/web/progressive_web_apps/index.md +++ b/files/zh-tw/web/progressive_web_apps/index.md @@ -28,7 +28,7 @@ PWA 應該要可探索、可安裝、可連結、可獨立於網路、可漸進 - [使用 service worker](/zh-TW/docs/Web/API/Service_Worker_API/Using_Service_Workers):涵蓋 Service Worker API 的深入教學 - [使用 IndexedDB](/zh-TW/docs/Web/API/IndexedDB_API/Using_IndexedDB):詳細解釋 IndexedDB 的基礎。 - [使用 Web Storage API](/zh-TW/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API):讓 Web storage API 變得簡單。 -- [Instant Loading Web Apps with An Application Shell Architecture](https://developers.google.com/web/updates/2015/11/app-shell):使用 App Shell 程式模式加快 app 的載入速度。 +- [Instant Loading Web Apps with An Application Shell Architecture](https://developer.chrome.com/blog/app-shell):使用 App Shell 程式模式加快 app 的載入速度。 - [使用 Push API](/zh-TW/docs/Web/API/Push_API/Using_the_Push_API):了解 Web Push API 所需的一切。 - [使用 Notifications API](/zh-TW/docs/Web/API/Notifications_API/Using_the_Notifications_API):web notification 簡介。 - [構建響應式設計](/zh-TW/docs/Web/Apps/Modern/Responsive/responsive_design_building_blocks):了解當今 app 佈局的關鍵——響應式設計——的基本。 @@ -40,17 +40,17 @@ PWA 應該要可探索、可安裝、可連結、可獨立於網路、可漸進 - [localForage](https://localforage.github.io/localForage/):讓用戶端儲存變簡單的輕量化 JavaScript 函式庫。預設上使用 IndexedDB,必要時則改用 SQL/Web 儲存。 - [ServiceWorkerWare](https://github.com/fxos-components/serviceworkerware) — an _Express-like_ microframework for easy Service Worker development. - [oghliner](https://github.com/mozilla/oghliner) — not only a template but a tool for deploying Offline Web Apps to GitHub Pages. -- [sw-precache](https://github.com/GoogleChrome/sw-precache) — a node module to generate service worker code that will precache specific resources. +- [sw-precache](https://github.com/GoogleChromeLabs/sw-precache) — a node module to generate service worker code that will precache specific resources. - [workbox](https://github.com/GoogleChrome/workbox) — spiritual successor to sw-precache with more advanced caching strategies and easy precaching. - [upup](https://www.talater.com/upup/) — a tiny script that makes sure your site is always there for your users. - [The service worker cookbook](https://github.com/mdn/serviceworker-cookbook/) — A series of excellent service worker/push recipes, showing how to implement an offline app, but also much more. ## 參見 -- Google Developers 的 [Progressive web apps](https://developers.google.com/web/progressive-web-apps) +- Google Developers 的 [Progressive web apps](https://web.dev/explore/progressive-web-apps) - Alex Russell 寫的 [Progressive Web Apps: Escaping Tabs Without Losing Our Soul](https://medium.com/@slightlylate/progressive-apps-escaping-tabs-without-losing-our-soul-3b93a8561955#.6czgj0myh) -- [Progressive Web Apps Check List](https://developers.google.com/web/progressive-web-apps/checklist) -- Google 的 [The Lighthouse Tool](https://chrome.google.com/webstore/detail/lighthouse/blipmdconlkpinefehnmjammfjpmpbjk) +- [Progressive Web Apps Check List](https://web.dev/articles/pwa-checklist) +- Google 的 [The Lighthouse Tool](https://chromewebstore.google.com/detail/lighthouse/blipmdconlkpinefehnmjammfjpmpbjk) - [Tools for building progressive web apps with Angular](https://github.com/angular/mobile-toolkit) - [React PWA Guide Kit](https://github.com/codebusking/react-pwa-guide-kit) - [Offline-capable Pokédex web site](https://www.pokedex.org/) diff --git a/files/zh-tw/web/security/mixed_content/index.md b/files/zh-tw/web/security/mixed_content/index.md index 5b319ab37c4c73..f6f808f32d0afc 100644 --- a/files/zh-tw/web/security/mixed_content/index.md +++ b/files/zh-tw/web/security/mixed_content/index.md @@ -44,7 +44,7 @@ slug: Web/Security/Mixed_content - 所有用到 {{cssxref("url")}} 的 CSS 值({{cssxref("@font-face")}}、{{cssxref("cursor")}}、{{cssxref("background-image")}}……等等)。 - {{HTMLElement("object")}}(`data` 屬性) -其他資源如 web fonts 與 workers 也可能被認定為主動型混合內容,[因為在 Chromium 就是這樣](https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/core/loader/MixedContentChecker.cpp&q=MixedContentChecker::contextTypeFromContext%20f:cpp&sq=package:chromium&type=cs)。 +其他資源如 web fonts 與 workers 也可能被認定為主動型混合內容,[因為在 Chromium 就是這樣](https://source.chromium.org/chromium#chromium/src/third_party/WebKit/Source/core/loader/MixedContentChecker.cpp&q=MixedContentChecker::contextTypeFromContext%20f:cpp&sq=package:chromium&type=cs)。 ## 網頁主控台的警告 diff --git a/files/zh-tw/web/security/same-origin_policy/index.md b/files/zh-tw/web/security/same-origin_policy/index.md index 4266c417c6303d..277e097b861e69 100644 --- a/files/zh-tw/web/security/same-origin_policy/index.md +++ b/files/zh-tw/web/security/same-origin_policy/index.md @@ -44,12 +44,12 @@ document.domain = "company.com"; - 跨來源寫(Cross-origin writes)通常被允許,例如有連結、重新導向以及表單送出。少數某些 HTTP 請求需要[先導請求](/zh-TW/docs/HTTP/Access_control_CORS#.E5.85.88.E5.B0.8E.E8.AB.8B.E6.B1.82)。 - 跨來源嵌入(Cross-origin embedding)通常被允許,例子請參照下方。 -- 跨來源讀取(Cross-origin read) 通常不被允許,不過通常可以藉由嵌入來繞道讀取,例如嵌入影像寬高讀取、嵌入程式碼或[嵌入資源](https://grepular.com/Abusing_HTTP_Status_Codes_to_Expose_Private_Information)。 +- 跨來源讀取(Cross-origin read) 通常不被允許,不過通常可以藉由嵌入來繞道讀取,例如嵌入影像寬高讀取、嵌入程式碼或[嵌入資源](https://www.grepular.com/Abusing_HTTP_Status_Codes_to_Expose_Private_Information)。 下面是一些能跨來源嵌入的資源: - `` 內的 JavaScript,但語法錯誤訊息只限於同源程式碼腳本。 -- CSS 的 ``,由於 CSS 寬鬆語法規則,跨來源 CSS 要求正確的 Content-Type 標頭。限制在瀏覽器間各有差異: [IE](http://msdn.microsoft.com/en-us/library/ie/gg622939%28v=vs.85%29.aspx), [Firefox](http://www.mozilla.org/security/announce/2010/mfsa2010-46.html), [Chrome](http://code.google.com/p/chromium/issues/detail?id=9877), [Safari](http://support.apple.com/kb/HT4070) (請至 CVE-2010-0051)以及[Opera](http://www.opera.com/support/kb/view/943/). +- CSS 的 ``,由於 CSS 寬鬆語法規則,跨來源 CSS 要求正確的 Content-Type 標頭。限制在瀏覽器間各有差異: [IE]()、[Firefox](https://www.mozilla.org/security/advisories/mfsa2010-46/)、[Chrome](https://bugs.chromium.org/p/chromium/issues/detail?id=9877)、[Safari](https://support.apple.com/zh-tw/104158)(請至 CVE-2010-0051),以及 [Opera](http://www.opera.com/support/kb/view/943/)。 - {{htmlelement("img")}}的影像;支援格式有 PNG, JPEG, GIF, BMP, SVG 等等 - {{htmlelement("video")}}和{{htmlelement("audio")}}媒體檔案 - [``](/zh-TW/docs/HTML/Element/object), [``](/zh-TW/docs/HTML/Element/embed)和[``](/zh-TW/docs/HTML/Element/applet)的外掛 @@ -62,15 +62,15 @@ document.domain = "company.com"; ### 如何阻擋跨來源存取 -- 藉由檢查請求中包含的無法猜測的特殊記號(token)可以避免跨來源寫入,還有跨來源讀取知道此記號的網頁,這個記號即為[跨站偽造(Cross-Site Request Forgery, CSRF)](https://www.owasp.org/index.php/Cross-Site_Request_Forgery_%28CSRF%29)記號。 +- 藉由檢查請求中包含的無法猜測的特殊記號(token)可以避免跨來源寫入,還有跨來源讀取知道此記號的網頁,這個記號即為[跨站偽造(Cross-Site Request Forgery, CSRF)](https://owasp.org/www-community/attacks/csrf)記號。 - 確保資源無法被嵌入來防止跨來源讀取。 - 為了防止跨來源嵌入,請確保資源不被解讀為上述可嵌入格式之一;瀏覽器通常不會理會 Content-Type,比如說有一個指向 HTML 文件的\