Skip to content

Commit e387a6a

Browse files
committed
Cleaned up Chinese translation
1 parent 0f0ffb2 commit e387a6a

28 files changed

+379
-423
lines changed

README.md

+21-28
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,33 @@
1-
JavaScript 秘密花园
1+
JavaScript Garden
22
=================
33

4-
**JavaScript 秘密花园**是一个不断更新的文档,主要关心 JavaScript 一些古怪用法。
5-
对于如何避免常见的错误,难以发现的问题,以及性能问题和不好的实践给出建议,
6-
初学者可以籍此深入了解 JavaScript 的语言特性。
4+
**JavaScript Garden** is a growing collection of documentation about the most
5+
quirky parts of the JavaScript programming language. It gives advice to
6+
avoid common mistakes, subtle bugs, as well as performance issues and bad
7+
practices that non-expert JavaScript programmers may encounter on their
8+
endeavours into the depths of the language.
79

8-
JavaScript 秘密花园**不是**用来教你 JavaScript。为了更好的理解这篇文章的内容,
9-
你需要事先学习 JavaScript 的基础知识。在 Mozilla 开发者网络中有一系列非常棒的 JavaScript 学习[向导][1]
10+
JavaScript Garden does **not** aim to teach you JavaScript. Former knowledge
11+
of the language is strongly recommended in order to understand the topics covered
12+
in this guide. In order to learn the basics of the language, please head over to
13+
the excellent [guide][1] on the Mozilla Developer Network.
1014

11-
### 关于作者
15+
### The authors
1216

13-
这篇文章的作者是两位 Stack Overflow 的用户, [Ivo Wetzel][6] (写作) 和 [Zhang Yi Jiang][5] (设计)。
17+
This guide is the work of two lovely Stack Overflow users, [Ivo Wetzel][6]
18+
(Writing) and [Zhang Yi Jiang][5] (Design).
1419

20+
### Contributors
1521

16-
### 贡献者
22+
- [Caio Romão][8] (Spelling corrections)
23+
- [Andreas Blixt][9] (Language corrections)
1724

18-
- [Caio Romão][8] (拼写检查)
19-
- [Andreas Blixt][9] (语言修正)
20-
21-
### 中文翻译
22-
23-
- [三生石上][29]
24-
25-
此中文翻译由[三生石上][29]独立完成,[博客园][30]首发,转载请注明出处。
26-
27-
28-
### 许可
29-
30-
JavaScript 秘密花园在 [MIT license][2] 许可协议下发布,并存放在开源社区 [GitHub][4]
31-
如果你发现错误或者打字错误,请 [file an issue][3] 或者 pull request。
32-
你也可以在 Stack Overflow 的聊天室 [JavaScript room][10] 找到我们。
25+
### License
3326

27+
JavaScript Garden is published under the [MIT license][2] and hosted on
28+
[GitHub][4]. If you find errors or typos please [file an issue][3] or a pull
29+
request on the repository. You can also find us in the [JavaScript room][10] on
30+
Stack Overflow chat.
3431

3532
[1]: https://developer.mozilla.org/en/JavaScript/Guide
3633
[2]: https://github.com/BonsaiDen/JavaScript-Garden/blob/next/LICENSE
@@ -41,7 +38,3 @@ JavaScript 秘密花园在 [MIT license][2] 许可协议下发布,并存放在
4138
[8]: https://github.com/caio
4239
[9]: https://github.com/blixt
4340
[10]: http://chat.stackoverflow.com/rooms/17/javascript
44-
45-
[29]: http://sanshi.me/
46-
[30]: http://cnblogs.com/sanshi/
47-

doc/zh/array/constructor.md

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
## `Array` 构造函数
1+
##`Array` 构造函数
22

33
由于 `Array` 的构造函数在如何处理参数时有点模棱两可,因此总是推荐使用数组的字面语法 - `[]` - 来创建数组。
44

@@ -8,18 +8,17 @@
88
[3]; // 结果: [3]
99
new Array(3); // 结果: []
1010
new Array('3') // 结果: ['3']
11-
12-
译者注:这里的模棱两可指的是数组的[两种构造函数语法][1]
13-
var arr1 = new Array(arrayLength);
14-
var arr2 = new Array(element0, element1, ..., elementN);
1511

