es6中新增的数据类型

ES6中新增了三种数据类型,SymbolSetMap。其中Symbol为基本数据类型,可以直接使用typeof检测数据类型。Set和Map是类似于Array的引用类型。

Symbol

每一个symbol的值都是独一无二的。

1
2
3
var s1 = Symbol('foo');
var s2 = Symbol('foo');
s1 === s2; // false

Symbol可以用作对象属性,并且属性不会重复。设置属性时,必须把属性置于方括号中。使用Object.getOwnPropertySymbols获取对象的Symobol属性。

1
2
3
4
5
6
7
8
var s = Symbol();

var obj = {
[s]: 'hello, wrold'
};

console.log(obj[s]);
console.log(Object.getOwnPropertySymbols(obj))

Set

Set类似于数组,其中所有的元素都是不重复的。

可以使用Set对数组去重。

1
2
3
4
5
6
7
8
9
10
11
12
var s = new Set([1,2,3,4,5,6,6,5,4,3,2,1,1])    // Set [ 1, 2, 3, 4, 5, 6 ]

s.size // 6
s.has(1) // true

var arr = Array.from(s) // Array [ 1, 2, 3, 4, 5, 6 ]
var arr2 = [...s] // Array [ 1, 2, 3, 4, 5, 6 ]

s.add(7) // Set [ 1, 2, 3, 4, 5, 6, 7 ]
s.delete(7) // Set [ 1, 2, 3, 4, 5, 6]

s.clear()

Map

Object和Map都是键值对的集合,不过Object只能使用字符串作为键值,Map可以使用各种数据类型作为键值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var map = new Map()

map.set('a', 3).set('b', 4)

map.has('a') // true
map.get('a') // 3

map.size // 2

[...map] // [ [ 'a', 3 ], [ 'b', 4 ] ]

map.delete('a') // true
map.delete('c') // false
map.clear()