Javascript 6里的4个新语法


Posted in Javascript onAugust 25, 2016

JS 的 ES6版本已经被各大浏览器广泛支持,很多前端框架也已经使用 ES6,并且还有 Babel 可以做兼容处理,所以ES6已经进入了应用阶段

如果您对 ES6 还不太熟悉,下面4个简单的基础用法可以帮助您快速了解ES6

1.使用 let 和 const 声明变量
在传统的 ES5 代码中,变量的声明有两个主要问题

(1)缺少块儿作用域的支持

(2)不能声明常量

ES6中,这两个问题被解决了,增加了两个新的关键字:let 和 const

块儿作用域使用 let

var a = 1;
if (true) {
  var b = 2;
}
console.log(a); // 1
console.log(b); // 2

ES5 中 if 块儿内声明的变量 b 可以在块儿外访问

// in ES6
let a = 1;
if (true) {
  let b = 2;
}
console.log(a); // 1
console.log(b); // ReferenceError: b is not defined

ES6 中 if 块儿内使用 let 声明的变量 b 不能在块儿外访问

下面这段代码是常见的一个比较迷惑人的情况

var a = [];
for (var i=0; i< 5; i++) {
  a.push(function() {
    console.log(i);
  });
}
a.forEach(function(value) {
  value();
});

运行结果是:5, 5, 5, 5, 5

使用 let 声明循环中的变量 i

var b = []; 
for ( let i=0; i< 5; i++) {
  b.push(function() {
    console.log(i);
  });
}
b.forEach(function(value) {
  value();
});

运行结果是:0, 1, 2, 3, 4

定义常量使用 const

// in ES5

var MY_CONSTANT = true;

MY_CONSTANT = false;

ES5 中不能定义常量,值可以被改,只能靠我们自己来保证

// in ES6
const MY_CONSTANT = true;
MY_CONSTANT = false; // Uncaught TypeError: Assignment to constant variable

ES6 中使用 const 声明的常量是不可以被改的

2.模板字符串
下面这种字符串与变量的拼接方式是比较常见的

var url = ‘http://www.' + domain + ‘.com/' + path + ‘?' + queryParams;
ES6 提供了简洁的用法

let url = `http://www.${domain}.com/${path}?${queryParams}`;

3.新的 Set 和 Map 对象
ES5 中我们经常使用数组来存储动态数据,例如

var collection = [];
collection.push(1, 2, 1);
console.log(collection); // [ 1, 2, 1]

其中包含了重复数据,如果不想有重复数据,需要使用代码判断

function addToCollection(collection, value) {

  if (collection.indexOf(value) < 0) {

    collection.push(value)

  }

}

ES6 提供了 Set 对象,处理这个情况就方便多了

let collection = new Set();
collection.add(1);
collection.add(2);
collection.add(1);
console.log(collection); // Set {1, 2}

Set 还可以方便的遍历集合,和处理集合中的数据

ES5 中通常使用 object 来存储键值对数据,例如

var collection = {};
collection.a = ‘abc';
collection.b = ‘xyz';

ES6 有了 Map,就可以这样使用

let collection = new Map();
collection.set(‘a', ‘abc');
collection.set(‘b', ‘xyz');

遍历也很简单

collection.forEach(function(value, key) {
  console.log(key + ":" + value);
});
console.log(collection.size);

4.函数参数
ES6 中函数的参数有两个新特性

默认值

function doSomething(someObject) {
  console.log(someObject);
}

这里有可能会出现运行时错误,需要验证参数

function doSomething(someObject) {
  if (someObject === undefined) {
    someObject = {};
  }
  console.log(someObject);

}

这类的验证代码非常普遍,ES6 中可以给参数设置默认值,就简单了很多

function doSomething(someObject = {}) {

  console.log(someObject);

}

对象解构

我们常会把一个包含键值对的对象做为参数传给某个函数,然后在函数内获取对象的各个属性

function doSomething(someObject) {
  var one = someObject.propOne;
  console.log(one);
  var two = someObject.propTwo;
  console.log(two);
  var three = someObject.propThree;
  console.log(three);

}

ES6 可以让我们直接在参数中解构对象参数