1612
// 译者注:因此下面的代码将会使人很迷惑
1713
new Array(3, 4, 5); // 结果: [3, 4, 5]
1814
new Array(3) // 结果: [],此数组长度为 3
15+
16+
> **译者注:**这里的模棱两可指的是数组的[两种构造函数语法][1]
1917
2018
由于只有一个参数传递到构造函数中(译者注:指的是 `new Array(3);` 这种调用方式),并且这个参数是数字,构造函数会返回一个 `length` 属性被设置为此参数的空数组。
2119
需要特别注意的是,此时只有 `length` 属性被设置,真正的数组并没有生成。
22-
译者注:在 Firebug 中,你会看到 [undefined, undefined, undefined],这其实是不对的。在上一节有详细的分析。
20+
21+
> **译者注:**在 Firebug 中,你会看到 `[undefined, undefined, undefined]`,这其实是不对的。在上一节有详细的分析。
2322
2423
var arr = new Array(3);
2524
arr[1]; // undefined
@@ -28,9 +27,10 @@ var arr2 = new Array(element0, element1, ..., elementN);
2827
这种优先于设置数组长度属性的做法只在少数几种情况下有用,比如需要循环字符串,可以避免 `for` 循环的麻烦。
2928

3029
new Array(count + 1).join(stringToRepeat);
31-
// 译者注:new Array(3).join('#') 将会返回 "##"
3230

33-
### 结论(In conclusion)
31+
> **译者注:** `new Array(3).join('#')` 将会返回 `##`
32+
33+
###结论
3434

3535
应该尽量避免使用数组构造函数创建新数组。推荐使用数组的字面语法。它们更加短小和简洁,因此增加了代码的可读性。
3636

doc/zh/array/general.md

+12-14
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
## 数组遍历与属性
1+
##数组遍历与属性
22

