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 相关文章推荐
IE8 引入跨站数据获取功能说明
Jul 22 Javascript
JS匀速运动演示示例代码
Nov 26 Javascript
js中的关联数组与普通数组详解
Jul 27 Javascript
AngularJS中$injector、$rootScope和$scope的概念和关联关系深入分析
Jan 19 Javascript
原生JavaScript实现Tooltip浮动提示框特效
Mar 07 Javascript
js制作简单的音乐播放器的示例代码
Aug 28 Javascript
angularJs中orderBy筛选以及filter过滤数据的方法
Sep 30 Javascript
微信小程序图表插件wx-charts用法实例详解
May 20 Javascript
Vuex新手的理解与使用详解
May 31 Javascript
JavaScript实现背景自动切换小案例
Sep 27 Javascript
在Vue项目中,防止页面被缩放和放大示例
Oct 28 Javascript
简单使用webpack打包文件的实现
Oct 29 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
espresso double下 咖啡粉超细时 饼压力对咖啡的影响
2021/03/03 冲泡冲煮
PHP 5.0 Pear安装方法
2006/12/06 PHP
迅速确定php多维数组的深度的方法
2014/01/07 PHP
php中simplexml_load_string使用实例分享
2014/02/13 PHP
查找php配置文件php.ini所在路径的二种方法
2014/05/26 PHP
DOMAssitant最新版 DOMAssistant 2.5发布
2007/12/25 Javascript
Jquery替换已存在于element上的event的方法
2010/03/09 Javascript
JS清除IE浏览器缓存的方法
2013/07/26 Javascript
jQuery之选项卡的简单实现
2014/02/28 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
2014/09/26 Javascript
AngularJS中取消对HTML片段转义的方法例子
2015/01/04 Javascript
jquery Easyui快速开发总结
2015/08/20 Javascript
Backbone.js框架中Model与Collection的使用实例
2016/05/07 Javascript
微信小程序 less文件编译成wxss文件实现办法
2016/12/05 Javascript
AngularJS双向绑定和依赖反转实例详解
2017/04/15 Javascript
vue-swiper的使用教程
2018/08/30 Javascript
JavaScript碎片—函数闭包(模拟面向对象)
2019/03/13 Javascript
详解如何更好的使用module vuex
2019/03/27 Javascript
angular4应用中输入的最小值和最大值的方法
2019/05/17 Javascript
js如何获取访问IP、地区、当前操作浏览器
2019/07/23 Javascript
electron实现静默打印的示例代码
2019/08/12 Javascript
[01:10]为家乡而战!完美世界城市挑战赛全国总决赛花絮
2019/07/25 DOTA
Python中的迭代器漫谈
2015/02/03 Python
举例介绍Python中的25个隐藏特性
2015/03/30 Python
在Python的while循环中使用else以及循环嵌套的用法
2015/10/14 Python
利用python获取当前日期前后N天或N月日期的方法示例
2017/07/30 Python
pandas 空的dataframe 插入列名的示例
2018/10/30 Python
Python实现名片管理系统
2020/02/14 Python
解决导入django_filters不成功问题No module named 'django_filter'
2020/07/15 Python
详解修改Anaconda中的Jupyter Notebook默认工作路径的三种方式
2021/01/24 Python
如何用Python徒手写线性回归
2021/01/25 Python
html5 canvas绘制网络字体的常用方法
2019/08/26 HTML / CSS
英国IT硬件供应商,定制游戏PC:Mesh Computers
2019/03/28 全球购物
工程监理应届生求职信
2013/11/09 职场文书
不遵守课堂纪律的检讨书
2014/09/24 职场文书
如何解决goland,idea全局搜索快捷键失效问题
2022/04/03 Golang