Skip to content

Commit 7b2b8f1

Browse files
committed
docs: use let/const instead of var
1 parent 5fbafe9 commit 7b2b8f1

File tree

1 file changed

+46
-46
lines changed

1 file changed

+46
-46
lines changed

docs/object.md

Lines changed: 46 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@
55
ES6 允许直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁。
66

77
```javascript
8-
var foo = 'bar';
9-
var baz = {foo};
8+
const foo = 'bar';
9+
const baz = {foo};
1010
baz // {foo: "bar"}
1111

1212
// 等同于
13-
var baz = {foo: foo};
13+
const baz = {foo: foo};
1414
```
1515

1616
上面代码表明,ES6 允许在对象之中,直接写变量。这时,属性名为变量名, 属性值为变量的值。下面是另一个例子。
@@ -32,15 +32,15 @@ f(1, 2) // Object {x: 1, y: 2}
3232
除了属性简写,方法也可以简写。
3333

3434
```javascript
35-
var o = {
35+
const o = {
3636
method() {
3737
return "Hello!";
3838
}
3939
};
4040

4141
// 等同于
4242

43-
var o = {
43+
const o = {
4444
method: function() {
4545
return "Hello!";
4646
}
@@ -50,9 +50,9 @@ var o = {
5050
下面是一个实际的例子。
5151

5252
```javascript
53-
var birth = '2000/01/01';
53+
let birth = '2000/01/01';
5454

