ECMAScript6轮播图实践知识总结


Posted in Javascript onAugust 17, 2016

模板字符串

这是我非常喜欢的ES6的特点之一,非常直观的反应出变量和字符串之间的关系,在ES5中,如果我们想在字符串中添加变量,需要用如下写法:

animate(box, 'translate(-' + itemWidth * num + 'px,0)', 1000, function () {
  box.style.transitionDuration = '';
  box.style.transform = 'translate(-800px,0)';
  flag = true;
});

现在用ES6的模板字符串,可以直接把字符串和变量相结合,更加易懂。

animate(box, `translate(-${itemWidth*num}px,0)`, 1000, function() {
  box.style.transitionDuration = '';
  box.style.transform = `translate(-${itemWidth*(item.length-2)}px,0)`;
  flag = true;
});

是不是非常直观方便,从上面的两个简单示例中可以看出,在ES6中,字符串用反引号(``)标识,这一点需要知道。

还有一个特点,模板字符串可以输出折行的字符串,这在ES5传统字符串中是无法做到的,必须借助(\n),且不能在书写时候写入回车,但是在ES6的字符串模板中,可以直接写入回车,空格,然后在字符串输出时候直接输出,非常方便。

let myString=`abc
de
ffff 
fas`;
console.log(myString);
/*输出abc
de
ffff 
fas*/

对函数的扩展

1.给函数设置默认值

在对函数的扩展中,添加了一项给函数设置默认值的功能,这个功能可以说是非常赞的。是否记得我们在ES5中是怎么给函数设置默认值?

function test(a,b,c){
  var a=a||10;
  var a=b||15;
  var c=c||20;
  console.log(a+b+c);
}

这里我们设置默认值,可以达到自己的预期效果,直到有一天,我们把a=0传入,这时候,我们这么写就不对了,对于程序来说,0就是false,所以a会取默认值10,从而达不到我们预期的效果。但是ES6为我们提供非常好的设置默认值的方式。上面的代码可以改写成下面的这样:

function test(a=10,b=15,c=20){
  console.log(a+b+c);
}

2.箭头函数

了解Coffescript的同学应该清楚,Cofficescript的强大之处在于它的无处不在的箭头函数,写起来非常爽,现在,ES6正式引入箭头函数,让我们的程序可以得到简化,例如:

//ES5的写法
var test = function (a,b){
  return a+b;
}
//ES6的箭头函数
var test2 = test(a,b)=>a+b;

在写轮播时候,需要鼠标移动到下面的这个小圆点在小圆点类数组对象中是第几个,从而才能让图运动到正确位置,在ES5的时候,我们需要给当前这个对象添加属性,写起来比较繁琐,写法如下:

var liList = document.querySelectorAll('li');
for(var i=0;i<liList.length;i++){
  liList[i].index=i;
  liList[i].addEventListener('mouseenter',function(){
    console.log(this.index);
  },false);
}

这个this.index属性就是当前的鼠标放上去的元素的索引,然后根据这个索引去得到当前的元素。但是在ES6中,我们可以直接使用箭头函数以及在数组中新引入的findIndex来找到当前的活动元素的索引,代码如下:

let liList = document.querySelectorAll('li');
let ArrayliList=Array.form(liList);
for(var i=0;i<liList.length;i++){
  liList[i].index=i;
  liList[i].addEventListener('mouseenter',function(){
    let thisIndex = ArrayliList.findIndex((n) => n == this);
  },false);
}

以上代码得到的thisIndex就是当前鼠标放上去的索引,这里我对箭头函数中n这个参数的理解是,传入参数n后会遍历数组中的对象,从而找到与this相等的那个对象,然后返回它的索引,这里用到Array.from(),这是一个ES6中数组中新增的方法,可以将类数组转换成数组。

ES6的for…of循环

上面的JS代码循环用了for,其实可以用ES6中的for…of循环去代替,这样写法更加简洁。是否记得JS中的for…in循环,这个循环可以循环键值对中的键,但是无法循环值,而for…of的出现正是为了弥补它的不足,for…of循环可以使用的范围包括数组、Set和Map结构、某些类似数组的对象(比如arguments对象、DOM NodeList对象)、Generator对象,以及字符串。所以我们可以利用该循环替代for循环,但是这里要注意一点如果直接用for…of循环,在chrome49下会报错,官方已证实这是chrome49的BUG,将会在chrome51中修复,所以我在写的时候,利用Array.from()将NodeList对象转换为数组,这样可以放心操作,代码如下:

let liList = document.querySelectorAll('li');
let ArrayliList=Array.form(liList);
for(let li of liList){
  li.addEventListener('mouseenter',function(){
    let thisIndex = ArrayliList.findIndex((n) => n == this);
  },false);
}

