1、Promise构造函数

//resolve(成功),reject(失败)两个参数
function runAsync(){
var p = new Promise(function(resolve,reject){
//做一些异步操作
setTimeout(function(){
console.log('执行完成');
resolve('执行完成数据');
});
});
return p;
}
runAsync();

then、catch

//链式操作
runAsync()
.then(function(data){
console.log(data);
return runAsync2();
})
.then(function(data){
console.log(data);
})
//then-catch
runAsync()
.then(function(data){
console.log('resolved-'+data);
})
.catch(function(reason){
console.log('rejected-'+reason);
});

all的用法:并行执行,所有异步操作执行完才执行回调

runAsync()
.all([runAsync1(), runAsync2(), runAsync3()])
.then(function(results){
console.log(results);
});

race的用法:先执行完一个异步操作就执行回调

runAsync()
.race([runAsync1(), runAsync2(), runAsync3()])
.then(function(results){
console.log(results);
});

 2、三点运算符(...):浅拷贝

对象中的扩展运算符(...)用于取出参数对象中的所有可遍历属性,拷贝到当前对象之中。

let obj2 = {...obj1}; //浅拷贝,修改obj2会同步修改obj1

注意:如果将扩展运算符用于数组赋值,只能放在参数的最后一位,否则会报错。

const [...rest, last] = [1, 2, 3, 4, 5];
// 报错
const [first, ...rest, last] = [1, 2, 3, 4, 5];
// 报错

扩展运算符还可以将字符串转为真正的数组

[...'hello']
// [ "h", "e", "l", "l", "o" ]

 3、symbol

应用场景1:可以更好的设计我们的数据对象,我们可以把不需要对外操作和访问的属性用symbol来定义。

let obj = {
[Symbol('name')]: '一斤代码',
age: 18,
title: 'Engineer'
} Object.keys(obj) // ['age', 'title'] for (let p in obj) {
console.log(p) // 分别会输出:'age' 和 'title'
} Object.getOwnPropertyNames(obj) // ['age', 'title']
JSON.stringify(obj); //{'age': 18, 'title': 'Engineer'}

会有一些针对symbol的API:

// 使用Object的API
Object.getOwnPropertySymbols(obj) // [Symbol(name)]
// 使用新增的反射API
Reflect.ownKeys(obj) // [Symbol(name), 'age', 'title']

应用场景2:使用symbol来代替常量

const TYPE_AUDIO = Symbol();
const TYPE_VIDEO = Symbol();
console.log(TYPE_AUDIO===TYPE_VIDEO); //false,Symbol()是唯一的

应用场景3:使用symbol来定义类的私有属性/方法

const PASSWORD = Symbol();
class Login {
constructor(username, password){
this.username = username;
this[PASSWORD] = password;
}
checkPassword(pwd){
return this[PASSWORD] === pwd;
}
}

注册和获取全局Symbol

let gs1 = Symbol.for('global_symbol_1'); //注册一个全局Symbol
let gs2 = Symbol.for('global_symbol_1'); //获取全局Symbol
gs1===gs2; //true

ES6注的更多相关文章

  1. es6之变量的解构赋值

    es5中通常我们声明变量都是以下的方式: var a = 10; var b = 20; var c = 30; //或者 var a = 10,b = 20,c = 30; //或者 var arr ...

  2. Vue ES6 Jade Scss Webpack Gulp

    一直以来非常庆幸曾经有翻过<代码大全2>:这使我崎岖编程之路少了很多不必要的坎坷.它在软件工艺的话题中有写到一篇:"首先是为人写程序,其次才是机器(Write Programs ...

  3. webpack+react+es6开发模式

    一.前言 实习了两个月,把在公司用到的前端开发模式做个简单的整理.公司里前端开发模式webpack+react+redux+es6,这里去掉了redux. webpack, react, redux等 ...

  4. ES6之module

    该博客原文地址:http://www.cnblogs.com/giggle/p/5572118.html 一.module概述 JavaScript一直没有模块体系,但是伴随着ES6的到来,modul ...

  5. ES6之块级作用域

    一.前言 在ECMAScript6(以下简称ES6)之前,ECMAScript的作用域只有两种: 1.  全局作用域: 2.  函数作用域. 正是因为有这两种作用域,所以在JavaScript中出现一 ...

  6. ES6转换器之Babel

    ES6部分功能没有支持,所以想学习ES6,得先有个转换器,就是将ES6的代码转换为ES5. 我这里用的是Gulp + Bable的形式来将ES6转换为ES5的. 前提: (1).Gulp和Bable都 ...

  7. [译]ES6中的代理对象

    原文:http://ariya.ofilabs.com/2013/07/es6-and-proxy.html 能够拦截在一个对象上的指定操作的能力是非常有用的,尤其是在故障调试的时候.通过ECMASc ...

  8. ES6 ( 三 ) 字符串扩展

    一.字符Unicode表示方法 ES6中可以使用以下6种方法表示字符 '\z' === 'z' // true '\172' === 'z' // true '\x7A' === 'z' // tru ...

  9. 最常用的ES6特性

    遇到了要写出es6新特性的题目,所以查阅了资料来总结一下,点击查看原文. 进入正题,最常用的ES6特性有:let, const, class, extends, super, arrow functi ...

随机推荐

  1. 360度3D 旋转插件

    Circlr插件是一款基于jQuery的可以对图片进行360度全方位旋转展示的插件.Circlr通过按一定角度规律拍摄的产品图片,制作出可以使用鼠标拖动.鼠标滚轮和移动触摸来进行图片逐帧旋转的效果.比 ...

  2. phpstorm 不能选择 php language level

    最近需要更改phpstorm中的php language level发现更改不了 解决方法是在PHP 下面的Composer中勾选了同步 composer php版本的原因 取消勾选,点击应用就可以了

  3. Vue 小实例 - 组件化 、cli 工程化

    1. 组件化  (父子组件通信: 父 - 子 :props 数组           子 - 父  :  子层触发事件,调用  $emit 触发父层对应自定义事件,可函数处理传参 / $event 获 ...

  4. Java中遍历Set集合的方法

    对 set 的遍历 1.迭代遍历: Set<String> set = new HashSet<String>(); Iterator<String> it = s ...

  5. FileUtils.writeByteArrayToFile方法

    FileUtil类是Apache Commons IO库里面的一个类,是与文件相关的一个辅助类,我写了一个可运行的java文件 import java.io.*; import org.apache. ...

  6. jquery-mobile pop

    一.弹框 代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...

  7. ThinkCMF5.1虚拟机下安装的问题,已成功

    官方的解决方案:https://www.kancloud.cn/thinkcmf/faq/1197179 按它的提示,发现阿里云的虚拟主机htdoc同级的目录没有上传权限. 只能把“ThinkCMF文 ...

  8. 将临时全局表中的符合字段导入test数据库中

    --表1 开户级别表 insert into test.dbo.crm_m_cust_summary(CUST_CERT_N O,ASSETAMT_GRADE_CD)select cust_no,cu ...

  9. 删除表A的记录时,Oracle 报错:“ORA-02292:违反完整约束条件(XXX.FKXXX)- 已找到子记录

    1.找到以”FKXXX“为外键的表A的子表,直接运行select a.constraint_name, a.table_name, b.constraint_name from user_constr ...

  10. java面试(集合类)03

    1.Collection 和 Collections 有什么区别? Collection 是一个集合接口,它提供了对集合对象进行基本操作的通用接口方法,所有集合都是它的子类,比如 List.Set 等 ...