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 相关文章推荐
JS 获取浏览器和屏幕宽高等信息的实现思路及代码
Jul 31 Javascript
JS 打印界面的CSS居中代码适用所有浏览器
Mar 19 Javascript
jQuery基础知识小结
Dec 22 Javascript
JavaScript数据库TaffyDB用法实例分析
Jul 27 Javascript
jQuery获取某天的农历日期并判断是否除夕或新年的方法
Mar 01 Javascript
PHP实现记录代码运行时间封装类实例教程
May 08 Javascript
微信小程序实现多宫格抽奖活动
Apr 15 Javascript
JavaScript作用域、闭包、对象与原型链概念及用法实例总结
Aug 20 Javascript
生产制造追溯系统之再说条码打印
Jun 03 Javascript
vue中使用百度脑图kityminder-core二次开发的实现
Sep 26 Javascript
JavaScript设计模型Iterator实例解析
Jan 22 Javascript
JavaScript实现省份城市的三级联动
Feb 11 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
第十四节--命名空间
2006/11/16 PHP
php-cli简介(不会Shell语言一样用Shell)
2013/06/03 PHP
探讨PHP使用eAccelerator的API开发详解
2013/06/09 PHP
PHP语法自动检查的Vim插件
2014/08/11 PHP
php+mysql查询优化简单实例
2015/01/13 PHP
Thinkphp5.0 框架Model模型简单用法分析
2019/10/11 PHP
jquery中 $.expr使用实例介绍
2014/06/09 Javascript
js读取cookie方法总结
2014/10/31 Javascript
JavaScript实现图片DIV竖向滑动的方法
2015/04/25 Javascript
基于jquery实现页面滚动到底自动加载数据的功能
2015/12/19 Javascript
vue-router:嵌套路由的使用方法
2017/02/21 Javascript
原生JS实现ajax与ajax的跨域请求实例
2017/12/01 Javascript
关于vue-cli 3配置打包优化要点(推荐)
2019/04/22 Javascript
vue中利用Promise封装jsonp并调取数据
2019/06/18 Javascript
Android 自定义view仿微信相机单击拍照长按录视频按钮
2019/07/19 Javascript
Vue数字输入框组件示例代码详解
2020/01/15 Javascript
[03:42]2014DOTA2西雅图国际邀请赛 Navi战队巡礼
2014/07/07 DOTA
Nginx搭建HTTPS服务器和强制使用HTTPS访问的方法
2015/08/16 Python
详解Python3中字符串中的数字提取方法
2017/01/14 Python
Python与人工神经网络:使用神经网络识别手写图像介绍
2017/12/19 Python
Windows下PyCharm2018.3.2 安装教程(图文详解)
2019/10/24 Python
Python 字符串处理特殊空格\xc2\xa0\t\n Non-breaking space
2020/02/23 Python
Python进程的通信Queue、Pipe实例分析
2020/03/30 Python
Python爬虫之Spider类用法简单介绍
2020/08/04 Python
详解pycharm自动import所需的库的操作方法
2020/11/30 Python
基于HTML5陀螺仪实现ofo首页眼睛移动效果的示例
2017/07/31 HTML / CSS
Ann Taylor官方网站:美国最大的女性产品制造商之一
2016/09/14 全球购物
应届生文秘专业个人自荐信格式
2013/09/21 职场文书
医学院校毕业生自荐信范文
2014/01/01 职场文书
安全横幅标语
2014/06/09 职场文书
公司自我介绍演讲稿
2014/08/21 职场文书
党员教师四风问题对照检查材料
2014/09/26 职场文书
军人离婚协议书样本
2014/10/21 职场文书
依法行政工作汇报
2014/10/28 职场文书
学校重阳节活动总结
2015/03/24 职场文书
Jackson 反序列化时实现大小写不敏感设置
2021/06/29 Java/Android