55-
var Person = {
55+
const Person = {
5656

5757
name: '张三',
5858

@@ -69,8 +69,8 @@ var Person = {
6969

7070
```javascript
7171
function getPoint() {
72-
var x = 1;
73-
var y = 10;
72+
const x = 1;
73+
const y = 10;
7474
return {x, y};
7575
}
7676

@@ -81,7 +81,7 @@ getPoint()
8181
CommonJS 模块输出一组变量,就非常合适使用简洁写法。
8282

8383
```javascript
84-
var ms = {};
84+
let ms = {};
8585

8686
function getItem (key) {
8787
return key in ms ? ms[key] : null;
@@ -107,7 +107,7 @@ module.exports = {
107107
属性的赋值器(setter)和取值器(getter),事实上也是采用这种写法。
108108

109109
```javascript
110-
var cart = {
110+
const cart = {
111111
_wheels: 4,
112112

113113
get wheels () {
@@ -126,7 +126,7 @@ var cart = {
126126
注意,简洁写法的属性名总是字符串,这会导致一些看上去比较奇怪的结果。
127127

128128
```javascript
129-
var obj = {
129+
const obj = {
130130
class () {}
131131
};
132132

@@ -142,7 +142,7 @@ var obj = {
142142
如果某个方法的值是一个 Generator 函数,前面需要加上星号。
143143

144144
```javascript
145-
var obj = {
145+
const obj = {
146146
* m() {
147147
yield 'hello world';
148148
}
@@ -186,9 +186,9 @@ let obj = {
186186
下面是另一个例子。
187187

188188
```javascript
189-
var lastWord = 'last word';
189+
let lastWord = 'last word';
190190

191-
var a = {
191+
const a = {
192192
'first word': 'hello',
193193
[lastWord]: 'world'
194194
};
@@ -214,13 +214,13 @@ obj.hello() // hi
214214

215215
```javascript
216216
// 报错
217-
var foo = 'bar';
218-
var bar = 'abc';
219-
var baz = { [foo] };
217+
const foo = 'bar';
218+
const bar = 'abc';
219+
const baz = { [foo] };
220220

221221
// 正确
222-
var foo = 'bar';
223-
var baz = { [foo]: 'abc'};
222+
const foo = 'bar';
223+
const baz = { [foo]: 'abc'};
224224
```
225225

226226
注意,属性名表达式如果是一个对象,默认情况下会自动将对象转为字符串`[object Object]`,这一点要特别小心。
@@ -346,10 +346,10 @@ Object.defineProperty(Object, 'is', {
346346
`Object.assign`方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)。
347347

348348
```javascript
349-
var target = { a: 1 };
349+
const target = { a: 1 };
350350

351-
var source1 = { b: 2 };
352-
var source2 = { c: 3 };
351+
const source1 = { b: 2 };
352+
const source2 = { c: 3 };
353353

354354
Object.assign(target, source1, source2);
355355
target // {a:1, b:2, c:3}
@@ -360,10 +360,10 @@ target // {a:1, b:2, c:3}
360360
注意,如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性。
361361

362362
```javascript
363-
var target = { a: 1, b: 1 };
363+
const target = { a: 1, b: 1 };
364364

365-
var source1 = { b: 2, c: 2 };
366-
var source2 = { c: 3 };
365+
const source1 = { b: 2, c: 2 };
366+
const source2 = { c: 3 };
367367

368368
Object.assign(target, source1, source2);
369369
target // {a:1, b:2, c:3}
@@ -372,7 +372,7 @@ target // {a:1, b:2, c:3}
372372
如果只有一个参数,`Object.assign`会直接返回该参数。
373373

374374
```javascript
375-
var obj = {a: 1};
375+
const obj = {a: 1};
376376
Object.assign(obj) === obj // true
377377
```
378378

@@ -400,11 +400,11 @@ Object.assign(obj, null) === obj // true
400400
其他类型的值(即数值、字符串和布尔值)不在首参数,也不会报错。但是,除了字符串会以数组形式,拷贝入目标对象,其他值都不会产生效果。
401401

402402
```javascript
403-
var v1 = 'abc';
404-
var v2 = true;
405-
var v3 = 10;
403+
const v1 = 'abc';
404+
const v2 = true;
405+
const v3 = 10;
406406

407-
var obj = Object.assign({}, v1, v2, v3);
407+
const obj = Object.assign({}, v1, v2, v3);
408408
console.log(obj); // { "0": "a", "1": "b", "2": "c" }
409409
```
410410

@@ -444,8 +444,8 @@ Object.assign({ a: 'b' }, { [Symbol('c')]: 'd' })
444444
`Object.assign`方法实行的是浅拷贝,而不是深拷贝。也就是说,如果源对象某个属性的值是对象,那么目标对象拷贝得到的是这个对象的引用。
445445

446446
```javascript
447-
var obj1 = {a: {b: 1}};
448-
var obj2 = Object.assign({}, obj1);
447+
const obj1 = {a: {b: 1}};
448+
const obj2 = Object.assign({}, obj1);
449449

450450
obj1.a.b = 2;
451451
obj2.a.b // 2
@@ -456,8 +456,8 @@ obj2.a.b // 2
456456
对于这种嵌套的对象,一旦遇到同名属性,`Object.assign`的处理方法是替换,而不是添加。
457457

458458
```javascript
459-
var target = { a: { b: 'c', d: 'e' } }
460-
var source = { a: { b: 'hello' } }
459+
const target = { a: { b: 'c', d: 'e' } }
460+
const source = { a: { b: 'hello' } }
461461
Object.assign(target, source)
462462
// { a: { b: 'hello' } }
463463
```
@@ -838,7 +838,7 @@ d.a // "a"
838838

839839
```javascript
840840
// es6的写法
841-
var obj = {
841+
const obj = {
842842
method: function() { ... }
843843
};
844844
obj.__proto__ = someOtherObj;
@@ -895,7 +895,7 @@ Object.getPrototypeOf({ __proto__: null })
895895
Object.setPrototypeOf(object, prototype)
896896

897897
// 用法
898-
var o = Object.setPrototypeOf({}, null);
898+
const o = Object.setPrototypeOf({}, null);
899899
```
900900

901901
该方法等同于下面的函数。
@@ -957,7 +957,7 @@ function Rectangle() {
957957
// ...
958958
}
959959

960-
var rec = new Rectangle();
960+
const rec = new Rectangle();
961961

962962
Object.getPrototypeOf(rec) === Rectangle.prototype
963963
// true
@@ -1033,15 +1033,15 @@ for (let [key, value] of entries(obj)) {
10331033
`Object.values`方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值。
10341034

10351035
```javascript
1036-
var obj = { foo: 'bar', baz: 42 };
1036+
const obj = { foo: 'bar', baz: 42 };
10371037
Object.values(obj)
10381038
// ["bar", 42]
10391039
```
10401040

10411041
返回数组的成员顺序,与本章的《属性的遍历》部分介绍的排列规则一致。
10421042

10431043
```javascript
1044-
var obj = { 100: 'a', 2: 'b', 7: 'c' };
1044+
const obj = { 100: 'a', 2: 'b', 7: 'c' };
10451045
Object.values(obj)
10461046
// ["b", "c", "a"]
10471047
```
@@ -1051,14 +1051,14 @@ Object.values(obj)
10511051
`Object.values`只返回对象自身的可遍历属性。
10521052

10531053
```javascript
1054-
var obj = Object.create({}, {p: {value: 42}});
1054+
const obj = Object.create({}, {p: {value: 42}});
10551055
Object.values(obj) // []
10561056
```
10571057

10581058
上面代码中,`Object.create`方法的第二个参数添加的对象属性(属性`p`),如果不显式声明,默认是不可遍历的,因为`p`的属性描述对象的`enumerable`默认是`false``Object.values`不会返回这个属性。只要把`enumerable`改成`true``Object.values`就会返回属性`p`的值。
10591059

10601060
```javascript
1061-
var obj = Object.create({}, {p:
1061+
const obj = Object.create({}, {p:
10621062
{
10631063
   value: 42,
10641064
   enumerable: true
@@ -1095,7 +1095,7 @@ Object.values(true) // []
10951095
`Object.entries`方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值对数组。
10961096

10971097
```javascript
1098-
var obj = { foo: 'bar', baz: 42 };
1098+
const obj = { foo: 'bar', baz: 42 };
10991099
Object.entries(obj)
11001100
// [ ["foo", "bar"], ["baz", 42] ]
11011101
```
@@ -1127,8 +1127,8 @@ for (let [k, v] of Object.entries(obj)) {
11271127
`Object.entries`方法的另一个用处是,将对象转为真正的`Map`结构。
11281128

11291129
```javascript
1130-
var obj = { foo: 'bar', baz: 42 };
1131-
var map = new Map(Object.entries(obj));
1130+
const obj = { foo: 'bar', baz: 42 };
1131+
const map = new Map(Object.entries(obj));
11321132
map // Map { foo: "bar", baz: 42 }
11331133
```
11341134

@@ -1220,7 +1220,7 @@ o3.a // undefined
12201220
下面是另一个例子。
12211221

12221222
```javascript
1223-
var o = Object.create({ x: 1, y: 2 });
1223+
const o = Object.create({ x: 1, y: 2 });
12241224
o.z = 3;
12251225

12261226
let { x, ...{ y, z } } = o;

0 commit comments

Comments
 (0)