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 相关文章推荐
IE8 中使用加速器(Activities)
May 14 Javascript
Jquery 表格合并的问题分享
Sep 17 Javascript
Node.js中child_process实现多进程
Feb 03 Javascript
javascript跨域原因以及解决方案分享
Apr 08 Javascript
window.location.hash知识汇总
Nov 09 Javascript
利用Vue.js框架实现火车票查询系统(附源码)
Feb 27 Javascript
JS去掉字符串前后空格、阻止表单提交的实现代码
Jun 08 Javascript
JavaScript数据结构之优先队列与循环队列实例详解
Oct 27 Javascript
利用JQUERY实现多个AJAX请求等待的实例
Dec 14 jQuery
在Vue中使用axios请求拦截的实现方法
Oct 25 Javascript
2019 年编写现代 JavaScript 代码的5个小技巧(小结)
Jan 15 Javascript
使用element-ui +Vue 解决 table 里包含表单验证的问题
Jul 17 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的可变变量名需要的注意的问题
2013/06/20 PHP
php实现文件下载功能的几个代码分享
2014/05/10 PHP
PHP获取photoshop写入图片文字信息的方法
2015/03/31 PHP
PHP中SESSION的注销与清除
2015/04/16 PHP
PHP常用的排序和查找算法
2015/08/06 PHP
Laravel 框架返回状态拦截代码
2019/10/18 PHP
根据对象的某一属性进行排序的js代码(如:name,age)
2010/08/10 Javascript
JavaScript 错误处理与调试经验总结
2010/08/10 Javascript
解析Javascript小括号“()”的多义性
2013/12/03 Javascript
javascript实现手机震动API代码
2015/08/05 Javascript
JavaScript文件的同步和异步加载的实现代码
2017/08/19 Javascript
jquery一键控制checkbox全选、反选或全不选
2017/10/16 jQuery
jQuery操作元素的内容和样式完整实例分析
2020/01/10 jQuery
javascript实现移动端红包雨页面
2020/06/23 Javascript
vue3.0中友好使用antdv示例详解
2021/01/05 Vue.js
[05:37]DOTA2-DPC中国联赛 正赛 Elephant vs iG 选手采访
2021/03/11 DOTA
Python中使用支持向量机SVM实践
2017/12/27 Python
对django xadmin自定义菜单的实例详解
2019/01/03 Python
解决django 新增加用户信息出现错误的问题
2019/07/28 Python
Pytorch 之修改Tensor部分值方式
2019/12/27 Python
python3连接MySQL8.0的两种方式
2020/02/17 Python
利用python画出AUC曲线的实例
2020/02/28 Python
利用CSS3的checked伪类实现OL的隐藏显示的方法
2010/12/18 HTML / CSS
在线吉他课程,学习如何弹吉他:Fender Play
2019/02/28 全球购物
全球最受追捧的运动服品牌领先数字目的地:Stylerunner
2020/11/25 全球购物
网络工程师的自我评价
2013/10/02 职场文书
领导的自我鉴定
2013/12/28 职场文书
活动策划求职信模板
2014/04/21 职场文书
自愿解除劳动合同协议书
2014/09/11 职场文书
党员自我剖析材料范文
2014/10/06 职场文书
党的群众路线教育实践活动实施方案
2014/10/31 职场文书
本科毕业论文指导教师评语
2014/12/30 职场文书
花木兰观后感
2015/06/10 职场文书
投诉书格式范本
2015/07/02 职场文书
调解协议书范本
2016/03/21 职场文书
Java 超详细讲解数据结构中的堆的应用
2022/04/02 Java/Android