资讯专栏INFORMATION COLUMN

10个最佳ES6特性

codeKK / 3093人阅读

摘要:,正式名称是,但是这个名称更加简洁。已经不再是最新的标准,但是它已经广泛用于编程实践中。而制定了模块功能。自从年双十一正式上线,累计处理了亿错误事件,得到了金山软件等众多知名用户的认可。

译者按: 人生苦短,我用ES6

原文: Top 10 ES6 Features Every Busy JavaScript Developer Must Know

译者: Fundebug

为了保证可读性,本文采用意译而非直译,并且对源代码进行了大量修改。另外,本文版权归原作者所有,翻译仅用于学习。

ES6,正式名称是ECMAScript2015,但是ES6这个名称更加简洁。ES6已经不再是JavaScript最新的标准,但是它已经广泛用于编程实践中。如果你还没用过ES6,现在还不算太晚...

下面是10个ES6最佳特性,排名不分先后:

函数参数默认值

模板字符串

多行字符串

解构赋值

对象属性简写

箭头函数

Promise

Let与Const

模块化

1. 函数参数默认值 不使用ES6

为函数的参数设置默认值:

function foo(height, color)
{
    var height = height || 50;
    var color = color || "red";
    //...
}

这样写一般没问题,但是,当参数的布尔值为false时,是会出事情的!比如,我们这样调用foo函数:

foo(0, "", "")

因为0的布尔值为false,这样height的取值将是50。同理color的取值为"red"

使用ES6
function foo(height = 50, color = "red")
{
    // ...
}
2. 模板字符串 不使用ES6

使用+号将变量拼接为字符串:

var name = "Your name is " + first + " " + last + "."
使用ES6

将变量放在大括号之中:

var name = `Your name is ${first} ${last}.`

ES6的写法更加简洁、直观。

3. 多行字符串 不使用ES6

使用"nt"将多行字符串拼接起来:

var roadPoem = "Then took the other, as just as fair,
	"
    + "And having perhaps the better claim
	"
    + "Because it was grassy and wanted wear,
	"
    + "Though as for that the passing there
	"
    + "Had worn them really about the same,
	"
使用ES6

将多行字符串放在反引号``之间就好了:

var roadPoem = `Then took the other, as just as fair,
    And having perhaps the better claim
    Because it was grassy and wanted wear,
    Though as for that the passing there
    Had worn them really about the same,`
4. 解构赋值 不使用ES6

当需要获取某个对象的属性值时,需要多带带获取:

var data = $("body").data(); // data有house和mouse属性
var house = data.house;
var mouse = data.mouse;
使用ES6

一次性获取对象的子属性:

var { house, mouse} = $("body").data()

对于数组也是一样的:

var [col1, col2]  = $(".column");
5. 对象属性简写 不使用ES6

对象中必须包含属性和值,显得非常多余:

var bar = "bar";
var foo = function ()
{
    // ...
}

var baz = {
  bar: bar,
  foo: foo
};
使用ES6

对象中直接写变量,非常简单:

var bar = "bar";
var foo = function ()
{
    // ...
}

var baz = { bar, foo };
6. 箭头函数 不使用ES6

普通函数体内的this,指向调用时所在的对象。

function foo() 
{
    console.log(this.id);
}

var id = 1;

foo(); // 输出1

foo.call({ id: 2 }); // 输出2
使用ES6

箭头函数体内的this,就是定义时所在的对象,而不是调用时所在的对象。

var foo = () => {
  console.log(this.id);
}

var id = 1;

foo(); // 输出1

foo.call({ id: 2 }); // 输出1
7. Promise 不使用ES6

嵌套两个setTimeout回调函数:

setTimeout(function()
{
    console.log("Hello"); // 1秒后输出"Hello"
    setTimeout(function()
    {
        console.log("Fundebug"); // 2秒后输出"Fundebug"
    }, 1000);
}, 1000);
使用ES6

使用两个then是异步编程串行化,避免了回调地狱:

var wait1000 = new Promise(function(resolve, reject)
{
    setTimeout(resolve, 1000);
});

wait1000
    .then(function()
    {
        console.log("Hello"); // 1秒后输出"Hello"
        return wait1000;
    })
    .then(function()
    {
        console.log("Fundebug"); // 2秒后输出"Fundebug"
    });
8. Let与Const 使用Var

var定义的变量未函数级作用域:

{
  var a = 10;
}

console.log(a); // 输出10
使用let与const

let定义的变量为块级作用域,因此会报错:(如果你希望实时监控JavaScript应用的错误,欢迎免费使用Fundebug)

{
  let a = 10;
}

console.log(a); // 报错“ReferenceError: a is not defined”