总结

以上就是本文的全部内容,是不是非常简洁,通过这篇文章感觉仅仅只是这些就已经让我感受到ES6的魅力了,希望对大家学习ES6能有所帮助。

Javascript 相关文章推荐
xheditor与validate插件冲突的解决方案
Apr 15 Javascript
jquery中的事件处理详细介绍
Jun 24 Javascript
如何用javascript计算文本框还能输入多少个字符
Jul 29 Javascript
Jquery修改image的src属性,图片不加载问题的解决方法
May 17 Javascript
JS判断非空至少输入两个字符的简单实现方法
Jun 23 Javascript
微信小程序之页面跳转和参数传递的实现
Sep 29 Javascript
vue2.x+webpack快速搭建前端项目框架详解
Nov 30 Javascript
vue中当图片地址无效的时候,显示默认图片的方法
Sep 18 Javascript
node.js爬取中关村的在线电瓶车信息
Nov 13 Javascript
js实现页面多个日期时间倒计时效果
Jun 20 Javascript
微信小程序iBeacon测距及稳定程序的实现解析
Jul 31 Javascript
javascript设计模式 ? 桥接模式原理与应用实例分析
Apr 13 Javascript
jQuery 全选 全部选 反选 实现代码
Aug 17 #Javascript
AngularJS 自定义指令详解及示例代码
Aug 17 #Javascript
AngularJS 依赖注入详解及示例代码
Aug 17 #Javascript
AngularJS 服务详细讲解及示例代码
Aug 17 #Javascript
深入理解jQuery layui分页控件的使用
Aug 17 #Javascript
AngularJS 作用域详解及示例代码
Aug 17 #Javascript
jQuery Easyui使用(一)之可折叠面板的布局手风琴菜单
Aug 17 #Javascript
You might like
Ajax PHP 边学边练 之三 数据库
2009/11/26 PHP
PHP面向对象之事务脚本模式(详解)
2017/06/07 PHP
php实现微信公众号企业转账功能
2018/10/01 PHP
Laravel模糊查询区分大小写的实例
2019/09/29 PHP
formvalidator验证插件中有关ajax验证问题
2013/01/04 Javascript
JavaScript中的Primitive对象封装介绍
2014/12/31 Javascript
javascript面向对象之共享成员属性与方法及prototype关键字用法
2015/01/13 Javascript
JS动态创建DOM元素的方法
2015/06/09 Javascript
简单的JS时钟实例讲解
2016/01/13 Javascript
基于BootStrap Metronic开发框架经验小结【七】数据的导入、导出及附件的查看处理
2016/05/12 Javascript
JS公共小方法之判断对象是否为domElement的实例
2016/11/25 Javascript
jquery实现焦点轮播效果
2017/02/23 Javascript
Node.js查找当前目录下文件夹实例代码
2017/03/07 Javascript
Vuex之理解state的用法实例
2017/04/19 Javascript
vue音乐播放器插件vue-aplayer的配置及其使用实例详解
2017/07/10 Javascript
浅谈Vue render函数在ElementUi中的应用
2018/09/06 Javascript
layer页面跳转,获取html子节点元素的值方法
2019/09/27 Javascript
解决ant Design Search无法输入内容的问题
2020/10/29 Javascript
[53:13]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS LGD-GAMING
2014/05/22 DOTA
Python实现二叉树结构与进行二叉树遍历的方法详解
2016/05/24 Python
Python数据可视化编程通过Matplotlib创建散点图代码示例
2017/12/09 Python
关于Django显示时间你应该知道的一些问题
2017/12/25 Python
python 判断网络连通的实现方法
2018/04/22 Python
Python实现删除时保留特定文件夹和文件的示例
2018/04/27 Python
Python登录系统界面实现详解
2019/06/25 Python
python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer ui文件转py文件方法
2020/02/26 Python
python实现人脸签到系统
2020/04/13 Python
tensorflow 20:搭网络,导出模型,运行模型的实例
2020/05/26 Python
HTML5 客户端数据库简易使用:IndexedDB
2019/12/19 HTML / CSS
印度尼西亚最大的电商平台:Tokopedia(印尼版淘宝)
2017/12/02 全球购物
财务主管自我鉴定
2014/01/17 职场文书
运动会广播稿200米
2014/01/27 职场文书
外语专业毕业生自荐信
2014/04/14 职场文书
个人查摆问题自查报告
2014/10/16 职场文书
项目技术负责人岗位职责
2015/04/13 职场文书
Nginx代理Redis哨兵主从配置的实现
2022/07/15 Servers