ES6中非常实用的新特性介绍


Posted in Javascript onMarch 10, 2016

ECMAScript 6离我们越来越近了,作为它最重要的方言,Javascript也即将迎来语法上的重大变革,InfoQ特开设“深入浅出ES6”专栏,来看一下ES6将给我们带来哪些新内容。

写在前面

ES6 已经提交给 Ecma 大会审查了,也就是说,我们将迎来一大波 javascript 的最新标准,还有一些语法糖。ES6 中有很多值得我们关注的东西,下面是我发现的一些我们最常用的一些新特性,进行记录一下。

1. for-of循环

这个东西用来循环数组很爽,原因呢,是因为它弥补了目前 es5 中循环数组的一切缺陷。

比如 for-in,它会遍历数组对象的附加属性,而不仅仅是遍历数组值。还有一点是,for-in 中的索引是 string 类型的,这一点尤其重要。

var arrObj=['alexchen',1,{}];
arrObj._name='attr-AlexChen';
for(var i in arrObj){
console.log(arrObj[i]) // 会把_name属性也遍历出来 
console.log(typeof(i)) // 全部输出 string
}

当然我们还有 forEach() 函数,它也有问题,比如你不能在里面 break return 之类的:

var arrObj = ['alexchen','boy','great'];
arrObj.forEach(function (v) {
if (v == 'boy') {
return 'can not return';
}
console.log(v) //会输出alexchen great
})

这样看起来要比 for-in 简便很多。但就像上面说的一样,它有也有不足的地方。那么我们来试试 for-of 吧:

var arrObj = ['alexchen',1,{}];
arrObj._name = 'attr-alexchen';
for (var i of arrObj) {
console.log(i);//这里只会输出,alexchen,1,object{},不会输出attr-alexchen
console.log(typeof(i))//这里会输出 string,number,object
if (i == 1) {
break;
}
console.log(i)//只会输出 alexchen,满足条件之后就不在继续循环,提高了效率并且可以自由控制跳出循环或继续循环
}

可以看到:

当使用 for-of 的时候,循环的是数组内部的元素且不会出现 for-in 中将附加属性也遍历的情况,其次,循环变量的类型和其在数组中的类型保持一致,而不是全部是 string 的情况。

就这两点就值得我们选择 for-of 而不是 forEach() 或 for-in 当然,现在还有些浏览器不支持。不过以上代码可以在最新版本的 FireFox 执行成功并得到预期结果。当然 for-of 并不是只在数组上使用,你可以用在任何类数组类型的对象上,比如 DOM NodeList, 字符串 等。

2. 模版字符串

这个东西也非常好玩,用在字符串拼接的地方。从名称上我们就知道是干啥的了。在前端开发过程中难免会遇到要动态拼接字符串的情况(动态dom生成,数据格式化)等:

(function sayHello(name, words) { 
console.log(`hello: ${name},welcome es6,your words is: ${words}`); //
})('alexchen','im admin')//运行之后将会输出:hello: alexchen,welcome es6,your words is: im admin

