ES6 核心特性

块级作用域

let : 声明的变量存在块级作用域  不会声明提前

ES5

  1. // ES5
    // 声明提前
  2. var x = 'outer';
  3. function test(inner) {
  4. if (inner) {
  5. var x = 'inner';
  6. console.log(x);
  7. }
  8. console.log(x);
  9. }
  10. test(false) //undefined
  11. test(true) // inner inner

ES6

  1. // ES6
  2. // 声明不提前
  3. let x = 'outer';
  4. function test(inner) {
  5. if (inner) {
  6. let x = 'inner';
  7. console.log(x);
  8. }
  9. console.log(x);
  10. }
  11. test(false) // outer
  12. test(true) // inner outer

优点

  1. // ES5
  2. {
  3. var a = 1;
  4. }
  5. console.log(a)
  6. // ES6
  7. {
  8. let b = 2;
  9. }
  10. console.log(b)

const : 常量  不可以修改


模板字符串

使用 ` ` 包裹  变量使用${}

  1. // ES5
  2. var str1 = 'lpt';
  3. var str2 = 'want to eat everything!';
  4. console.log('我想说的是:' + str1 + ' ' + str2)
  5. // ES6
  6. const str3 = 'lpt';
  7. const str4 = 'want to eat everything!';
  8. console.log(`我想说的是:${str3} ${str4}`)

解构复制

解构赋值允许你使用类似数组或对象字面量的语法将数组和对象的属性赋给各种变量

如果默认值是一个函数,那么函数只会在有需要才会去求值

  1. function fn(num){
  2. console.log(num);
  3. return num;
  4. }
  5. let [a = fn(1)] = [10]; // 不执行函数
  6. let [b = fn(2)] = []; // 执行函数
  7. a //
  8. b //

解构赋值允许指定默认值

  1. // ES5
  2. var arr = [1, 2, 3, 4];
  3. var first = arr[0];
  4. var third = arr[2];
  5. console.log(first, third); // 1 3
  6. // ES6
  7. const arr1 = [1, 2, 3, 4];
  8. const [a, ,c=9] = arr1;
  9. console.log(a,c)

交换value

  1. // ES5
  2. var a = 1;
  3. var b = 2;
  4. var tmp = a;
  5. a = b;
  6. b = tmp;
  7. console.log(a, b); // 2 1
  8. // ES6
  9. let a = 1;
  10. let b = 2;
  11. [a, b] = [b, a];
  12. console.log(a, b); // 2 1

解构为多个返回值

  1. // ES6
  2. function margin() {
  3. const left=1, right=2, top=3, bottom=4;
  4. return { left, right, top, bottom };
  5. }
  6. const { left, bottom } = margin();
  7. console.log(left, bottom); // 1 4

类和对象

  1. // ES5
  2. var Animal = (function () {
  3. function MyConstructor(name) {
  4. this.name = name;
  5. }
  6. MyConstructor.prototype.speak = function speak() {
  7. console.log(this.name + ' makes a noise.');
  8. };
  9. return MyConstructor;
  10. })();
  11. var animal = new Animal('lpt');
  12. animal.speak(); // lpt makes a noise.
  13.  
  14. // ES6
  15. class Animal {
  16. constructor(name) {
  17. this.name = name;
  18. }
  19. speak() {
  20. console.log(this.name + ' makes a noise.');
  21. }
  22. }
  23. const animal = new Animal('lpt');
  24. animal.speak(); // lpt makes a noise.

