ES6 允许直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁。
Object.is方法。它用来比较两个值是否严格相等,与严格比较运算符(===)的行为基本一致。
Object.assign方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)。

Symbol 的用法

Symbol 是一个唯一变量的声明方式

声明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
let a1 = Symbol();
let a2 = Symbol();
console.log(a1); // Symbol()
console.log(a2); // Symbol()
console.log(a1 === a2); // false
// 说明Symbol 是一个唯一的值。
// 证明是一个唯一的值
let a3 = Symbol.for('a3');
let a4 = Symbol.for('a3');
console.log(a3 === a4); // true
// 因为之前已经声明过了 'a3' 所以现在两个值是相等的
}

使用场景

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
{
let a1 = Symbol.for('abc');
let obj = {
[a1]: '1',
'abc': 2,
'c': 3
};
console.log(obj); // {abc: 2, c: 3, Symbol(abc): "1"}
// 普通循环是取不到 Symbol的值的
for (let [key, value] of Object.entries(obj)) {
console.log(key, value);
}
// abc 2
// c 3
// 只会取到Symbol 作为key 的属性 Object.getOwnPropertySymbols() 方法
Object.getOwnPropertySymbols(obj).forEach(function (item) {
console.log(item); // Symbol.for(abc)
console.log(obj[item]); // 1
})
// 取到对象中完整的全部值。 Reflect.ownKeys() 方法
Reflect.ownKeys(obj).forEach(function (item) {
console.log('item', item); // abc, c, Symbol(abc)
console.log('obj[item]', obj[item]); // 2,3,1
});
}