注意,被当作模版的字符串使用 ` 号包裹的。其中 $(paramenter) 是占位符,而且支持对象,eg:$(obj.name) 这种形式。与普通字符串相比模版字符串可以写成多行而不需要用 + 连接:

hello:$(name),
welcome es6,
your words is $(words)

值得注意的是,模版字符串不会转义特殊字符,因此需要自己处理其中的安全隐患。模版字符串并不能够代替模版框架,原因是模版字符串没有内置的循环语法和条件语句。因此,对于常规的普通的字符串拼接,我们可以使用它来完成,会让你的代码看起来更酷一点。PS(除此之外,我觉得它并没有什么卵用。ψ(?_?))

这里有更详细的介绍来解决上面说道的没有内置循环和判断分支的问题:

es6-模版字符串-mozilla

3. 默认参数(Defaults parameters)

这个有点意思,是这样的,我们都知道 js 函数是不需要给函数参数设置默认值的,比如如下代码会报错:

(function(a=0,b=0){return a+b;})(1,2)//不支持es6的浏览器下会报错的SyntaxError: Unexpected token =

这也就意味着,我们的参数不能给默认值,如果需要给参数默认值就需要在函数内部判断其是否为 undefined 的方式来处理。然而在 ES6 中呢,我们可以给参数设置默认值,而不用在函数内部去判断后赋默认值,不但可以赋值默认值,还可以使用运算表达式,如下:

(function testDefaultsParams(pars1 = "alexchen",
pars2 = (pars1 == "alexchen") ? "admin" : "not admin") {
console.log(`welcome ${pars1} ,u r ${pars2}!!`)//用到了上面说的模版字符串
})();
/**参数为空时输出,welcome alexchen ,u r admin!!,
如果第一个参数不是alexchen则输出,welcome alexchen ,u r not admin!!**/

这种方式在编写代码时非常的简便,和动态语言一样,比如 c# 中。这样既直观,又方便。所以用起来还是很不错的。还一个剩余参数(Rest parameters),笔者没发现有什么特别的用处,因此就不写啦,感兴趣的可以去看看

默认参数和剩余参数-mozilla

ES6 中还有很多新特性和语法。感兴趣的可以看一下 mozilla 团队的博客,里面有很详细的介绍,而且是系列文章。

mozilla-ES6-系列介绍

好了,以上就是我在 ES6 中发现的三个比较实用的新东西,这三个应该是日常开发中用的最多的了,在此做个记录。

关于ES6中非常实用的新特性介绍就给大家介绍这么多,希望对大家有所帮助!

Javascript 相关文章推荐
基于jquery的tab切换 js原理
Apr 01 Javascript
JavaScript内核之基本概念
Oct 21 Javascript
JavaScript中的细节分析
Jun 30 Javascript
在Iframe中获取父窗口中表单的值(示例代码)
Nov 22 Javascript
浅析JavaScript原型继承的陷阱
Dec 03 Javascript
用javascript关闭本窗口技巧小结
Sep 05 Javascript
jquery中用函数来设置css样式
Dec 22 Javascript
vue使用vue-i18n实现国际化的实现代码
Apr 08 Javascript
vue子传父关于.sync与$emit的实现
Nov 05 Javascript
Vue中常用rules校验规则(实例代码)
Nov 14 Javascript
vue路由缓存的几种实现方式小结
Feb 02 Javascript
在vue中使用image-webpack-loader实例
Nov 12 Javascript
ES6的新特性概览
Mar 10 #Javascript
JavaScript字符串常用的方法
Mar 10 #Javascript
javascript中call apply 与 bind方法详解
Mar 10 #Javascript
angularjs表格ng-table使用备忘录
Mar 09 #Javascript
详解AngularJS控制器的使用
Mar 09 #Javascript
JQuery Mobile实现导航栏和页脚
Mar 09 #Javascript
javascript基本算法汇总
Mar 09 #Javascript
You might like
一个捕获函数输出的函数
2007/02/14 PHP
使用PHP获取当前url路径的函数以及服务器变量
2013/06/29 PHP
PHP多维数组遍历方法(2种实现方法)
2015/12/10 PHP
PHP执行shell脚本运行程序不产生core文件的方法
2016/12/28 PHP
php-beanstalkd消息队列类实例分享
2017/07/19 PHP
Laravel5.4框架使用socialite实现github登录的方法
2019/03/20 PHP
Prototype源码浅析 String部分(四)之补充
2012/01/16 Javascript
写出高效jquery代码的19条指南
2014/03/19 Javascript
Javascript排序算法之合并排序(归并排序)的2个例子
2014/04/04 Javascript
jquery淡化版banner异步图片文字效果切换图片特效
2014/04/08 Javascript
fckeditor粘贴Word时弹出窗口取消的方法
2014/10/30 Javascript
基于JavaScript如何实现ajax调用后台定义的方法
2015/12/29 Javascript
WebApi+Bootstrap+KnockoutJs打造单页面程序
2016/05/16 Javascript
在Mac OS上安装使用Node.js的项目自动化构建工具Gulp
2016/06/18 Javascript
jQuery实现的placeholder效果完整实例
2016/08/02 Javascript
jQuery+HTML5实现WebGL高性能烟花绽放动画效果【附demo源码下载】
2017/08/18 jQuery
js断点调试经验分享
2017/12/08 Javascript
vue中导出Excel表格的实现代码
2018/10/18 Javascript
[02:23]2016国际邀请赛中国区预选赛wings晋级之路
2016/06/29 DOTA
Python处理JSON数据并生成条形图
2016/08/05 Python
Python实现朴素贝叶斯分类器的方法详解
2018/07/04 Python
python查看模块,对象的函数方法
2018/10/16 Python
Pytorch提取模型特征向量保存至csv的例子
2020/01/03 Python
tensorboard实现同时显示训练曲线和测试曲线
2020/01/21 Python
使用Keras画神经网络准确性图教程
2020/06/15 Python
HTML+CSS3 模仿Windows7 桌面效果
2010/06/17 HTML / CSS
印度服装购物网站:Limeroad
2018/09/26 全球购物
高级方案规划工程师岗位职责
2013/11/29 职场文书
资产经营总监岗位职责
2013/12/04 职场文书
优秀广告词大全
2014/03/19 职场文书
房地产活动策划方案
2014/05/14 职场文书
预备党员学习十八届三中全会精神思想汇报
2014/09/13 职场文书
nginx proxy_cache 缓存配置详解
2021/03/31 Servers
Python使用OpenCV和K-Means聚类对毕业照进行图像分割
2021/06/11 Python
Java中常用解析工具jackson及fastjson的使用
2021/06/28 Java/Android
分享几个实用的CSS代码块
2022/06/10 HTML / CSS