33
虽然在 JavaScript 中数组是是对象,但是没有好的理由去使用 [`for in` 循环](#object.forinloop) 遍历数组。
44
相反,有一些好的理由**不去**使用 `for in` 遍历数组。
@@ -9,7 +9,7 @@
99
由于 `for in` 循环会枚举原型链上的所有属性,唯一过滤这些属性的方式是使用 [`hasOwnProperty`](#object.hasownproperty) 函数,
1010
因此会比普通的 `for` 循环慢上好多倍。
1111

12-
### 遍历(Iteration)
12+
###遍历
1313

1414
为了达到遍历数组的最佳性能,推荐使用经典的 `for` 循环。
1515

@@ -25,8 +25,7 @@
2525

2626
实际上,不使用缓存数组长度的方式比缓存版本要慢很多。
2727

28-
29-
### `length` 属性(The `length` property)
28+
###`length` 属性
3029

3130
`length` 属性的 *getter* 方式会简单的返回数组的长度,而 *setter* 方式会**截断**数组。
3231

@@ -37,20 +36,19 @@
3736
foo.length = 6;
3837
foo; // [1, 2, 3]
3938

40-
译者注:
41-
在 Firebug 中查看此时 foo 的值是: [1, 2, 3, undefined, undefined, undefined]
42-
但是这个结果并不准确,如果你在 Chrome 的控制台查看 foo 的结果,你会发现是这样的: [1, 2, 3]
43-
因为在 JavaScript 中 undefined 是一个变量,注意是变量不是关键字,因此上面两个结果的意义是完全不相同的。
44-
45-
// 译者注:为了验证,我们来执行下面代码,看序号 5 是否存在于 foo 中。
46-
5 in foo; // 不管在 Firebug 或者 Chrome 都返回 false
47-
foo[5] = undefined;
48-
5 in foo; // 不管在 Firebug 或者 Chrome 都返回 true
39+
**译者注:**
40+
在 Firebug 中查看此时 `foo` 的值是: `[1, 2, 3, undefined, undefined, undefined]`
41+
但是这个结果并不准确,如果你在 Chrome 的控制台查看 `foo` 的结果,你会发现是这样的: `[1, 2, 3]`
42+
因为在 JavaScript 中 `undefined` 是一个变量,注意是变量不是关键字,因此上面两个结果的意义是完全不相同的。
4943

44+
// 译者注:为了验证,我们来执行下面代码,看序号 5 是否存在于 foo 中。
45+
5 in foo; // 不管在 Firebug 或者 Chrome 都返回 false
46+
foo[5] = undefined;
47+
5 in foo; // 不管在 Firebug 或者 Chrome 都返回 true
5048

5149
`length` 设置一个更小的值会截断数组,但是增大 `length` 属性值不会对数组产生影响。
5250

53-
### 结论(In conclusion)
51+
###结论
5452

5553
为了更好的性能,推荐使用普通的 `for` 循环并缓存数组的 `length` 属性。
5654
使用 `for in` 遍历数组被认为是不好的代码习惯并倾向于产生错误和导致性能问题。

doc/zh/core/eval.md

+6-7
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
## 为什么不要使用 `eval`
1+
##为什么不要使用 `eval`
22

33
`eval` 函数会在当前作用域中执行一段 JavaScript 代码字符串。
44

@@ -23,7 +23,7 @@
2323
test(); // 2
2424
foo; // 3
2525

26-
[译者注][30]:上面的代码等价于在全局作用域中调用 `eval`,和下面两种写法效果一样:
26+
**[译者注][30]**上面的代码等价于在全局作用域中调用 `eval`,和下面两种写法效果一样:
2727

2828
// 写法一:直接调用全局作用域下的 foo 变量
2929
var foo = 1;
@@ -35,7 +35,7 @@
3535
test(); // 2
3636
foo; // 3
3737

38-
// 写法二:使用 call 函数修改 `eval` 执行的上下文为全局作用域
38+
// 写法二:使用 call 函数修改 eval 执行的上下文为全局作用域
3939
var foo = 1;
4040
function test() {
4141
var foo = 2;
@@ -47,22 +47,21 @@
4747

4848
**任何情况下**我们都应该避免使用 `eval` 函数。99.9% 使用 `eval` 的场景都有**不使用** `eval` 的解决方案。
4949

50-
### 伪装的 `eval``eval` in disguise)
50+
###伪装的 `eval`
5151

5252
[定时函数](#other.timeouts) `setTimeout``setInterval` 都可以接受字符串作为它们的第一个参数。
5353
这个字符串**总是**在全局作用域中执行,因此 `eval` 在这种情况下没有被直接调用。
5454

5555

56-
### 安全问题(Security issues)
56+
###安全问题
5757

5858
`eval` 也存在安全问题,因为它会执行**任意**传给它的代码,
5959
在代码字符串未知或者是来自一个不信任的源时,绝对不要使用 `eval` 函数。
6060

61-
### 结论(In conclusion)
61+
###结论
6262

6363
绝对不要使用 `eval`,任何使用它的代码都会在它的工作方式,性能和安全性方面受到质疑。
6464
如果一些情况必须使用到 `eval` 才能正常工作,首先它的设计会受到质疑,这**不应该**是首选的解决方案,
6565
一个更好的不使用 `eval` 的解决方案应该得到充分考虑并优先采用。
6666

67-
6867
[30]: http://cnblogs.com/sanshi/

doc/zh/core/semicolon.md

+7-16
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
## 自动分号插入
1+
##自动分号插入
22

33
尽管 JavaScript 有 C 的代码风格,但是它****强制要求在代码中使用分号,实际上可以省略它们。
44

@@ -17,12 +17,10 @@ JavaScript 不是一个没有分号的语言,恰恰相反上它需要分号来
1717

1818
自动的分号插入被认为是 JavaScript 语言**最大**的设计缺陷之一,因为它**改变代码的行为。
1919

20-
21-
### 工作原理(How it works)
20+
### 工作原理
2221

2322
下面的代码没有分号,因此解析器需要自己判断需要在哪些地方插入分号。
2423

25-
2624
(function(window, undefined) {
2725
function test(options) {
2826
log('testing!')
@@ -47,15 +45,14 @@ JavaScript 不是一个没有分号的语言,恰恰相反上它需要分号来
4745

4846
(function(window) {
4947
window.someLibrary = {}
50-
5148
})(window)
5249

5350
下面是解析器"猜测"的结果。
5451

5552
(function(window, undefined) {
5653
function test(options) {
5754

58-
// Not inserted, lines got merged
55+
// 没有插入分号,两行被合并为一行
5956
log('testing!')(options.list || []).forEach(function(i) {
6057

6158
}); // <- 插入分号
@@ -67,27 +64,22 @@ JavaScript 不是一个没有分号的语言,恰恰相反上它需要分号来
6764

6865
return; // <- 插入分号, 改变了 return 表达式的行为
6966
{ // 作为一个代码段处理
70-
71-
// a label and a single expression statement
7267
foo: function() {}
7368
}; // <- 插入分号
7469
}
7570
window.test = test; // <- 插入分号
7671

77-
// The lines got merged again
72+
// 两行又被合并了
7873
})(window)(function(window) {
7974
window.someLibrary = {}; // <- 插入分号
80-
8175
})(window); //<- 插入分号
8276

83-
> **注意:** JavaScript 不能正确的处理 return 表达式紧跟换行符的情况,
77+
> **注意:** JavaScript 不能正确的处理 `return` 表达式紧跟换行符的情况,
8478
> 虽然这不能算是自动分号插入的错误,但这确实是一种不希望的副作用。
8579
86-
8780
解析器显著改变了上面代码的行为,在另外一些情况下也会做出**错误的处理**
8881

89-
90-
### 前置括号(Leading parenthesis)
82+
###前置括号
9183

9284
在前置括号的情况下,解析器**不会**自动插入分号。
9385

@@ -100,8 +92,7 @@ JavaScript 不是一个没有分号的语言,恰恰相反上它需要分号来
10092

10193
`log` 函数的执行结果**极大**可能**不是**函数;这种情况下就会出现 `TypeError` 的错误,详细错误信息可能是 `undefined is not a function`
10294

103-
104-
### 结论(In conclusion)
95+
###结论
10596

10697
建议**绝对**不要省略分号,同时也提倡将花括号和相应的表达式放在一行,
10798
对于只有一行代码的 `if` 或者 `else` 表达式,也不应该省略花括号。

doc/zh/core/undefined.md

+7-10
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
## `undefined``null`
1+
##`undefined``null`
22

3-
JavaScript 有两个表示 `` 的值,其中比较有用的是 `undefined`
3+
JavaScript 有两个表示‘空’的值,其中比较有用的是 `undefined`
44

5-
6-
### `undefined`的值(The value `undefined`
5+
###`undefined` 的值
76

87
`undefined` 是一个值为 `undefined` 的类型。
98

@@ -22,8 +21,7 @@ JavaScript 有两个表示 `空` 的值,其中比较有用的是 `undefined`
2221
- 函数参数没有被显式的传递值。
2322
- 任何被设置为 `undefined` 值的变量。
2423

25-
26-
### 处理 `undefined` 值的改变(Handling changes to the value of `undefined`
24+
###处理 `undefined` 值的改变
2725

2826
由于全局变量 `undefined` 只是保存了 `undefined` 类型实际**的副本,
2927
因此对它赋新值**不会**改变类型 `undefined` 的值。
@@ -50,11 +48,10 @@ JavaScript 有两个表示 `空` 的值,其中比较有用的是 `undefined`
5048

5149
这里唯一的区别是,在压缩后并且函数内没有其它需要使用 `var` 声明变量的情况下,这个版本的代码会多出 4 个字节的代码。
5250

53-
[译者注][30]:这里有点绕口,其实很简单。
54-
如果此函数内没有其它需要声明的变量,那么 `var ` 总共 4 个字符(包含一个空白字符)就是专门为 undefined 变量准备的,相比上个例子多出了 4 个字节。
55-
51+
> **[译者注][30]**这里有点绕口,其实很简单。如果此函数内没有其它需要声明的变量,那么 `var` 总共 4 个字符(包含一个空白字符)
52+
就是专门为 `undefined` 变量准备的,相比上个例子多出了 4 个字节。
5653

57-
### 使用 `null`(Uses of `null`
54+
###`null` 的用处
5855

5956
JavaScript 中的 `undefined` 的使用场景类似于其它语言中的 *null*,实际上 JavaScript 中的 `null` 是另外一种数据类型。
6057

0 commit comments

Comments
 (0)