constlet一样,也是块级作用域。

9. 类 不使用ES6

使用构造函数创建对象:

function Point(x, y)
{
    this.x = x;
    this.y = y;
    this.add = function()
    {
        return this.x + this.y;
    };
}

var p = new Point(1, 2);

console.log(p.add()); // 输出3
使用ES6

使用Class定义类,更加规范,且你能够继承:

class Point
{
    constructor(x, y)
    {
        this.x = x;
        this.y = y;
    }

    add()
    {
        return this.x + this.y;
    }
}

var p = new Point(1, 2);

console.log(p.add()); // 输出3
10. 模块化

JavaScript一直没有官方的模块化解决方案,开发者在实践中主要采用CommonJSAMD规范。而ES6制定了模块(Module)功能。

不使用ES6

Node.js采用CommenJS规范实现了模块化,而前端也可以采用,只是在部署时需要使用Browserify等工具打包。这里不妨介绍一下CommenJS规范。

module.js中使用module.exports导出port变量和getAccounts函数:

module.exports = {
  port: 3000,
  getAccounts: function() {
    ...
  }
}

main.js中使用require导入module.js

var service = require("module.js")
console.log(service.port) // 输出3000
使用ES6

ES6中使用exportimport关键词实现模块化。

module.js中使用export导出port变量和getAccounts函数:

export var port = 3000
export function getAccounts(url) {
  ...
}

main.js中使用import导入module.js,可以指定需要导入的变量:

import {port, getAccounts} from "module"
console.log(port) // 输出3000

也可以将全部变量导入:

import * as service from "module"
console.log(service.port) // 3000
参考链接

ES6/ECMAScript2015 Cheatsheet(PDF)

Understanding ECMAScript 6

Exploring ES6

ECMAScript 6 入门

Javascript的this用法

关于Fundebug

Fundebug专注于JavaScript、微信小程序、微信小游戏、支付宝小程序、React Native、Node.js和Java实时BUG监控。 自从2016年双十一正式上线,Fundebug累计处理了6亿+错误事件,得到了Google、360、金山软件等众多知名用户的认可。欢迎免费试用!

版权声明

转载时请注明作者Fundebug以及本文地址:
https://blog.fundebug.com/2017/08/21/10-best-es6-feature/

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/85032.html

相关文章

  • 学习ES6

    摘要:学习定稿有两年多的时间了,断断续续通过一些博客,书籍也学到了很多知识。将各个部分的知识整理成一篇篇博文,以便于自己系统掌握和复习。整个系列主要参考了的深入理解,可以看作是对这本书的一个学习总结,也向大家强烈推荐这本书作为的学习书籍。 学习es6 es6定稿有两年多的时间了,断断续续通过一些博客,书籍也学到了很多es6知识。可以说,es6给js语言带来了非常大的改进,引进了很多好用的特性...

    wpw 评论0 收藏0
  • 人分享--web前端学习资源分享

    摘要:前言月份开始出没社区,现在差不多月了,按照工作的说法,就是差不多过了三个月的试用期,准备转正了一般来说,差不多到了转正的时候,会进行总结或者分享会议那么今天我就把看过的一些学习资源主要是博客,博文推荐分享给大家。 1.前言 6月份开始出没社区,现在差不多9月了,按照工作的说法,就是差不多过了三个月的试用期,准备转正了!一般来说,差不多到了转正的时候,会进行总结或者分享会议!那么今天我就...

    sherlock221 评论0 收藏0
  • 你不知道的JavaScript(ES6与之未来)

    摘要:然而,临近规范发布时,有建议提及未来的版本号切换为编年制,比如用同来指代在年末前被定稿的所有版本。总得来说就是版本号不再那么重要了,开始变得更像一个万古长青的活标准。 你不知道的JS(下卷)ES6与之未来 第一章:ES的今与明 在你想深入这本书之前,你应该对(在读此书时)JavaScript的最近标准掌握熟练,也就是ES5(专业来说是ES 5.1)。在此,我们决定全方面地谈论关于将近的...

    Julylovin 评论0 收藏0
  • 专治前端焦虑的学习方案

    摘要:不过今天我希望能够更进一步,不仅仅再抱怨现状,而是从我个人的角度来给出一个逐步深入学习生态圈的方案。最后,我还是想提到下对于的好的学习方法就是回顾参照各种各样的代码库,学习人家的用法与实践。 本文翻译自A-Study-Plan-To-Cure-JavaScript-Fatigue。笔者看到里面的几张配图着实漂亮,顺手翻译了一波。本文从属于笔者的Web Frontend Introduc...

    codeGoogle 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<