前端开发不得不知的10个最佳ES6特性


Posted in Javascript onAugust 30, 2017

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

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

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

  • 函数参数默认值
  • 模板字符串
  • 多行字符串
  • 解构赋值
  • 对象属性简写
  • 箭头函数
  • Promise
  • Let与Const
  • 模块化
  • 函数参数默认值
  • 不使用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')
{
 // ...
}

模板字符串

不使用ES6

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

var name = 'Your name is ' + first + ' ' + last + '.'

使用ES6

将变量放在大括号之中:

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

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

多行字符串

不使用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,`

解构赋值

不使用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');

对象属性简写

不使用ES6

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

var bar = 'bar';
var foo = function ()
{
 // ...
}
var baz = {
 bar: bar,
 foo: foo
};

使用ES6

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

var bar = 'bar';
var foo = function ()
{
 // ...
}
var baz = { bar, foo };

箭头函数

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

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"
 });

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”

const与let一样,也是块级作用域。

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

模块化

JavaScript一直没有官方的模块化解决方案,开发者在实践中主要采用CommonJS和AMD规范。而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中使用export与import关键词实现模块化。

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

总结

以上所述是小编给大家介绍的前端开发不得不知的10个最佳ES6特性,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
通过Jscript中@cc_on 语句识别IE浏览器及版本的代码
May 07 Javascript
javascript利用apply和arguments复用方法
Nov 25 Javascript
详谈LABJS按需动态加载js文件
May 07 Javascript
js实现仿Windows风格选项卡和按钮效果实例
May 13 Javascript
深入浅析Extjs中store分组功能的使用方法
Apr 20 Javascript
基于Bootstrap的UI扩展 StyleBootstrap
Jun 17 Javascript
谈谈JavaScript中的几种借用方法
Aug 09 Javascript
浅谈JS中的bind方法与函数柯里化
Aug 10 Javascript
微信小程序  wx.request合法域名配置详解
Nov 23 Javascript
Vue 表单控件绑定的实现示例
Aug 11 Javascript
详解Vue改变数组中对象的属性不重新渲染View的解决方案
Sep 21 Javascript
canvas绘制折线路径动画实现
May 12 Javascript
vue.js的手脚架vue-cli项目搭建的步骤
Aug 30 #Javascript
for循环 + setTimeout 结合一些示例(前端面试题)
Aug 30 #Javascript
详解使用nvm管理多版本node的方法
Aug 30 #Javascript
jquery插件开发之选项卡制作详解
Aug 30 #jQuery
浅谈angular.js跨域post解决方案
Aug 30 #Javascript
详解a++和++a的区别
Aug 30 #Javascript
详解vue2.0 使用动态组件实现 Tab 标签页切换效果(vue-cli)
Aug 30 #Javascript
You might like
不用GD库生成当前时间的PNG格式图象的程序
2006/10/09 PHP
关于PHPDocument 代码注释规范的总结
2013/06/25 PHP
php中的PHP_EOL换行符详细解析
2013/10/26 PHP
Linux系统递归生成目录中文件的md5的方法
2015/06/29 PHP
PHP7 mongoDB扩展使用的方法分享
2019/05/02 PHP
javascript验证身份证完全方法具体实现
2013/11/18 Javascript
JavaScript实现Flash炫光波动特效
2015/05/14 Javascript
鼠标悬停小图标显示大图标
2016/01/22 Javascript
jquery获取easyui日期控件的值实现方法
2016/11/09 Javascript
详解nodeJS中读写文件方法的区别
2017/03/06 NodeJs
js实现百度登录框鼠标拖拽效果
2017/03/07 Javascript
微信小程序与php 实现微信支付的简单实例
2017/06/23 Javascript
从源码里了解vue中的nextTick的使用
2018/11/22 Javascript
Jquery遍历筛选数组的几种方法和遍历解析json对象,Map()方法详解以及数组中查询某值是否存在
2019/01/18 jQuery
微信小程序 网络通信实现详解
2019/07/23 Javascript
VUE实现强制渲染,强制更新
2019/10/29 Javascript
JS实现放大镜效果
2020/09/21 Javascript
js基于canvas实现时钟组件
2021/02/07 Javascript
Python实现批量下载文件
2015/05/17 Python
使用python在本地电脑上快速处理数据
2017/06/22 Python
python DataFrame获取行数、列数、索引及第几行第几列的值方法
2018/04/08 Python
python实现音乐下载器
2018/04/15 Python
Django框架模型简单介绍与使用分析
2019/07/18 Python
python TK库简单应用(实时显示子进程输出)
2019/10/29 Python
Python获取统计自己的qq群成员信息的方法
2019/11/15 Python
python——全排列数的生成方式
2020/02/26 Python
Python操作MongoDb数据库流程详解
2020/03/05 Python
python递归调用中的坑:打印有值, 返回却None
2020/03/16 Python
Python ckeditor富文本编辑器代码实例解析
2020/06/22 Python
护理学毕业生求职信
2013/11/14 职场文书
基层党组织公开承诺书
2014/03/28 职场文书
领导班子对照检查剖析材料
2014/10/13 职场文书
2015毕业生简历自我评价
2015/03/02 职场文书
幼儿园科学课教学反思
2016/03/03 职场文书
工作总结之小学教师体育工作范文(3篇)
2019/10/07 职场文书
浅谈Laravel中使用Slack进行异常通知
2021/05/29 PHP