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. PHPStorm运行PHP代码

    1.完成php代码后,点击空白处,右上角会出现 chrome.firefox等浏览器的图标,选择一个电脑上已有图标 2.默认情况下浏览器会提示“bad gateway”,此时需要配置phpstorm对 ...

  2. Git_命令初解

  3. python with hadoop

    python with  hdfs hdfs 可以在 linux 本地操作 bin/hdfs dfs -ls /foo 但是这种只能在 命令行 操作. 通常我们需要在程序中实现远程操作,python ...

  4. Elasticsearch入门教程(二):Elasticsearch核心概念

    原文:Elasticsearch入门教程(二):Elasticsearch核心概念 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:ht ...

  5. 简述在Ubuntu终端打开文件的几种不同方法与区别

    一· 在Ubuntu下,通常用命令行打开文本文件,比如用命令gedit.more.cat.vim.less. gedit:在文本软件下打开文件,可直接修改. more ,cat 和 less :类似, ...

  6. React结合AntD的upload组件写头像上传

    upload组件里面action就是调upload接口,获取图片url地址 setImg获取url,点击保存传到后台   action 上传头像方法 //上传头像 changeImg = info = ...

  7. JS实现hasClass addClass removeClass

    // 判断class有无 function hasClass(ele, cls) { if (ele) { cls = cls || '' if (cls.replace(/\s/g, '').len ...

  8. Spring Boot整合Spring Security总结

    一.创建Spring Boot项目 引入Thymeleaf和Web模块以及Spring Security模块方便进行测试,先在pom文件中将 spring-boot-starter-security ...

  9. CodeReview的一些原则

    架构/设计/常规角度: 单一职责原则 一个类只能干一个事情,一个方法最好也只干一件事情.一个类既干UI的事情,又干逻辑的事情,这个在低质量的代码里是很常见. 行为是否统一 缓存是否统一 错误处理是否统 ...

  10. 2019-2020-1 20199319《Linux内核原理与分析》第二周作业

    计算机是如何工作的 反汇编一个简单的C程序 1.在实验环境下,创建main.c,并进入该文件进行代码的编写 在VIM文本编辑器中编写完代码后按"Shift"+":&quo ...