es6 | 新增语法 | 总结


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

重点:

6 遍历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
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM