??斗地主捕鱼电竞提现秒到 广告位招租 - 15元/月全站展示
??支付宝搜索579087183领大额红包 ??伍彩集团官网直营彩票
??好待遇→招代理 ??伍彩集团官网直营彩票
??络茄网 广告位招租 - 15元/月全站展示
10个最佳ECMAScript 6特性

转载   Fundebug   2018-11-15   浏览量:16


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

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

译者: Fundebug

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

小编推荐:Fundebug专注于JavaScript、微信小程序、微信小游戏,Node.js和Java线上bug实时监控。真的是一个很好用的bug监控服务,众多大佬公司都在使用。

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

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

  • 函数参数默认值
  • 模板字符串
  • 多行字符串
  • 解构赋值
  • 对象属性简写
  • 箭头函数
  • Promise
  • Let与Const
  • ??榛?/li>

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

使用"\n\t"将多行字符串拼接起来:

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

使用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

当需要获取某个对象的属性值时,需要单独获?。?/p>

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. ??榛?/h3>

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

参考链接

关于Fundebug

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

10个最佳ECMAScript 6特性

版权声明

转载时请注明作者Fundebug以及本文地址:

https://blog.fundebug.com/2017/08/21/10-best-es6-feature/

转载自://blog.51cto.com/13957060/2317423

招聘 不方便扫码就复制添加关注:程序员招聘谷,微信号:jobs1024



20个最常见的jQuery面试问题及答案
本篇文章给大家分享了20个最常见的jQuery面试问题及答案,对此有需要的朋友可以参考下。
在angular 6中使用 less 的实例代码
这篇文章主要介绍了在angular6中使用less的实例代码,非常不错,具有参考借鉴价值,需要的朋友可以参考下
JS的几个小测试错题改错
js测试错题分析
ES6基础之Array.fill函数
本文向你介绍ES6基础之Array.fill函数用法
js合并两个数组生成合并后的key:value数组
这篇文章主要是介绍了js将两个数组合并为类json方式,需要的朋友可以参考下
ES6关于Promise的用法详解
本篇文章主要介绍了ES6关于Promise的用法详解,详细的介绍了Promise的三种状态和方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
es6新特性之 class 基本用法解析
这篇文章主要介绍了es6新特性之class基本用法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
Vue.js最佳实践 五招助你成为vuejs大师
这篇文章主要介绍了Vue.js最佳实践,本文主要面向对象是有一定vue.js编辑经验的开发者,需要的朋友可以参考下
6、jQuery的Ajax与Java通过POST方式交互
1jQuerypost(url,[data],[callback],[type]):使用POST方式来进行异步请求11参数url(String):发送请求的URL地址data(Map):(可选)要发送
对于循环输出的按钮,使用jquery判断点击的是哪儿个按钮?并使用Ajax提交
需求:由于输出的每个用户都有两个按钮,一个是开通按钮,一个是收藏按钮,怎么判断点击是哪儿个按钮,并提交name属性的&20540;html代码js部分$(&039;btn&039;)live(&039;click&039;,function(){