简介

ES6是JavaScript语言的新一代标准,加入了一些新的功能和语法,正式发布于2015年6月,亦称ES2015;该标准由ECMA(欧洲计算机制造联合会)的第39号技术专家委员会(TC39)制订,ES7正在制订中,据称会在2017年发布。

语法

箭头函数、this

ES6中可以使用 => 作为函数表达形式,极简风格,参数+ => +函数体。

var foo = function(){return 1;};
//等价于
let foo = () => 1;
let nums = [1,2,3,5,10];
let fives = []; nums.forEach(v => {
if (v % 5 === 0)
fives.push(v);
}); console.log(fives); //[5,10]

箭头函数中的 this 指的不是window,是对象本身。

function aa(){
this.bb = 1;
setTimeout(() => {
this.bb++; //this指向aa
console.log(this.bb);
},500);
} aa(); //

let、const

  • ES6 推荐在函数中使用 let 定义变量

  • const 用来声明一个常量,但也并非一成不变的
  • let 和 const 只在最近的一个块中(花括号中)有效

var a = 1;
{
let a = 2;
console.log(a); //
}
console.log(a); //
const A = [1,2];
A.push = 3;
console.log(A); //[1,2,3]
A = 10; //Error

Classes

ES6中增加了类的概念,其实ES5中已经可以实现类的功能了,只不过使用Class实现可以更加清晰,更像面向对象的写法。

class Animal {
constructor(){
console.log('我是一个动物');
}
} class Person extends Animal {
constructor(){
super();
console.log('我是一个程序员');
}
} let aa = new Person();
//我是一个动物
//我是一个程序员

解构

解构赋值是ES6中推出的一种高效、简洁的赋值方法

没啥说的,直接上代码:

//通常情况下
var first = someArray[0];
var second = someArray[1];
var third = someArray[2]; //解构赋值
let [first, second, third] = someArray; //比上面简洁多了吧 //还有下面例子
let [,,third] = [1,2,3];
console.log(third); // let [first,...last] = [1,2,3];
console.log(last); //[2,3] //对象解构
let {name,age} = {name: "lisi", age: "20"};
console.log(name); //lisi
console.log(age); // let {ept} = {};
console.log(ept); //undefined

Rest + Spread

"..."

//Rest
function f(x, ...y) {
return x * y.length;
}
f(3, "hello", true) == 6 //Spread
function f(x, y, z) {
return x + y + z;
}
f(...[1,2,3]) == 6

对象字面量扩展

  • 可以在对象字面量里面定义原型
  • 定义方法可以不用function关键字
  • 直接调用父类方法
//通过对象字面量创建对象
var human = {
breathe() {
console.log('breathing...');
}
};
var worker = {
__proto__: human, //设置此对象的原型为human,相当于继承human
company: 'freelancer',
work() {
console.log('working...');
}
};
human.breathe();//输出 ‘breathing...’
//调用继承来的breathe方法
worker.breathe();//输出 ‘breathing...’

模版字符串

