电梯 原文 https://www.jianshu.com/p/5f40c43c6f85

重点:

 遍历map结构

正则扩展

at相当于charAt() ,可以识别中文
normarize()
includes() , startsWith() , endsWith()
repeat(n) //n为重复次数
padStart, padEnd 字符串补全

========

Math

Math.trunc(4.1) //去除小数部分 等同:向下取整
Math.sign() //判断正负数/0
Math.cbrt() //立方根
Math.fround() //返回数值的单精度浮点数形式

========

1 对象转数组

//es5 对象转数组:
var arr1 = [].slice.call(arrayLike);
//es6 对象转数组,适用于数组对象和可遍历对象Map,Set
let arr2 = Array.from(arrayLike);

2 Array.of(值1,值2,值3) 将一组值转换为数组
3 copyWithin(target,start,end)

4 find(回调函数)返回原值 、findIndex(回调函数) 返回索引

5 fill( ) 全部填充 覆盖

6 entries(),keys()和values()——用于遍历数组
7
includes() 数组是否包含给定的值

解构

解构赋值的规则是,只要等号右边的值不是对象,就先将其转为对象。由于undefined和null无法转为对象,所以对它们进行解构赋值,都会报错。

解构函数的用途

1 交换变量值

[x,y] = [y,x]

2 从函数返回多个值

var {foo,bar} = example( );

3 函数参数的定义
4 提取Json数据

var jsonData = { id: 42, status: "OK", data: [867, 5309]};
let { id, status, data: number } = jsonData;
console.log(id, status, number);// 42, "OK", [867, 5309]

5 函数参数的默认值
6 遍历map结构

var map = new Map( );
map.set('first','hello');
map.set('second','hello');
map.set('third','hello');
map.set('fourth','hello');
for(let[key,value] of map){
//获取到键值对
}
for(let [key] of map){
//获得键名
}
for(let [,value] of map){
//获得键值
}

7 输入模块的指定方法

const { SourceMapConsumer, SourceNode } = require("source-map");

正则扩展

at相当于charAt() ,可以识别中文
normarize()
includes() , startsWith() , endsWith()
repeat(n) //n为重复次数
padStart, padEnd 字符串补全

数值扩展

 
屏幕快照 2016-10-05 08.02.35.png

二进制 0b, 八进制0o
Number.isInteger(25.0) // true
Number.EPSILON

function withinErrorMargin (left, right) {
return Math.abs(left - right) < Number.EPSILON;
}
withinErrorMargin(0.1 + 0.2, 0.3)
// true
withinErrorMargin(0.2 + 0.2, 0.3)
// false

Math.trunc(4.1) //去除小数部分
Math.sign() //判断正负数/0
Math.cbrt() //立方根
Math.fround() //返回数值的单精度浮点数形式
...
还有一些关于对数方法,三角函数方法
指数运算符: a**=2; // a= a * a;

数组扩展

 
屏幕快照 2016-10-05 08.26.50.png

1 对象转数组

//es5 对象转数组:
var arr1 = [].slice.call(arrayLike);
//es6 对象转数组,适用于数组对象和可遍历对象Map,Set
let arr2 = Array.from(arrayLike);

2 Array.of(值1,值2,值3) 将一组值转换为数组
等价于es5
var arr1 = [].slice.call(arguments);
3 copyWithin(target,start,end)
target(必需):从该位置开始替换数据。
start(可选):从该位置开始读取数据,默认为0。如果为负值,表示倒数。
end(可选):到该位置前停止读取数据,默认等于数组长度。如果为负值,表示倒数。

[1, 2, 3, 4, 5].copyWithin(0, 3) // [4, 5, 3, 4, 5]

4 find(回调函数)

//返回符合条件的值
[1, 4, -5, 10].find((n) => n < 0) // -5

findIndex

//返回符合条件的第一个索引
[1, 5, 10, 15].findIndex(function(value, index, arr) {
return value > 9;
})
// 2

5 fill( ) 使用给定值填充一个数组
6 entries(),keys()和values()——用于遍历数组
7 includes() 数组是否包含给定的值

函数扩展

 
屏幕快照 2016-10-05 08.52.52.png

1 函数参数设置了默认值,length失效
2 rest参数 ...变量名 用于获取函数多余的参数
3 ...替换apply

