`

ES6主要特性简介

 
阅读更多

ES6新特性

 

class 类 (extends继承)

@example:

class Player {

 constructor(x, y) {

   this.x = 0;

   this.y = 0;

 }

 

 getPosition() {

   return this.x + ',' + this.y;

 }

 

 jumpFoward() {

   this.x = this.x + 1;

 }

 

 jumpBackwards() {

   this.x = this.x - 1;

 }

}

 

import 引入外部模块

@example: import * as testClass from "./class";  // 从class模块中导出所有抛出的对象

@example: import {toString, foo, bar} from "./myModule";  // 从class模块中导出toString / foo / bar 属性或方法

 

 

export 抛出当前模块方法,供外部调用

@example: export default Archer;  // 抛出模块中定义的Archer对象,外部使用default属性来获取Archer对象

@example: export var foo = 'foo';  // 抛出模块中的属性

@example: export function testMethod(){ // 抛出当前所定义的方法,供外部调用

                  // ... 

         }

 

let  块作用域 - 定义

@desc: 

一般来说,JavaScript的作用域是“基于函数”的。就是说,为了包含一个私有变量,开发者必须声明一个函数。这点一直为许多使用过它语言的开发者所诟病。但现在,ES6提供了关键字let,使开发者可以声明块级变量,下面是一个例子:

@example: 

 

function foo2() {

 let bar = true;

 

 if (bar) {

   let baz = 'hi';

 }

 

 console.log(baz); // Uncaught ReferenceError: baz未定义

}

 

 

=>  箭头函数

@desc:

=>不只是关键字function的简写,它还带来了其它好处。箭头函数与包围它的代码共享同一个this。有经验的JavaScript开发者都熟悉诸如var self = this;或var that = this这种引用外围this的模式。但借助=>,就不需要这种模式了。

@example:

// ES5  (filter 数组过滤方法)

var selected = allJobs.filter(function (job) {  

 return job.isSelected();  

});  

 

// ES6  

var selected = allJobs.filter(job => job.isSelected()); 

 

当需要编写一个简单的单一参数函数时,可以采用箭头函数来书写,标识名=>表达式。这样就可以省却function和return的输入,还有括号,分号等。

 

当需要编写一个含有多个参数的函数时,只要把相关参数用括号包起来就好了。

var values = [1,2,3,4,5];

// ES5   (reduce 数组累积结果计算)

var total = values.reduce(function (a, b) {  

 return a + b;  

}, 0);  

 

// ES6  

var total = values.reduce((a, b) => a + b, 0);  

 

console.log(total); // 15

 

Generators 迭代器(生成器函数)

@desc:

这是一种新型的JavaScript函数,使开发者可以暂挂他们的函数,并在多次执行中返回不同的值。

迭代器是一个拥有 {value:{*}, done:{Boolean}} next([*])方法 和 {undefined} throw([*])方法 的对象,通过next函数不断执行以关键字yield分割的代码段,通过throw函数令yield分割的代码段抛出异常。

@example:

// 定义生成器函数

function *enumerable(msg){

 console.log(msg)

 var msg1 = yield msg + '  after '

 console.log(msg1)

 var msg2 = yield msg1 + ' after'

 console.log(msg2 + ' over')

}

 

// 上述代码最终会被解析为下面的代码:

var enumerable = function(msg){

 var state = -1

 

 return {

   next: function(val){

     switch(++state){

        case 0:

                 console.log(msg + ' after')

                 break

        case 1:

                 var msg1 = val

                 console.log(msg1 + ' after')

                 break

        case 2:

                 var msg2 = val

                 console.log(msg2 + ' over')

                 break

     }

   }

 }

}

 

// for...of语句

enumerator = enumerable('hello')

for(ret of enumerator)

 console.log(JSON.stringify(ret));

 

 // 初始化迭代器

var enumerator = enumerable('hello')

var ret = enumerator.next() // 控制台显示 hello,ret的值{value:'hello after',done:false}

ret =  enumerator.next('world') // 控制台显示 world,ret的值{value:'world after',done:false}

ret = enumerator.next('game') // 控制台显示game,ret的值{value:'game after',done:false}

// 抛出异常信息

ret = enumerator.throw(new Error('test')) // 控制台显示new Error('test')信息,然后显示game over。ret的值为{done:true}

 

// for...of语句

enumerator = enumerable('hello')

for(ret of enumerator)

 console.log(JSON.stringify(ret));

 

优化了“尾调用(Tail Calls)”

@desc:

一直到ES5,函数递归调用过多会导致栈溢出(到达内存上限),这是因为函数每次调用自己时都会调用一个新版本。但优化之后,每次调用会同上次调用共享同一个上下文,保证了内存使用率的稳定。 

 

安装babel-node,运行es6

 

 

sublime BuildSystem:

{

    "path": "/usr/local/bin",

    "working_dir": "${project_path:${folder}}",

    "selector": "source.js",

    "encoding": "utf-8",

    "shell": true,

    "windows": {

        "cmd": ["taskkill /f /im node.exe >nul 2>nul & babel-node $file"]

    },

    "osx": {

        "cmd": ["killall node >/dev/null 2>&1; babel-node $file"]

    },

    "linux": {

        "cmd": ["killall node >/dev/null 2>&1; babel-node $file"]

    }

}

 

分享到:
评论

相关推荐

    三ES6新特性.pdf

    ES6新特性中比较突出的包括: 1. const关键字:使用const声明的常量具有块级作用域,一旦赋值后不可更改。在声明常量时必须立即初始化,否则后续尝试赋值会引发错误。 2. let关键字:let关键字允许声明块级作用域...

    ES6新特性,看这就够了.pdf

    ES6(ECMAScript 2015)是JavaScript语言的一个重大更新版本,它带来了许多新特性,提高了开发效率和编程的便利性。在本篇文章中,我们将详细探讨几个ES6的关键新特性:let和const关键字、字符串的扩展、解构表达式...

    ES6 新特性示例代码.zip

    这个压缩包"ES6 新特性示例代码.zip"包含了与ES6新特性相关的代码示例,帮助我们更直观地理解这些特性。以下是对这些特性的详细解释: 1. **let 和 const 声明**: - `let` 用于块级作用域变量声明,解决了之前`...

    JavaScript ES6新增特性

    JavaScript ES6新增特性

    ES6新特性.docx

    ES6新特性.docx

    ES6新特性思维导图

    查看我整理的ES新特性思维导图,参照思维导图可以宏观角度来学习ES6的新特性。配合Day05-Day07进行学习效果更佳

    前端开发之ES6新特性

    前端开发之ES6新特性

    es6新特性 学习word版2018最新

    新特性 let、const let 定义的变量不会被变量提升,const 定义的常量不能被修改,let 和 const 都是块级作用域 ES6前,js 是没有块级作用域 {} 的概念的。(有函数作用域、全局作用域、eval作用域) ES6后,...

    ES6新特性小小简单总结.md

    ES6新特性的一个笔记总结

    JavaScript:ES6新特性深入解析.docx

    JavaScript:ES6新特性深入解析.docx

    JavaScript:ES6新特性深入解析

    #### 二、ES6的主要新特性概览 ES6 引入了多项新特性,这些特性大大增强了 JavaScript 的功能性和可读性。下面是一些关键特性的详细介绍: **2.1 箭头函数** 箭头函数是一种新的函数定义方式,其语法更为简洁,...

    es6的一些特性

    历时将近6年的时间来制定的新 ECMAScript 标准 ECMAScript 6, 这里摘取了ES6的一些新语法,新特性, 功能特别强大,个人感觉真的非常好用

    JavaScript:ES6新特性:类与模块教程.docx

    JavaScript:ES6新特性:类与模块教程.docx

    MooNkirA#code-learning-note#Day01-ES6新特性以及ReactJS入门1

    Day01-ES6新特性以及ReactJS入门1. ES6 新特性此部分内容为前端知识,详见《ECMAScript6 基础笔记》在线文档:JavaScript笔

    JavaScript:ES6新特性:模板字符串与解构赋值.docx

    JavaScript:ES6新特性:模板字符串与解构赋值.docx

    ES6新特性的部分示例代码

    这些只是ES6特性的一部分,还有像`Set`、`Map`、`WeakSet`、`WeakMap`等数据结构,以及`for...of`循环、`async/await`等更多内容,它们共同构成了ES6丰富的特性集合,使得JavaScript在前端开发中更具魅力。

    ES6新特性--变量的定义

    ES6新特性---变量的定义let、const!自己整理的资源,给大家分享!资源分数没有0,没办法!只能设置是1

    ES6新特性七:数组的扩充详解

    ES6新特性之数组的扩充详解主要介绍了ES6新特性之数组的扩充,结合实例形式分析了ES6数组操作的常见方法与相关使用技巧。 1. Array.from():将类似数组的对象或可遍历对象转换为真正的数组。它可以接受两个参数,第...

    JavaScript:ES6新特性:类与模块教程

    ### JavaScript:ES6新特性:类与模块教程 #### 一、引言 随着Web技术的发展,JavaScript作为前端开发的核心语言之一,也在不断地进化和完善。ECMAScript 6(简称ES6),是JavaScript的一种规范版本,它带来了一...

    ES6新特性以及ReactJS入门.zip

    以下是一些重要的ES6特性: 1. **箭头函数**:箭头函数提供了更简洁的函数定义方式,如 `(params) => { return expression; }`,当只有一个参数时,括号可以省略,且如果表达式只有一行,花括号也可以省略。 2. **...

Global site tag (gtag.js) - Google Analytics