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 相关文章推荐
初学Jquery插件制作 在SageCRM的查询屏幕隐藏部分行的功能
Dec 26 Javascript
gameboy网页闯关游戏(riddle webgame)--仿微信聊天的前端页面设计和难点
Feb 21 Javascript
JS简单编号生成器实现方法(附demo源码下载)
Apr 05 Javascript
Javascript中的迭代、归并方法详解
Jun 14 Javascript
JavaScript DOM节点操作方法总结
Aug 23 Javascript
jquery 多个radio的click事件实例
Dec 03 Javascript
Angular.js中数组操作的方法教程
Jul 31 Javascript
微信小程序之电影影评小程序制作代码
Aug 03 Javascript
vue中如何动态绑定图片,vue中通过data返回图片路径的方法
Feb 07 Javascript
详解基于Vue,Nginx的前后端不分离部署教程
Dec 04 Javascript
JavaScript实现的开关灯泡点击切换特效示例
Jul 08 Javascript
js+canvas实现刮刮奖功能
Sep 13 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
浅析51个PHP处理字符串的函数
2013/08/02 PHP
php将数组转换成csv格式文件输出的方法
2015/03/14 PHP
在Laravel 的 Blade 模版中实现定义变量
2019/10/14 PHP
JavaScript中出现乱码的处理心得
2009/12/24 Javascript
js跟随滚动条滚动浮动代码
2009/12/31 Javascript
利用jQuery接受和处理xml数据的代码(.net)
2011/03/28 Javascript
js的2种继承方式详解
2014/03/04 Javascript
javascript使用avalon绑定实现checkbox全选
2015/05/06 Javascript
学习JavaScript设计模式(接口)
2015/11/26 Javascript
Bootstrap精简教程
2015/11/27 Javascript
在React框架中实现一些AngularJS中ng指令的例子
2016/03/06 Javascript
全面解析JavaScript中apply和call以及bind(推荐)
2016/06/15 Javascript
vue 2.0组件与v-model详解
2017/03/27 Javascript
Javascript 一些需要注意的细节(必看篇)
2017/07/08 Javascript
get  post jsonp三种数据交互形式实例详解
2017/08/25 Javascript
原生JS实现的碰撞检测功能示例
2018/05/18 Javascript
vue新vue-cli3环境配置和模拟json数据的实例
2018/09/19 Javascript
浅析vue-cli3配置webpack-bundle-analyzer插件【推荐】
2019/10/23 Javascript
[04:54]DOTA2 2017国际邀请赛:上届冠军WINGS采访短片
2017/08/09 DOTA
python三大神器之fabric使用教程
2019/06/10 Python
python挖矿算力测试程序详解
2019/07/03 Python
PyCharm使用Docker镜像搭建Python开发环境
2019/12/26 Python
python GUI库图形界面开发之PyQt5动态加载QSS样式文件
2020/02/25 Python
Python HTTP下载文件并显示下载进度条功能的实现
2020/04/02 Python
学python最电脑配置有要求么
2020/07/05 Python
CSS3实现类似翻书效果的过渡动画的示例代码
2019/09/06 HTML / CSS
高校教师思想汇报
2014/01/11 职场文书
大学理论知识学习自我鉴定
2014/04/28 职场文书
安全标语大全
2014/06/10 职场文书
党员干部批评与自我批评反四风思想汇报
2014/09/21 职场文书
会计稽核岗位职责
2015/04/13 职场文书
导游词之嵊泗列岛
2019/10/30 职场文书
《天使的翅膀》读后感3篇
2019/12/20 职场文书
Python图片检索之以图搜图
2021/05/31 Python
详解Python flask的前后端交互
2022/03/31 Python
详解ZABBIX监控ESXI主机的问题
2022/06/21 Servers