ECMAScript 和 JavaScript 的关系是,前者是后者的规格,后者是前者的一种实现。
1、Symbol
新增的第六种原始数据类型;表示独一无二的值;解决对象属性名同名冲突。
前五种原始数据类型分别是:undefined、null、string、number、boolean
还有一个object对象类型
Symbol('a') == Symbol('a') // false
Symbol.for('a') == Symbol.for('a') // true
应用:
1、给对象添加独一无二的属性;
2、消除魔术字符串
switch (shape ) {
case 'Triangle': // 魔术字符串
break;
/* ... more code ... */
}
可以定义:
const shapeType = {
triangle: Symbol()
};
case shapeType.triangle:
Symbol.iterator
对象默认没有遍历器,不可遍历。可以添加Symbol.iterator使其可遍历
对象的Symbol.iterator属性,指向该对象的默认遍历器方法。
let obj = {x:1,y:2,z:3}
obj[Symbol.iterator] = function *() {
for (const key of Object.keys(obj)) {
yield obj[key]
}
}
[...obj] // [1, 2, 3]
2、Generator--异步编程解决方案
异步任务封装
var fetch = require('node-fetch');
function* gen(){
var url = 'https://api.github.com/users/github';
var result = yield fetch(url);
console.log(result.bio);}
3、Proxy拦截器
在目标对象之前架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截
var proxy = new Proxy(target, handler);
target参数表示所要拦截的目标对象,handler参数也是一个对象,用来定制拦截行为。
常用拦截:get、set、apply(拦截函数的调用)、constructor(拦截new 构造函数)
4、新增函数方法
Array.from()
只要是部署了Iterator接口的数据结构,Array.from都能将其转为数组。
代替了Array.prototype.slice.call / [].slice.call
Array.protptype.includes() 方法用来判断一个数组是否包含一个指定的值,如果是返回 true,否则false。
网友评论