es6 | 新增语法 | 总结
电梯 原文 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 字符串补全
数值扩展
二进制 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;
数组扩展
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() 数组是否包含给定的值
函数扩展
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 尾递归
对象扩展
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 | 新增语法 | 总结的更多相关文章
- ECMAScript简介以及es6新增语法
ECMAScript简介 ECMAScript与JavaScript的关系 ECMAScript是JavaScript语言的国际化标准,JavaScript是ECMAScript的实现.(前者是后者的 ...
- ES6新增语法和内置对象(let,const, Array/String/Set 扩展方法(解构赋值,箭头函数,剩余参数))
1.let ES6中新增的用于声明变量的关键字. let 声明的变量只在所处于的块级有效. 注意:使用 let 关键字声明的变量才具有块级作用域,var 关键字是不具备这个特点的. 1. 防止循环变量 ...
- 【ES6新增语法详述】
目录 1. 变量的定义 let const 2. 模版字符串 3. 数据解构 4. 函数扩展 设置默认值 箭头函数 5. 类的定义 class 6. 对象的单体模式 "@ ES6新增了关于变 ...
- ES6新增语法(一)——let、const、var的区别
ES6简介 ES6是ECMAScript 6.0的简称,是javascript语言的下一代标准,已经在2015年6月正式发布上线.目的就是为了统一javascript的语法标准,可以用来开发大型应用程 ...
- 面向对象编程-终结篇 es6新增语法
各位,各位,终于把js完成了一个段落了,这次的章节一过我还没确定下面要学的内容可能是vue也可能是前后端交互,但无论是哪个都挺兴奋的,因为面临着终于可以做点看得过去的大点的案例项目了,先憋住激动地情绪 ...
- es6新增语法之`${}`
这是es6中新增的字符串方法 可以配合反单引号完成拼接字符串的功能 1.反单引号怎么打出来?将输入法调整为英文输入法,单击键盘上数字键1左边的按键. 2.用法step1: 定义需要拼接进去的字符串变量 ...
- ES6新增语法(四)——面向对象
ES6中json的2个变化 简写:名字和值相同时,json可以可以简写 let a=12,b=5; let json = { a, b } console.log(json) // { a:12 , ...
- ES6新增语法(三)——面向对象
ES6中json的2个变化 简写:名字和值相同时,json可以可以简写 let a=12,b=5; let json = { a, b } console.log(json) // { a:12 , ...
- ES6新增语法(二)——函数和参数
箭头函数 箭头函数:将原来函数的function关键字和函数名都删掉,并使用"=>"连接参数列表和函数体. 箭头函数语法: (参数1,参数2)=>{ 函数体 } 注意点 ...
- ES6新增语法(七)——async...await
什么是async async的意思是"异步",顾名思义就是有关异步操作的关键字,async 是 ES7 才有的,与我们之前说的Promise.Generator有很大的关联. 使用 ...
随机推荐
- mapReduce 大数据离线分析
数据分析一般分为两种,一种是在线一种是离线 流程: 一般都是对于日志文件的采集和分析 场景实例(某个电商网站产生的用户访问日志(access.log)进行离线处理与分析的过程) 1.需求: 基于Map ...
- json对象与string相互转换教程
一.说明 1.1 背景说明 json对象与string相互转换,这东西想写了很多次,但总觉得网上教程比较成熟,所以之前每次都放弃了.但今天又被string转json对象折腾了半天,实在受不了,所以还是 ...
- Remote Desktop突然不能用了 “This could be due to CredSSP encryption oracle remediation”
一段时间没有用RDP去连远程的Windows主机,某一天突然发现用不了了. 错误信息如下: An authentication error has occurred. The function req ...
- SpringCloud Stream使用案例
官方定义 Spring Cloud Stream 是一个构建消息驱动微服务的框架. 应用程序通过 inputs 或者 outputs 来与 Spring Cloud Stream 中binder 交互 ...
- SQL Server 中获取所有的用户表、用户视图的信息
直接贴代码了: 用户表: SELECT s.Name,Convert(varchar(max),tbp.value) as Description FROM sysobjects s AND (tbp ...
- 【题解】古代猪文 [SDOI2010] [BZOJ1951] [P2480]
[题解]古代猪文 [SDOI2010] [BZOJ1951] [P2480] 在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心 ...
- excel查找定位操作(for lutai)
产成品出库的单价要根据订单号和存货编码引用产成品入库的单价 方法一:使用Index 和Match =INDEX(产成品入库!I2:P13 ,IF( ) ,7) 方法二:使用vlookup ,首先 ...
- Bagging 和RF的区别
跑训练无聊看了看别人的面经,发现自己一时半会答不上来,整理一下. 一.Bagging介绍 先看一个Bagging的一个概念图(图来自https://www.cnblogs.com/nickchen12 ...
- php 无线分类 根据子级找父级
public function transform($item){ //查询数据 $position = AdminAccess::where('id',$item)->first(); $re ...
- C#基础语法,快速上収C#
C#代码基础语法 对新手的帮助很大,可以尝试多看看然后在敲敲 // 单行注释以 // 开始 /* 多行注释是这样的 */ /// <summary> /// XML文档注释 /// < ...