继承

  1. // ES5
  2. var Animal = (function () {
  3. function MyConstructor(name) {
  4. this.name = name;
  5. }
  6. MyConstructor.prototype.speak = function speak() {
  7. console.log(this.name + ' makes a noise.');
  8. };
  9. return MyConstructor;
  10. })();
  11. var Monkey = (function () {
  12. function MyConstructor(name){
  13. Animal.call(this, name);
  14. }
  15. // prototypal inheritance
  16. MyConstructor.prototype = Object.create(Animal.prototype);
  17. MyConstructor.prototype.constructor = Animal;
  18. MyConstructor.prototype.speak = function speak() {
  19. Animal.prototype.speak.call(this);
  20. console.log(this.name + ' roars');
  21. };
  22. return MyConstructor;
  23. })();
  24. var monkey = new Monkey('Simba');
  25. monkey.speak();
  26. // Simba makes a noise.
  27. // Simba roars.
  28.  
  29. // ES6
  30. class Animal {
  31. constructor(name) {
  32. this.name = name;
  33. }
  34. speak() {
  35. console.log(this.name + ' makes a noise.');
  36. }
  37. }
  38. class Lion extends Animal {
  39. speak() {
  40. super.speak();
  41. console.log(this.name + ' roars');
  42. }
  43. }
  44. const lion = new Lion('Simba');
  45. lion.speak();
  46. // Simba makes a noise.
  47. // Simba roars.

箭头函数

箭头函数完全修复了this的指向,this总是指向词法作用域,也就是外层调用者obj

  1. // ES6
  2. var obj = {
  3. birth: 1992,
  4. getAge: function () {
  5. var b = this.birth; //
  6. var fn = () => new Date().getFullYear() - this.birth; // this指向obj对象
  7. console.log( fn() );
  8. }
  9. };
  10. obj.getAge(); //

For…of

  1. // for
  2. var array = ['a', 'b', 'c', 'd'];
  3. for (var i = 0; i < array.length; i++) {
  4. var element = array[i];
  5. console.log(element);
  6. }
  7. // forEach
  8. array.forEach(function (element) {
  9. console.log(element);
  10. });
  11. // for …of
  12. for (const element of array) {
  13. console.log(element);
  14. }

默认参数

  1. // ES5
  2. function point(x, y, isFlag){
  3. x = x || 0;
  4. y = y || -1;
  5. isFlag = isFlag || true;
  6. console.log(x,y, isFlag);
  7. }
  8. point(0, 0) // 0 -1 true
  9. point(0, 0, false) // 0 -1 true
  10. point(1) // 1 -1 true
  11. point() // 0 -1 true
  12. // ES6
  13. function point(x = 0, y = -1, isFlag = true){
  14. console.log(x,y, isFlag);
  15. }
  16. point(0, 0) // 0 0 true
  17. point(0, 0, false) // 0 0 false
  18. point(1) // 1 -1 true
  19. point() // 0 -1 true

求数组最大值

  1. Math.max(...[2,100,1,6,43]) //

使用扩展运算符(...)拷贝数组

  1. // bad
  2. const len = items.length;
  3. const itemsCopy = [];
  4. let i;
  5.  
  6. for (i = 0; i < len; i++) {
  7. itemsCopy[i] = items[i];
  8. }
  9.  
  10. // good
  11. const itemsCopy = [...items];

使用Array.from方法,将类似数组的对象转为数组

  1. const foo = document.querySelectorAll('.foo');
  2. const nodes = Array.from(foo);

未完待续

