-
Notifications
You must be signed in to change notification settings - Fork 558
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Moved traditional Chinese translation from zh-tw to zhtw so that it w…
…ould show up
- Loading branch information
1 parent
c8a4e3d
commit 3d5743a
Showing
25 changed files
with
1,690 additions
and
1,725 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,5 @@ | ||
{ | ||
"default": "en", | ||
"listed": ["en", "fi", "ru", "zh", "tr", "pl", "ko", "ja", "es", "zh-Tw"] | ||
"listed": ["en", "fi", "ru", "zhtw", "zh", "tr", "pl", "ko", "ja", "es"] | ||
} | ||
|
56 changes: 28 additions & 28 deletions
56
doc/zh-TW/array/constructor.md → doc/zhtw/array/constructor.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,28 +1,28 @@ | ||
## `Array` 的建構函式 | ||
|
||
`Array` 的建構函式在處理參數上一直有模糊的地帶,所以建議使用 `array`的字面語法來使用 - `[]` - 來新增一個的Array | ||
|
||
[1, 2, 3]; // 結果: [1, 2, 3] | ||
new Array(1, 2, 3); // 結果: [1, 2, 3] | ||
|
||
[3]; // 結果: [3] | ||
new Array(3); // 結果: [] | ||
new Array('3') // 結果: ['3'] | ||
|
||
在上面的範例 `new Array(3)` 當只有一個參數傳入到 `Array` 的建構函數 | ||
且那個參數事宜個數字,建構函數會回傳空值 | ||
但是 `Array` 長度的屬性會變成跟那個參數一樣(以此範例來看他回傳的長度為 3) | ||
**注意** 只有他長度的屬性會被設定,整個 Array裡面的數值都不會初始化 | ||
|
||
var arr = new Array(3); | ||
arr[1]; // undefined | ||
1 in arr; // false, 數值沒有被設定進去 | ||
|
||
被設定用來當做 `Array` 的長度只有少數情況使用 | ||
先設定 `Array` 的長度可以用一下的範例來避免使用 `for loop` 的麻煩 | ||
|
||
new Array(count + 1).join(stringToRepeat); | ||
|
||
### 結語 | ||
|
||
`Array` 的建構函式需要避免,建議使用字面語法。因為他們比較簡短、也更增加閱讀性 | ||
## `Array` 的建構函式 | ||
|
||
`Array` 的建構函式在處理參數上一直有模糊的地帶,所以建議使用 `array`的字面語法來使用 - `[]` - 來新增一個的Array | ||
|
||
[1, 2, 3]; // 結果: [1, 2, 3] | ||
new Array(1, 2, 3); // 結果: [1, 2, 3] | ||
|
||
[3]; // 結果: [3] | ||
new Array(3); // 結果: [] | ||
new Array('3') // 結果: ['3'] | ||
|
||
在上面的範例 `new Array(3)` 當只有一個參數傳入到 `Array` 的建構函數 | ||
且那個參數事宜個數字,建構函數會回傳空值 | ||
但是 `Array` 長度的屬性會變成跟那個參數一樣(以此範例來看他回傳的長度為 3) | ||
**注意** 只有他長度的屬性會被設定,整個 Array裡面的數值都不會初始化 | ||
|
||
var arr = new Array(3); | ||
arr[1]; // undefined | ||
1 in arr; // false, 數值沒有被設定進去 | ||
|
||
被設定用來當做 `Array` 的長度只有少數情況使用 | ||
先設定 `Array` 的長度可以用一下的範例來避免使用 `for loop` 的麻煩 | ||
|
||
new Array(count + 1).join(stringToRepeat); | ||
|
||
### 結語 | ||
|
||
`Array` 的建構函式需要避免,建議使用字面語法。因為他們比較簡短、也更增加閱讀性 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,46 +1,46 @@ | ||
## Array 迴圈和屬性 | ||
|
||
雖然在 Javascript 中 Array 都是 Objects,但是沒有好的理由要使用他 | ||
在 [`for in`](#object.forinloop) 的迴圈中。事實上有很多原因要避免使用 `for in` 在 Array 之中 | ||
|
||
> **注意:** Javascript Arrays **不是** *關連性 Arrays* | ||
> 只有 [objects](#object.general) 來管理建值的相對應關係 | ||
> Arrays 是**保持** 順序的,Objects **則沒有** | ||
因為 `for in` 迴圈會列舉所有在原型 Array 上的屬性因為他會使用[`hasOwnProperty`](#object.hasownproperty), 這會使得 Array 比原本的 `for` 迴圈慢上二十幾倍 | ||
|
||
### 迴圈 | ||
|
||
為了要達到最好的性能所以最好使用 `for` 迴圈來讀取一個 Array 裡面的數值。 | ||
|
||
var list = [1, 2, 3, 4, 5, ...... 100000000]; | ||
for(var i = 0, l = list.length; i < l; i++) { | ||
console.log(list[i]); | ||
} | ||
|
||
在上面的例子中利用 `l = list.length` 來處理 Array 的長度問題。 | ||
|
||
雖然 `length` 屬性是屬於 Array 中其中一個屬性,但是他還使有一定的性能消耗在每次循環的訪問。 | ||
近期 Javascript 使用 **may** 來解決在這上面的效率問題,但是在現在的引擎上還不一定有支援。 | ||
|
||
實際上,不使用暫存 Array 長度的方式比使用暫存的版本還要慢很多。 | ||
|
||
### `length` 的屬性 | ||
|
||
`length` 屬性中的 *getter* 直接回傳在 Array 之中的程度,而 *setter* 可以用來 **刪除** Array。 | ||
|
||
var foo = [1, 2, 3, 4, 5, 6]; | ||
foo.length = 3; | ||
foo; // [1, 2, 3] | ||
|
||
foo.length = 6; | ||
foo.push(4); | ||
foo; // [1, 2, 3, undefined, undefined, undefined, 4] | ||
|
||
在上面的例子可以看到,如果給的長度比較小他就會去刪除 Array 中的數值。如果比較大的話,他就會自己增加一些 `undefined` 的數值進去 | ||
|
||
### 結語 | ||
|
||
為了達到更好的效率,建議使用 `for` 迴圈還有暫存 `length` 的屬性。 | ||
而 `for in` 迴圈則是會讓程式中有更多的錯誤和性能問題。 | ||
|
||
## Array 迴圈和屬性 | ||
|
||
雖然在 Javascript 中 Array 都是 Objects,但是沒有好的理由要使用他 | ||
在 [`for in`](#object.forinloop) 的迴圈中。事實上有很多原因要避免使用 `for in` 在 Array 之中 | ||
|
||
> **注意:** Javascript Arrays **不是** *關連性 Arrays* | ||
> 只有 [objects](#object.general) 來管理建值的相對應關係 | ||
> Arrays 是**保持** 順序的,Objects **則沒有** | ||
因為 `for in` 迴圈會列舉所有在原型 Array 上的屬性因為他會使用[`hasOwnProperty`](#object.hasownproperty), 這會使得 Array 比原本的 `for` 迴圈慢上二十幾倍 | ||
|
||
### 迴圈 | ||
|
||
為了要達到最好的性能所以最好使用 `for` 迴圈來讀取一個 Array 裡面的數值。 | ||
|
||
var list = [1, 2, 3, 4, 5, ...... 100000000]; | ||
for(var i = 0, l = list.length; i < l; i++) { | ||
console.log(list[i]); | ||
} | ||
|
||
在上面的例子中利用 `l = list.length` 來處理 Array 的長度問題。 | ||
|
||
雖然 `length` 屬性是屬於 Array 中其中一個屬性,但是他還使有一定的性能消耗在每次循環的訪問。 | ||
近期 Javascript 使用 **may** 來解決在這上面的效率問題,但是在現在的引擎上還不一定有支援。 | ||
|
||
實際上,不使用暫存 Array 長度的方式比使用暫存的版本還要慢很多。 | ||
|
||
### `length` 的屬性 | ||
|
||
`length` 屬性中的 *getter* 直接回傳在 Array 之中的程度,而 *setter* 可以用來 **刪除** Array。 | ||
|
||
var foo = [1, 2, 3, 4, 5, 6]; | ||
foo.length = 3; | ||
foo; // [1, 2, 3] | ||
|
||
foo.length = 6; | ||
foo.push(4); | ||
foo; // [1, 2, 3, undefined, undefined, undefined, 4] | ||
|
||
在上面的例子可以看到,如果給的長度比較小他就會去刪除 Array 中的數值。如果比較大的話,他就會自己增加一些 `undefined` 的數值進去 | ||
|
||
### 結語 | ||
|
||
為了達到更好的效率,建議使用 `for` 迴圈還有暫存 `length` 的屬性。 | ||
而 `for in` 迴圈則是會讓程式中有更多的錯誤和性能問題。 | ||
|
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,42 +1,42 @@ | ||
## 為什麼不要使用 `eval` | ||
|
||
因為 `eval` 函數會在 Javascript 的區域性的區間執行那段程式碼。 | ||
|
||
var foo = 1; | ||
function test() { | ||
var foo = 2; | ||
eval('foo = 3'); | ||
return foo; | ||
} | ||
test(); // 3 | ||
foo; // 1 | ||
|
||
但是, `eval` 只接受直接的呼叫而且那個函數只能叫做 `eval`,才能在一個區段中執行。 | ||
|
||
var foo = 1; | ||
function test() { | ||
var foo = 2; | ||
var bar = eval; | ||
bar('foo = 3'); | ||
return foo; | ||
} | ||
test(); // 2 | ||
foo; // 3 | ||
|
||
所有的 `eval` 都應該去比免試用。有 99.9% 的使用情況都可以 **不必** 使用到而達到同等效果。 | ||
|
||
### 偽裝的 `eval` | ||
|
||
[定時函數](#other.timeouts) `setTimeout` 和 `setInterval` 都可以接受一個字串當做他們第一個參數。這些字串 **永遠** 都會在全域範圍內執行,因此在這種情況下 `eval` 沒有被直接的使用。 | ||
|
||
### 安全上的顧慮 | ||
|
||
`eval` 同樣有安全上的問題,因為所有的程式碼都可以被直接執行。 | ||
而他不應去執行一串未知的字串或是來自不幸任的來源。 | ||
|
||
### 結語 | ||
|
||
`eval` 應該永遠不要去只用它,任何的程式在被他執行後都有性能和安全上的考慮。如果有情況需要去使用他,他都不應該列為第一順位的解決方法。 | ||
|
||
應該有更好的方法能夠去使用,但是最好都不要去使用 `eval`。 | ||
|
||
## 為什麼不要使用 `eval` | ||
|
||
因為 `eval` 函數會在 Javascript 的區域性的區間執行那段程式碼。 | ||
|
||
var foo = 1; | ||
function test() { | ||
var foo = 2; | ||
eval('foo = 3'); | ||
return foo; | ||
} | ||
test(); // 3 | ||
foo; // 1 | ||
|
||
但是, `eval` 只接受直接的呼叫而且那個函數只能叫做 `eval`,才能在一個區段中執行。 | ||
|
||
var foo = 1; | ||
function test() { | ||
var foo = 2; | ||
var bar = eval; | ||
bar('foo = 3'); | ||
return foo; | ||
} | ||
test(); // 2 | ||
foo; // 3 | ||
|
||
所有的 `eval` 都應該去比免試用。有 99.9% 的使用情況都可以 **不必** 使用到而達到同等效果。 | ||
|
||
### 偽裝的 `eval` | ||
|
||
[定時函數](#other.timeouts) `setTimeout` 和 `setInterval` 都可以接受一個字串當做他們第一個參數。這些字串 **永遠** 都會在全域範圍內執行,因此在這種情況下 `eval` 沒有被直接的使用。 | ||
|
||
### 安全上的顧慮 | ||
|
||
`eval` 同樣有安全上的問題,因為所有的程式碼都可以被直接執行。 | ||
而他不應去執行一串未知的字串或是來自不幸任的來源。 | ||
|
||
### 結語 | ||
|
||
`eval` 應該永遠不要去只用它,任何的程式在被他執行後都有性能和安全上的考慮。如果有情況需要去使用他,他都不應該列為第一順位的解決方法。 | ||
|
||
應該有更好的方法能夠去使用,但是最好都不要去使用 `eval`。 | ||
|
Oops, something went wrong.