ES6字符串模板,剩余参数,默认参数功能与用法示例


Posted in Javascript onApril 06, 2017

本文实例讲述了ES6字符串模板,剩余参数,默认参数功能与用法。分享给大家供大家参考,具体如下:

这里介绍一下字符串模板以及剩余参数,默认参数的概念以及使用。
先来说说字符串模板。

字符串模板

ES6中允许使用反引号 ` 来创建字符串,此种方法创建的字符串里面可以包含由美元符号加花括号包裹的变量${varible}。如果你使用过像C#等后端强类型语言的话,对此功能应该不会陌生。

//产生一个随机数
var num=Math.random();
//将这个数字输出到console
console.log(`your num is ${num}`);

可以看出来,字符串模板其实就是将JavaScript中常用的字符串拼接变得更加简单了一些。但是其实它还有一些不易让人察觉的作用:

1. 模板中可以继续套入一个模板;

2. 如果一个变量不是字符串,通过字符串模板它会变成字符串,就好像调用了.toString()方法一样;

但是同样的,有一些事情它也做不了:

1. 它不能自动转义,所以为了防止CORS攻击,我们还是要小心处理一些敏感数据;

2. 它不是用来取代其他js模板的,因为它没有关于循环的相关语法,而这些是其他js模板擅长的。

下图是字符串模板的使用示例:

ES6字符串模板,剩余参数,默认参数功能与用法示例

可以看到字符串模板中还可以解析函数,并且可以带参数。

剩余参数

接下来说说剩余参数,很多语言早就实现了剩余参数了。剩余参数说来了就是用来取代arguments的。

大家应该知道arguments吧,作为javascript函数中的默认属性,arguments代表了所有的参数。

arguments功能虽然强大,但是容易让人疏忽从而造成不必要的错误。我们举一个例子,我们先一个简单的验证函数containsAll ,其作用是检测第一个参数中是否包含后面几个参数。

比如:

containsAll("banana", "b", "nan") //会返回 true,
containsAll("banana", "c", "nan") //会返回 false。

实现代码如下:

function containsAll(haystack) {
 for (var i = 1; i < arguments.length; i++) {
  var needle = arguments[i];
  if (haystack.indexOf(needle) === -1) {
   return false;
  }
 }
 return true;
}

可以看到我们用到了arguments对象,但是它的下标我们是从1开始的,如果从0开始就会选中haystack了,所以不能选择0,而这里就最容易出错。

那么我们看看用ES6的剩余参数如何来实现这个方法:

function containsAll(haystack, ...needles) {
 for (var needle of needles) {
  if (haystack.indexOf(needle) === -1) {
   return false;
  }
 }
 return true;
}

可以看到剩余参数…的特定语法。也就是说,所有第2到第n个参数现在可以直接放到…后面的数组中去了。

…的用法可不仅仅局限于函数的参数噢,还可以用来简化:

var a = [2,3,4];
var b = [ 1, ...a, 5 ];
console.log( b );// [1,2,3,4,5]

默认参数

再来谈谈默认参数,默认参数也早就被很多语言所实现,其实是一个很基本的功能:

function animalSentence(animals2="tigers", animals3="bears") {
  return `Lions and ${animals2} and ${animals3}! Oh my!`;
}

不同的参数会返回不同的结果:

animalSentence()//"Lions and tigers and bears! Oh my!";
animalSentence("elephants") //"Lions and elephants and bears! Oh my!"
animalSentence("elephants", "whales")//"Lions and elephants and whales! Oh my!".

但是javascript的默认参数功能可不只这么简单,它还可以进行简短的表达式:

function animalSentenceFancy(animals2="tigers",animals3=(animals2 == "bears") ? "sealions" : "bears")
{
 return `Lions and ${animals2} and ${animals3}! Oh my!`;
}

希望本文所述对大家ECMAScript程序设计有所帮助。

Javascript 相关文章推荐
一个对于Array的简单扩展
Oct 03 Javascript
js 匿名调用实现代码
Jun 19 Javascript
javascript (用setTimeout而非setInterval)
Dec 28 Javascript
javascript+HTML5的canvas实现七夕情人节3D玫瑰花效果代码
Aug 04 Javascript
Javascript仿新浪游戏频道鼠标悬停显示子菜单效果
Aug 21 Javascript
简单几步实现返回顶部效果
Dec 05 Javascript
Vue 2.x教程之基础API
Mar 06 Javascript
基于vue配置axios的方法步骤
Nov 09 Javascript
JS实现调用本地摄像头功能示例
May 18 Javascript
微信小程序实现聊天对话(文本、图片)功能
Jul 06 Javascript
深入理解react-router 路由的实现原理
Sep 26 Javascript
vue filter 完美时间日期格式的代码
Aug 14 Javascript
详谈js遍历集合(Array,Map,Set)
Apr 06 #Javascript
javascript中this用法实例详解
Apr 06 #Javascript
selenium 与 chrome 进行qq登录并发邮件操作实例详解
Apr 06 #Javascript
js遍历获取表格内数据的方法(必看)
Apr 06 #Javascript
JS优化与惰性载入函数实例分析
Apr 06 #Javascript
大白话讲解JavaScript的Promise
Apr 06 #Javascript
JS实现的二叉树算法完整实例
Apr 06 #Javascript
You might like
第一个无线电台是由谁发明的
2021/03/01 无线电
PHPMailer 中文使用说明小结
2010/01/22 PHP
PHP读取txt文件的内容并赋值给数组的代码
2011/11/03 PHP
浅析application/x-www-form-urlencoded和multipart/form-data的区别
2014/06/22 PHP
php中文验证码实现方法
2015/06/18 PHP
PHP处理数组和XML之间的互相转换
2016/06/02 PHP
Laravel服务容器绑定的几种方法总结
2020/06/14 PHP
一次失败的jQuery优化尝试小结
2011/02/06 Javascript
JS代码优化技巧之通俗版(减少js体积)
2011/12/23 Javascript
Moment.js 不容错过的超棒Javascript日期处理类库
2012/04/15 Javascript
jquery eval解析JSON中的注意点介绍
2013/08/23 Javascript
javascript alert乱码的解决方法
2013/11/05 Javascript
Bootstrap复选框和单选按钮美化插件(推荐)
2016/11/23 Javascript
AngularJS基于ui-route实现深层路由的方法【路由嵌套】
2016/12/14 Javascript
JavaScript中匿名函数的递归调用
2017/01/22 Javascript
详解用node搭建简单的静态资源管理器
2017/08/09 Javascript
Vue.js在数组中插入重复数据的实现代码
2017/11/17 Javascript
详解原生JS动态添加和删除类
2019/03/26 Javascript
通过实例了解js函数中参数的传递
2019/06/15 Javascript
JS前端面试必备——基本排序算法原理与实现方法详解【插入/选择/归并/冒泡/快速排序】
2020/02/24 Javascript
微信小程序实现打卡签到页面
2020/09/21 Javascript
[02:49]2018DOTA2亚洲邀请赛主赛事决赛日战况回顾 Mineski鏖战5局夺得辉耀
2018/04/10 DOTA
详解K-means算法在Python中的实现
2017/12/05 Python
Python中安装easy_install的方法
2018/11/18 Python
对Python3使运行暂停的方法详解
2019/02/18 Python
详解将Pandas中的DataFrame类型转换成Numpy中array类型的三种方法
2019/07/06 Python
python 实现在无序数组中找到中位数方法
2020/03/03 Python
解决python Jupyter不能导入外部包问题
2020/04/15 Python
基于opencv的selenium滑动验证码的实现
2020/07/24 Python
Python编写单元测试代码实例
2020/09/10 Python
html5+css3进度条倒计时动画特效代码【推荐】
2016/03/08 HTML / CSS
英国美发和美容产品商城:HQhair
2019/02/08 全球购物
团队拓展训练心得体会
2016/01/12 职场文书
2016党员读书思廉心得体会
2016/01/23 职场文书
nginx location中多个if里面proxy_pass的方法
2021/03/31 Servers
把77A收信机改造成收音机
2022/04/05 无线电