function doSomething({ propOne, propTwo, propThree }) {
  console.log(propOne);
  console.log(propTwo);
  console.log(propThree);

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
为jquery.ui.dialog 增加“在当前鼠标位置打开”的功能
Nov 24 Javascript
Javascript判断对象是否相等实现代码
Mar 18 Javascript
js 固定悬浮效果实现思路代码
Aug 02 Javascript
js操作模态窗口及父子窗口间相互传值示例
Jun 09 Javascript
JavaScript高级程序设计(第三版)学习笔记6、7章
Mar 11 Javascript
浅谈js内置对象Math的属性和方法(推荐)
Sep 19 Javascript
微信小程序之picker日期和时间选择器
Feb 09 Javascript
详解vue-cli构建项目反向代理配置
Sep 07 Javascript
JS中touchstart事件与click事件冲突的解决方法
Mar 12 Javascript
vuex state及mapState的基础用法详解
Apr 19 Javascript
微信小程序登录换取token的教程
May 31 Javascript
Js代码中的span拼接问题解决
Nov 22 Javascript
Javascript实现代码折叠功能
Aug 25 #Javascript
深入浅出ES6之let和const命令
Aug 25 #Javascript
PhotoSwipe异步动态加载图片方法
Aug 25 #Javascript
相册展示PhotoSwipe.js插件实现
Aug 25 #Javascript
移动端点击图片放大特效PhotoSwipe.js插件实现
Aug 25 #Javascript
手机端图片缩放旋转全屏查看PhotoSwipe.js插件实现
Aug 25 #Javascript
手机端 HTML5使用photoswipe.js仿微信朋友圈图片放大效果
Aug 25 #Javascript
You might like
php 无限级缓存的类的扩展
2009/03/16 PHP
最新的php 文件上传模型,支持多文件上传
2009/08/13 PHP
thinkphp5框架前后端分离项目实现分页功能的方法分析
2019/10/08 PHP
Prototype使用指南之selector.js
2007/01/10 Javascript
javascript 最常用的10个自定义函数[推荐]
2009/12/26 Javascript
鼠标滑在标题上显示图片的JS代码
2013/11/19 Javascript
jquery实现的图片点击滚动效果
2014/04/29 Javascript
JavaScript中的立即执行函数表达式介绍
2015/03/15 Javascript
javascript实现禁止复制网页内容汇总
2015/12/30 Javascript
Vue.js:使用Vue-Router 2实现路由功能介绍
2017/02/22 Javascript
第一个Vue插件从封装到发布
2017/11/22 Javascript
微信小程序实现美团菜单
2018/06/06 Javascript
JavaScript指定断点操作实例教程
2018/09/18 Javascript
解决vue页面渲染但dom没渲染的操作
2020/07/27 Javascript
vue 实现把路由单独分离出来
2020/08/13 Javascript
原生JS实现相邻月份日历
2020/10/13 Javascript
[02:29]大剑、皮鞭、女装,这届DOTA2勇士令状里都有
2020/07/17 DOTA
python对list中的每个元素进行某种操作的方法
2018/06/29 Python
对pandas处理json数据的方法详解
2019/02/08 Python
网易有道2017内推编程题 洗牌(python)
2019/06/19 Python
django删除表重建的实现方法
2019/08/28 Python
Python通过Tesseract库实现文字识别
2020/03/05 Python
tensorflow 2.0模式下训练的模型转成 tf1.x 版本的pb模型实例
2020/06/22 Python
CSS3 实现穿梭星空动画
2020/11/13 HTML / CSS
世界上最大的餐具公司:Oneida
2016/12/17 全球购物
英国领先的男士服装和时尚零售商:Burton
2017/01/09 全球购物
大学生毕业求职的自我评价
2013/09/29 职场文书
留学自荐信
2013/10/10 职场文书
环境工程求职简历的自我评价范文
2013/10/24 职场文书
蔬菜基地的创业计划书
2014/01/06 职场文书
销售助理岗位职责
2014/02/21 职场文书
个人安全承诺书
2014/05/22 职场文书
学校元旦晚会开场白
2015/05/29 职场文书
新闻通讯稿模板
2015/07/22 职场文书
社会心理学学习心得体会
2016/01/22 职场文书