es6 | 新增语法 | 总结

Posted liujinyu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。





































































以上是关于es6 | 新增语法 | 总结的主要内容,如果未能解决你的问题,请参考以下文章

es6 | 新增语法 | 总结

es6新增在vue中常用语法

Es6新增语法梳理

ES6 笔记- 总结

ES6常用语法总结

ES6 新增语法