ES6中提供了用反引号`来创建字符串,里面可包含${…}等

`This is a pretty little template string.`

`In ES5 this is
not legal.` let name = "Bob", time = "today";
`Hello ${name}, how are you ${time}?`

Iterators(迭代器)

ES6 中可以通过 Symbol.iterator 给对象设置默认的遍历器,直到状态为true退出。

var arr = [11,12,13];
var itr = arr[Symbol.iterator](); itr.next(); //{ value: 11, done: false }
itr.next(); //{ value: 12, done: false }
itr.next(); //{ value: 13, done: false }
itr.next(); //{ value: undefined, done: true }

Generators

ES6中非常受关注的的一个功能,能够在函数中间暂停,一次或者多次,并且之后恢复执行,在它暂停的期间允许其他代码执行,并可以用其实现异步。

Run-Stop-Run...

function *foo(x) {
var y = 2 * (yield (x + 1));
var z = yield (y / 3);
return (x + y + z);
} var it = foo( 5 ); console.log( it.next() ); // { value:6, done:false }
console.log( it.next( 12 ) ); // { value:8, done:false }
console.log( it.next( 13 ) ); // { value:42, done:true }

generator能实现好多功能,如配合for...of使用,实现异步等等,我在这里就不多说了,详见。

for…of && for…in

for…of 遍历(数组)

let arr = [1,2,3];
for (let itr of arr) {
console.log(itr); //1 2 3
}

for…in 遍历对象中的属性

let arr = [1,2,3];
arr.aa = 'bb';
for (let itr in arr) {
console.log(itr); //0 1 2 aa
}

Map + Set + WeakMap + WeakSet

  • Set 对象是一组不重复的值,重复的值将被忽略,值类型可以是原始类型和引用类型

  • WeakSet是一种弱引用,同理WeakMap

// Sets
var s = new Set();
s.add("hello").add("goodbye").add("hello");
s.size === 2;
s.has("hello") === true; // Maps
var m = new Map();
m.set("hello", 42);
m.set(s, 34);
m.get(s) == 34; // Weak Maps
var wm = new WeakMap();
wm.set(s, { extra: 42 });
wm.size === undefined // Weak Sets
var ws = new WeakSet();
ws.add({ data: 42 });

Proxies

Proxy可以监听对象身上发生了什么事情,并在这些事情发生后执行一些相应的操作。

//定义被侦听的目标对象
var engineer = { name: 'Joe Sixpack', salary: 50 };
//定义处理程序
var interceptor = {
set: function (receiver, property, value) {
console.log(property, 'is changed to', value);
receiver[property] = value;
}
};
//创建代理以进行侦听
engineer = Proxy(engineer, interceptor);
//做一些改动来触发代理
engineer.salary = 60;
//控制台输出:salary is changed to 60

Symbols

Symbol 是一种新的数据类型,它的值是唯一的,不可变的。ES6 中提出 symbol 的目的是为了生成一个唯一的标识符,不过你访问不到这个标识符.

var sym = Symbol( "Symbol" );
console.log(typeof sym); // symbol

如果要获取对象 symbol 属性,需要使用Object.getOwnPropertySymbols(o)

Promises

  • ES6 对 Promise 有了原生的支持,一个 Promise 是一个等待被异步执行的对象,当它执行完成后,其状态会变成 resolved 或者 rejected

  • Promises是处理异步操作的一种模式,之前在很多三方库中有实现,比如jQuery的 deferred 对象。当你发起一个异步请求,并绑定了.when(), .done()等事件处理程序时,其实就是在应用promise模式

function timeout(duration = 0) {
return new Promise((resolve, reject) => {
setTimeout(resolve, duration);
})
} var p = timeout(1000).then(() => {
return timeout(2000);
}).then(() => {
throw new Error("hmm");
}).catch(err => {
return Promise.all([timeout(100), timeout(200)]);
})

想要了解promise实际应用等,详见。

小结

总之,ES6还是有很多棒棒的语法,有利于精简代码,高效开发;只不过一些低级别浏览器不支持,可以用Babel等工具把ES6转化成ES5,但是有些语法还是不够完善;但是在不久的将来,ES6一定会成为主流的。对了,还有ES7、8、9……

ES6新语法概览的更多相关文章

  1. ES6新语法

    ES6新语法概览 简介 ES6是JavaScript语言的新一代标准,加入了一些新的功能和语法,正式发布于2015年6月,亦称ES2015:该标准由ECMA(欧洲计算机制造联合会)的第39号技术专家委 ...

  2. 你不知道的JavaScript--Item24 ES6新特性概览

    ES6新特性概览 本文基于lukehoban/es6features ,同时参考了大量博客资料,具体见文末引用. ES6(ECMAScript 6)是即将到来的新版本JavaScript语言的标准,代 ...

  3. ES6新语法的介绍

    对于ES6新语法,阮一峰有一篇文章介绍的挺详细 http://es6.ruanyifeng.com/#docs/destructuring

  4. ES6新语法之let关键字;有别于传统关键字var的使用

    ES6新语法于2015年发布:而我这个前端小白在17年才接触到.惭愧惭愧!!不过到目前为止,似乎只有FireFox和Chrome对ES6的支持相对良好.不过既然人家ES6已经出来了,还是要跟上技术的潮 ...

  5. ES6入门五:箭头函数、函数与ES6新语法

    箭头函数的基本用法与特点 函数与ES6新语法 一.箭头函数的基本用法与特点 声明箭头函数采用声明变量和常量的关键字:var.let.const 箭头函数的参数:没有参数用"()"空 ...

  6. ES6新特性概览

    本文基于lukehoban/es6features ,同时参考了大量博客资料,具体见文末引用. ES6(ECMAScript 6)是即将到来的新版本JavaScript语言的标准,代号harmony( ...

  7. 总结常见的ES6新语法特性

    前言 ES6是即将到来的新版本JavaScript语言的标准,他给我们带来了更"甜"的语法糖(一种语法,使得语言更容易理解和更具有可读性,也让我们编写代码更加简单快捷),如箭头函数 ...

  8. 总结常见的ES6新语法特性。

    前言 ES6是即将到来的新版本JavaScript语言的标准,他给我们带来了更"甜"的语法糖(一种语法,使得语言更容易理解和更具有可读性,也让我们编写代码更加简单快捷),如箭头函数 ...

  9. ES6新特性概览1

    本文基于lukehoban/es6features ,同时参考了大量博客资料,具体见文末引用. ES6(ECMAScript 6)是即将到来的新版本JavaScript语言的标准,代号harmony( ...

随机推荐

  1. Goland debug失败

    在使用goland使用debug调试代码出现 API server listening at: 127.0.0.1:56871could not launch process: debugserver ...

  2. SDNU_ACM_ICPC_2020_Winter_Practice_1st

    A Petya is a big fan of mathematics, esecially its part related to fractions. Recently he learned th ...

  3. netty(五) channel

    问题 channel 是如何处理发送一半中断后继续重发的 channel 具体作用是什么 概述 这一节我们将介绍 Channel 和内部接口 Unsafe .其中Unsafe 是内部接口,聚合在Cha ...

  4. 关于overflow:hidden的作用(溢出隐藏,清除浮动,解决外边塌陷等等)

    1.overflow:hidden  溢出隐藏 给一个元素中设置overflow:hidden ,那么该元素的内容若超出了给定的宽度和高度属性,那么超出的部分将会被隐藏,不占位. 代码如下: 运行结果 ...

  5. Vue-项目搭建时的常用配置

    1.Vue静态资源存放的选择 assets: 编译过程中会被webpack处理理解为模块依赖,只支持相对路径的形式,assets放可能会变动的文件.static: 存放第三方文件的地方,不会被webp ...

  6. 「JSOI2013」旅行时的困惑

    「JSOI2013」旅行时的困惑 传送门 由于我们的图不仅是一个 \(\text{DAG}\) 而且在形态上还是一棵树,也就是说我们为了实现节点之间互相可达,就必须把每条边都覆盖一次,因为两个点之间的 ...

  7. 电脑读取U盘总提示格式化

    参考: https://zhidao.baidu.com/question/588981499.html 1.进入命令提示符界面:在此我们需要以管理员的身份进入命令提示符界面,可以通过右击桌面左下角的 ...

  8. 基于Modelsim的视频捕获模拟仿真

    一.前言 针对牟新刚编著的<基于FPGA的数字图像处理原理及应用>中第五章系统仿真中关于视频捕获模拟的例子进行补充和仿真验证,简言之,吊书袋子. 2020-02-27 21:09:05 二 ...

  9. 02-12Android学习进度报告十二

    今天学习了ListView的焦点问题,基本了解了ListView的使用内容. 首先可以为抢占了控件的组件设置:android:focusable="false" 只需为抢占了Lis ...

  10. bootstrap标记说明

    <span class="caret"> 这就是 一个倒三角