JavaScript ES6特性的更多相关文章

  1. ES6:JavaScript 新特性

    我相信,在ECMAScript.next到来的时候,我们现在每天都在写的JavaScript代码将会发生巨大的变化.接下来的一年将会是令JavaScript开发者们兴奋的一年,越来越多的特性提案将被最 ...

  2. JavaScript ES6 新特性详解

    JavaScript ES6 带来了新的语法和新的强大功能,使您的代码更现代,更易读 const ,  let and var 的区别: const , let 是 ES6 中用于声明变量的新关键字. ...

  3. 最常用的ES6特性(转)

    最常用的ES6特性 let, const, class, extends, super, arrow functions, template string, destructuring, defaul ...

  4. ES6特性

    一.ES6特性: let, const, class, extends, super, arrow functions, template string, destructuring, default ...

  5. 逆转序列的递归/尾递归(+destructuring assignment)实现(JavaScript + ES6)

    这里是用 JavaScript 做的逆转序列(数组/字符串)的递归/尾递归实现.另外还尝鲜用了一下 ES6 的destructuring assignment + spread operator 做了 ...

  6. 第四节:教你如何快速让浏览器兼容ES6特性

    写在正文前,本来这一节的内容应该放在第二节更合适,因为当时就有同学问ES6的兼容性如何,如何在浏览器兼容ES6的特性,这节前端君会介绍一个抱砖引玉的操作案例. 为什么ES6会有兼容性问题? 由于广大用 ...

  7. [转]JavaScript ES6 class指南

    [转]JavaScript ES6 class指南 前言 EcmaScript 2015 (又称ES6)通过一些新的关键字,使类成为了JS中一个新的一等公民.但是目前为止,这些关于类的新关键字仅仅是建 ...

  8. 解决浏览器兼容ES6特性

    为什么ES6会有兼容性问题? 由于广大用户使用的浏览器版本在发布的时候也许早于ES6的定稿和发布,而到了今天,我们在编程中如果使用了ES6的新特性,浏览器若没有更新版本,或者新版本中没有对ES6的特性 ...

  9. JavaScript ES6箭头函数指南

    前言 胖箭头函数(Fat arrow functions),又称箭头函数,是一个来自ECMAScript 2015(又称ES6)的全新特性.有传闻说,箭头函数的语法=>,是受到了CoffeeSc ...

随机推荐

  1. 基于内容的图片检索CBIR简介

    原文地址:http://blog.csdn.net/davebobo/article/details/53171311 传统的图像检索过程,先通过人工对图像进行文字标注,再利用关键字来检索图像,这种依 ...

  2. jenkins jar包上传maven仓库

    1      Jenkins 编译后部署至 Maven 仓库 jenkins编译后构件(如:jar包)部署至maven仓库需修改以下内容:maven 仓库配置:项目 pom 文件:本地仓库的 sett ...

  3. Android Studio安装apk失败

    可能的情况 手机上已经安装了应用或者应用卸载不彻底 解决办法: adb uninstall yourpackagename 如果uninstall失败,可以考虑 clean一下Android Stud ...

  4. Ex 5_33 实现一个关于公式长度(其中所有文字总的出现次数)为线性时间的Horn公式可满足性问题_第十次作业

    对于所有的蕴含式,生成一张有向图,对于每一个蕴含式,将左边的每一个文字连接到一个中间结点,并用中间结点记录蕴含式左边文字的数量,然后将中间结点连接到蕴含式的右侧结点.例如,对于蕴含式集合 生成的有向图 ...

  5. 如何在DOS窗口复制和粘贴命令

    在键盘上按下windows+R键,打开运行窗口. 在“打开”处输入cmd,并按下enter键,打开DOS窗口. 把鼠标移动到DOS窗口标题处,单击鼠标右键,选择属性. 把编辑选项处的“快速编辑模式”勾 ...

  6. Fiddler模拟post四种请求数据

    前言: Fiddler是一个简单的http协议调试代理工具,它界面友好,易于操作,是模拟http请求的利器之一. 在接口测试中,接口通常是get请求或者post请求.get请求的测试一般较为简单,只需 ...

  7. Python-浮动 清浮动

    # 浮动布局 ## 一.display总结 ```css/* inline *//*1.同行显示, 就相当于纯文本, 当一行显示不下, 如就是一个字显示不下,那么显示不下的那一个字就会自动换行,和纯文 ...

  8. Stanford CS231n - Convolutional Neural Networks for Visual Recognition

    网易云课堂上有汉化的视频:http://study.163.com/course/courseLearn.htm?courseId=1003223001#/learn/video?lessonId=1 ...

  9. vue修饰符学习

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  10. 步步为营-36-ADO.Net简介

    与数据库进行连接交互 方法一 #region 01连接对象 //01 连接字符串 string connstr = "server=.;uid=sa;pwd=sa;database=Demo ...