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 相关文章推荐
js 目录列举函数
Nov 06 Javascript
初试jQuery EasyUI 使用介绍
Apr 01 Javascript
如何让你的Lightbox支持滚轮缩放及Base64图片
Dec 04 Javascript
js判断浏览器类型及设备(移动页面开发)
Jul 30 Javascript
继续学习javascript闭包
Dec 03 Javascript
Bootstrap 布局组件(全)
Jul 18 Javascript
Bootstrap中表单控件状态(验证状态)
Aug 04 Javascript
快速解决js开发下拉框中blur与click冲突
Oct 10 Javascript
js生成随机颜色方法代码分享(三种)
Dec 29 Javascript
Vue添加请求拦截器及vue-resource 拦截器使用
Nov 23 Javascript
前端开发之便利店收银系统代码
Dec 27 Javascript
js实现随机点名
Jan 19 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
用PHP的ob_start() 控制您的浏览器cache
2009/08/03 PHP
Bootstrap+PHP实现多图上传功能实例详解
2018/04/08 PHP
TP5框架简单登录功能实现方法示例
2019/10/31 PHP
js随机颜色代码的多种实现方式
2013/04/23 Javascript
JavaScript实现按Ctrl键打开新页面
2014/09/04 Javascript
JavaScript数组常用操作技巧汇总
2014/11/17 Javascript
jQuery的text()方法用法分析
2014/12/20 Javascript
jQuery中DOM树操作之复制元素的方法
2015/01/23 Javascript
javascript表单验证大全
2015/08/12 Javascript
jquery实现顶部向右伸缩的导航区域代码
2015/09/02 Javascript
jQuery File Upload文件上传插件使用详解
2016/12/06 Javascript
原生js实现放大镜特效
2017/03/08 Javascript
详解vue-cli 接口代理配置
2017/12/13 Javascript
详解使用React进行组件库开发
2018/02/06 Javascript
JS中通过url动态获取图片大小的方法小结(两种方法)
2018/10/31 Javascript
[09:47]2018DOTA2亚洲邀请赛4.5SOLO赛 No[o]ne vs Sumail
2018/04/06 DOTA
使用django-suit为django 1.7 admin后台添加模板
2014/11/18 Python
Django查找网站项目根目录和对正则表达式的支持
2015/07/15 Python
python操作字典类型的常用方法(推荐)
2016/05/16 Python
Python实现批量更换指定目录下文件扩展名的方法
2016/09/19 Python
Python实现字符串逆序输出功能示例
2017/06/24 Python
python 多维切片之冒号和三个点的用法介绍
2018/04/19 Python
对pandas中Series的map函数详解
2018/07/25 Python
解决django中ModelForm多表单组合的问题
2019/07/18 Python
python用match()函数爬数据方法详解
2019/07/23 Python
对python 树状嵌套结构的实现思路详解
2019/08/09 Python
keras绘制acc和loss曲线图实例
2020/06/15 Python
Python中bisect的用法及示例详解
2020/07/20 Python
BOSE德国官网:尽探索之力,享音乐之极
2016/12/11 全球购物
初中生学习的自我评价
2013/11/14 职场文书
2014年应届大学生毕业自我鉴定
2014/01/31 职场文书
校园安全标语
2014/06/07 职场文书
天鹅湖观后感
2015/06/09 职场文书
SQL 窗口函数实现高效分页查询的案例分析
2021/05/21 SQL Server
浅谈MySql update会锁定哪些范围的数据
2022/06/25 MySQL
nginx之内存池的实现
2022/06/28 Servers