// ES5的写法
function f(x, y, z) {
// ...
}
var args = [0, 1, 2];
f.apply(null, args);
// ES6的写法
function f(x, y, z) {
// ...
}
var args = [0, 1, 2];
f(...args);
//字符串转数组
[...'hello'] // ["h","e","l","l","o"]

4 函数的name属性
5 箭头函数
箭头函数有几个使用注意点。
(1)函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。
(2)不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。
(3)不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用Rest参数代替。
(4)不可以使用yield命令,因此箭头函数不能用作Generator函数。
上面四点中,第一点尤其值得注意。this对象的指向是可变的,但是在箭头函数中,它是固定的。
6 函数绑定
obj::bind() 方法绑定在对象上
7 尾调用

function outter(x){
return inner(x);
}

8 尾递归

对象扩展

 
屏幕快照 2016-10-05 09.32.21.png

Object.is
就是部署这个算法的新方法。它用来比较两个值是否严格相等,与严格比较运算符(===)的行为基本一致。

+0 === -0 //true
NaN === NaN // false
Object.is(+0, -0) // false
Object.is(NaN, NaN) // true

Object.assign
方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)。
浅拷贝

ES6一共有5种方法可以遍历对象的属性。

(1)for...in
for...in循环遍历对象自身的和继承的可枚举属性(不含Symbol属性)。
(2)Object.keys(obj)
Object.keys返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含Symbol属性)。
(3)Object.getOwnPropertyNames(obj)
Object.getOwnPropertyNames返回一个数组,包含对象自身的所有属性(不含Symbol属性,但是包括不可枚举属性)。
(4)Object.getOwnPropertySymbols(obj)
Object.getOwnPropertySymbols返回一个数组,包含对象自身的所有Symbol属性。
(5)Reflect.ownKeys(obj)
Reflect.ownKeys返回一个数组,包含对象自身的所有属性,不管是属性名是Symbol或字符串,也不管是否可枚举。
以上的5种方法遍历对象的属性,都遵守同样的属性遍历的次序规则。
首先遍历所有属性名为数值的属性,按照数字排序。
其次遍历所有属性名为字符串的属性,按照生成时间排序。
最后遍历所有属性名为Symbol值的属性,按照生成时间排序。

Symbol

Proxy和Reflect

Set和Map

Iterator和 for...of

Generator函数

function* generator(){
yield 1;
yield 2;
yield 3;
return 4;
}
generator.next() // { value: 1, done: false }
generator.next()// { value: 2, done: false }
generator.next()// { value: 3, done: false }
generator.next()// { value: 4, done: true }

Promise对象

一个用Promise对象实现的Ajax操作的例子。

var getJSON = function(url) {
var promise = new Promise(function(resolve, reject){
var client = new XMLHttpRequest();
client.open("GET", url);
client.onreadystatechange = handler;
client.responseType = "json";
client.setRequestHeader("Accept", "application/json");
client.send();
function handler() {
if (this.readyState !== 4) {
return;
}
if (this.status === 200) {
resolve(this.response);
} else {
reject(new Error(this.statusText));
} }; });
return promise
;};
getJSON("/posts.json")
.then(function(json) {
console.log('Contents: ' + json);
}, function(error) {
console.error('出错了', error);
});

getJSON是对XMLHttpRequest对象的封装,用于发出一个针对JSON数据的HTTP请求,并且返回一个Promise对象。需要注意的是,在getJSON内部,resolve函数和reject函数调用时,都带有参数。

异步操作和Async

Class

Decorator 装饰器

作者:Bookish倩宝
链接:https://www.jianshu.com/p/5f40c43c6f85
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

