ES6知识点(三)
原文链接 https://wilsonis.github.io/blog/posts/es6_3
注:以下为加速网络访问所做的原文缓存,经过重新格式化,可能存在格式方面的问题,或偶有遗漏信息,请以原文为准。
七、新增原始数据类型Symbol
ES6中引入了一种新的原始数据类型Symbol,表示独一无二的值,它是javascript语言的第七种数据类型。其它六种分别是Undefined,Null,Boolean,String,Number,Object.
1. Symbol的意义
Symbol的作用是保证每一个对象的属性名都是独一无二的,从根本上防止属性名的冲突。
Symbol值通过Symbol函数生成,凡是属性名属于Symbol类型的,都是独一无二的。Symbol通过Symbol函数生成,但不能使用new命令生成,因为生成的Symbol是一个原始类型的值,不是对象。
let s = Symbol();
typeof s; //"symbol"
也就是说,ES6中对象的属性名可以有两种类型,一种是原先的字符串形式,另一种就是新增的Symbol类型。Symbol函数可以传入一个字符串参数,表示对该Symbol实例的描述,以示区分不同的实例。
Symbol值不能参与计算,不能进行字符串拼接,但可以通过调用toString方法显示转为字符串,除此之外,Symbol值只可以转为布尔值。
2. Symbol的使用
Symbol作为属性名的使用方法有如下三种:
var mySymbol = Symbol();
// 第一种写法
var a = {};
a[mySymbol] = 'Hello!';
// 第二种写法
var a = {
[mySymbol]: 'Hello!'
};
// 第三种写法
var a = {};
Object.defineProperty(a, mySymbol, { value: 'Hello!' });
// 以上写法都得到同样结果
a[mySymbol] // "Hello!"
Symbol值作为对象属性名时,不能使用点运算符,只能放在方括号中。
3. Symbol的遍历
Symbol作为属性名,不会出现在for...in,for...of遍历中,但可以通过Object.getOwnPropertySymbols方法来获取制定对象的Symbol属性名,返回的是包含所有Symbol值的数组。
4. Symbol的内置方法
Symbol有11种内置方法,这里不一一讲述了,啥时候能用到了再叙述。
八、Set和Map数据结构
Set数据结构类似于数组,它的成员的值都是唯一的,没有重复值,Set本身是一个构造函数,用来生成数据结构。
var s = new Set();
[2, 3, 5, 4, 5, 2, 2].map(x => s.add(x));
for (let i of s) {
console.log(i);
}
// 2 3 5 4
1. Set的属性和方法
Set结构的实例有以下属性。
Set.prototype.constructor:构造函数,默认就是Set函数。
Set.prototype.size:返回Set实例的成员总数。
Set实例的方法分为两大类:操作方法(用于操作数据)和遍历方法(用于遍历成员)。下面先介绍四个操作方法。
add(value):添加某个值,返回Set结构本身。
delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
has(value):返回一个布尔值,表示该值是否为Set的成员。
clear():清除所有成员,没有返回值。
Set结构的实例有四个遍历方法,可以用于遍历成员。
keys():返回键名的遍历器
values():返回键值的遍历器
entries():返回键值对的遍历器
forEach():使用回调函数遍历每个成员
2. Map数据结构
Map结构的键不限于字符串,各种类型的值都可以当做键。
var m = new Map([
[true, 'foo'],
['true', 'bar']
]);
m.get(true) // 'foo'
m.get('true') // 'bar'
Map结构的实例有以下属性和操作方法。
属性:
size属性返回Map结构的成员总数。
set(key, value):set方法设置key所对应的键值,然后返回整个Map结构。如果key已经有值,则键值会被更新,否则就新生成该键。set方法返回的是Map本身,因此可以采用链式写法。
get(key):get方法读取key对应的键值,如果找不到key,返回undefined。
has(key):has方法返回一个布尔值,表示某个键是否在Map数据结构中。
delete(key):delete方法删除某个键,返回true。如果删除失败,返回false。
clear():clear方法清除所有成员,没有返回值。
遍历方法
Map原生提供三个遍历器生成函数和一个遍历方法。
keys():返回键名的遍历器。
values():返回键值的遍历器。
entries():返回所有成员的遍历器。
forEach():遍历Map的所有成员。