es6 | 新增语法 | 总结的更多相关文章

  1. ECMAScript简介以及es6新增语法

    ECMAScript简介 ECMAScript与JavaScript的关系 ECMAScript是JavaScript语言的国际化标准,JavaScript是ECMAScript的实现.(前者是后者的 ...

  2. ES6新增语法和内置对象(let,const, Array/String/Set 扩展方法(解构赋值,箭头函数,剩余参数))

    1.let ES6中新增的用于声明变量的关键字. let 声明的变量只在所处于的块级有效. 注意:使用 let 关键字声明的变量才具有块级作用域,var 关键字是不具备这个特点的. 1. 防止循环变量 ...

  3. 【ES6新增语法详述】

    目录 1. 变量的定义 let const 2. 模版字符串 3. 数据解构 4. 函数扩展 设置默认值 箭头函数 5. 类的定义 class 6. 对象的单体模式 "@ ES6新增了关于变 ...

  4. ES6新增语法(一)——let、const、var的区别

    ES6简介 ES6是ECMAScript 6.0的简称,是javascript语言的下一代标准,已经在2015年6月正式发布上线.目的就是为了统一javascript的语法标准,可以用来开发大型应用程 ...

  5. 面向对象编程-终结篇 es6新增语法

    各位,各位,终于把js完成了一个段落了,这次的章节一过我还没确定下面要学的内容可能是vue也可能是前后端交互,但无论是哪个都挺兴奋的,因为面临着终于可以做点看得过去的大点的案例项目了,先憋住激动地情绪 ...

  6. es6新增语法之`${}`

    这是es6中新增的字符串方法 可以配合反单引号完成拼接字符串的功能 1.反单引号怎么打出来?将输入法调整为英文输入法,单击键盘上数字键1左边的按键. 2.用法step1: 定义需要拼接进去的字符串变量 ...

  7. ES6新增语法(四)——面向对象

    ES6中json的2个变化 简写:名字和值相同时,json可以可以简写 let a=12,b=5; let json = { a, b } console.log(json) // { a:12 , ...

  8. ES6新增语法(三)——面向对象

    ES6中json的2个变化 简写:名字和值相同时,json可以可以简写 let a=12,b=5; let json = { a, b } console.log(json) // { a:12 , ...

  9. ES6新增语法(二)——函数和参数

    箭头函数 箭头函数:将原来函数的function关键字和函数名都删掉,并使用"=>"连接参数列表和函数体. 箭头函数语法: (参数1,参数2)=>{ 函数体 } 注意点 ...

  10. ES6新增语法(七)——async...await

    什么是async async的意思是"异步",顾名思义就是有关异步操作的关键字,async 是 ES7 才有的,与我们之前说的Promise.Generator有很大的关联. 使用 ...

随机推荐

  1. sql 语言--- DML,DDL,DQL,DCL,TCL,CCL

    结构化查询语言(Structured Query Language)简称SQL                是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询.更新和管理 ...

  2. sqlException 使用relace 替换单引号

    我们从前端输入数据的时候,可能会输入一些 单引号 ,的字符 导致直接进行执行sql 语句保存的时候出现错误 如: 输入的有 单引号 保存按钮小代码 <asp:Button ID="bt ...

  3. Qt SDK Issue cstdlib: fatal error: stdlib.h: No such file or directory

    *To reproduce the issue, I've tried the following solutions which did not help:* *1) Globally remove ...

  4. 给定一个数组,求如果排序后,相邻两个元素的最大差值,要求时间复杂度为O(N)

    第一种方法: 计数排序后,然后找出两两之间的最大差值 计数排序的时间复杂度是O(N) public class CountSort { public static void main(String[] ...

  5. FEL表达式的用法

    Fel是开放的,引擎执行中的多个模块都可以扩展或替换.Fel的执行主要是通过函数实现,运算符(+.-等都是Fel函数),所有这些函数都是可以替换的,扩展函数也非常简单. Fel有双引擎,同时支持解释执 ...

  6. vs2017专业版和企业版的密钥

    Enterprise: NJVYC-BMHX2-G77MM-4XJMR-6Q8QF Professional: KBJFW-NXHK6-W4WJM-CRMQB-G3CDH

  7. VS 安装resharper 后 无法进行UnitTest

    Vs安装 Resharper后,无法进行单元测试,发现报错提示信息如下: ignored test-case is missing. rebuild the project and try again ...

  8. 分布式系统根基:物理时钟和Lamport逻辑时钟

    分布式系统解决了传统单体架构的单点问题和性能容量问题,另一方面也带来了很多的问题,其中一个问题就是多节点的时间同步问题:不同机器上的物理时钟难以同步,导致无法区分在分布式系统中多个节点的事件时序.19 ...

  9. nginx 反向代理Jenkins

    进入nginx 配置文件 cd /root/nginx/conf   找到nginx.conf 修改server块内容: server {        listen       80;        ...

  10. String常用使用方法,1.创建string的常用3+1种方式,2.引用类型使用==比较地址值,3.String当中获取相关的常用方法,4.字符串的截取方法,5.String转换常用方法,6.切割字符串----java

    一个知识点使用一个代码块方便查看 1.创建string的常用3+1种方式 /* 创建string的常用3+1种方式 三种构造方法 public String():创建一个空字符串,不含有任何内容: p ...