ES6中参数的默认值语法介绍


Posted in Javascript onMay 03, 2017

前言

在ES6如果函数参数没有值或未定义的,默认函数参数允许将初始值初始化为默认值。下面来看看详细的介绍吧。

语法

function [name]([param1[ = defaultValue1 ][, ..., paramN[ = defaultValueN ]]]) 
{
 statements
}

描述

在JavaScript中,函数默认参数定义。然而,在某些情况下,设置不同的默认值可能是有用的。这是默认参数可以帮助的地方。

在过去,设置默认值的一般策略是在函数体中测试参数值,如果它们是未定义的就分配一个值。如果在下面的例子中,在调用过程中b没有提供值,它的值将是undefined 当对 a*b 求值并且调用这个乘法的时候将返回NaN。

function multiply(a, b) {
var b = (typeof b !== 'undefined') ? b : 1;

return a*b;
}

multiply(5); // 5

在ES6中设置默认参数,对函数体的检查是不必须的了。现在,你可以简单的在函数头设置默认值:

function multiply(a, b = 1) {
 return a*b;
}

multiply(5); // 5

例子

通过未定义

在第二个函数调用中,即使第二个参数明确地被设置为undefined(虽然不是null),但是这个函数的颜色参数有一个默认值。

function setBackgroundColor(element, color = 'rosybrown') {
 element.style.backgroundColor = color;
}

setBackgroundColor(someDiv);   // color set to 'rosybrown'
setBackgroundColor(someDiv, undefined); // color set to 'rosybrown' too
setBackgroundColor(someDiv, 'blue'); // color set to 'blue'

调用时求值

默认参数在调用时计算的,所以不像在Python中,一个新的对象是每次调用函数创建。

function append(value, array = []) {
array.push(value);
return array;
}

append(1); //[1]
append(2); //[2], not [1, 2]

甚至适合于函数和变量

function callSomething(thing = something()) { return thing }

function something(){
 return "sth";
}

callSomething(); //sth

默认参数可以提供给以后的默认参数

已经遇到的参数可以提供给以后的默认参数:

function singularAutoPlural(singular, plural = singular+"s",
       rallyingCry = plural + " ATTACK!!!") {
 return [singular, plural, rallyingCry ];
}

//["Gecko","Geckos", "Geckos ATTACK!!!"]
singularAutoPlural("Gecko");

//["Fox","Foxes", "Foxes ATTACK!!!"]
singularAutoPlural("Fox","Foxes");

//["Deer", "Deer", "Deer ... change."]
singularAutoPlural("Deer", "Deer", "Deer peaceably and respectfully
 petition the government for positive change.")

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
javascript检测对象中是否存在某个属性判断方法小结
May 19 Javascript
javascript获取web应用根目录的方法
Feb 12 Javascript
选择复选框按钮置灰否则按钮可用
May 22 Javascript
JavaScript中setUTCMilliseconds()方法的使用详解
Jun 12 Javascript
浅谈javascript构造函数与实例化对象
Jun 22 Javascript
利用pm2部署多个node.js项目的配置教程
Oct 22 Javascript
JS基于对象的特性实现去除数组中重复项功能详解
Nov 17 Javascript
vue 点击按钮增加一行的方法
Sep 07 Javascript
详解如何构建一个Angular6的第三方npm包
Sep 07 Javascript
vue实现滑动超出指定距离回顶部功能
Jul 31 Javascript
vue点击标签切换选中及互相排斥操作
Jul 17 Javascript
详解Js模块化的作用原理和方案
Apr 29 Javascript
Express之get,pos请求参数的获取
May 02 #Javascript
利用prop-types第三方库对组件的props中的变量进行类型检测
May 02 #Javascript
xmlplus组件设计系列之路由(ViewStack)(7)
May 02 #Javascript
JavaScript比较两个数组的内容是否相同(推荐)
May 02 #Javascript
xmlplus组件设计系列之分隔框(DividedBox)(8)
May 02 #Javascript
xmlplus组件设计系列之树(Tree)(9)
May 02 #Javascript
详解Vue2.X的路由管理记录之 钩子函数(切割流水线)
May 02 #Javascript
You might like
php 取得瑞年与平年的天数的代码
2009/08/10 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(九)
2014/06/24 PHP
Smarty实现页面静态化(生成HTML)的方法
2016/05/23 PHP
PHP命名空间namespace用法实例分析
2016/09/27 PHP
PHP 实现从数据库导出到.csv文件方法
2017/07/06 PHP
tp5.1 实现setInc字段自动加1
2019/10/18 PHP
用javascript做拖动布局的思路
2008/05/31 Javascript
jQuery-Easyui 1.2 实现多层菜单效果的代码
2012/01/13 Javascript
js图片向右一张张滚动效果实例代码
2013/11/23 Javascript
JS判断、校验MAC地址的2个实例
2014/05/05 Javascript
JS去除iframe滚动条的方法
2015/04/01 Javascript
JavaScript中的函数嵌套使用
2015/06/04 Javascript
半个小时学json(json传递示例)
2016/12/25 Javascript
Vue2.0实现1.0的搜索过滤器功能实例代码
2017/03/20 Javascript
深入理解vue.js中的v-if和v-show
2017/06/22 Javascript
Nodejs实现文件上传的示例代码
2017/09/26 NodeJs
jQuery cookie的公共方法封装和使用示例
2020/06/01 jQuery
详解Vue的七种传值方式
2021/02/08 Vue.js
用Python和MD5实现网站挂马检测程序
2014/03/13 Python
python实现类的静态变量用法实例
2015/05/08 Python
Python函数可变参数定义及其参数传递方式实例详解
2015/05/25 Python
Python执行时间的计算方法小结
2017/03/17 Python
python数据分析数据标准化及离散化详解
2018/02/26 Python
下载python中Crypto库报错:ModuleNotFoundError: No module named ‘Crypto’的解决
2018/04/23 Python
win8.1安装Python 2.7版环境图文详解
2019/07/01 Python
python 实现查询Neo4j多节点的多层关系
2019/12/23 Python
python3发送request请求及查看返回结果实例
2020/04/30 Python
sklearn线性逻辑回归和非线性逻辑回归的实现
2020/06/09 Python
Juice Beauty官网:有机美容产品,护肤与化妆品
2020/06/13 全球购物
阿里巴巴Oracle DBA笔试题答案-备份恢复类
2013/11/20 面试题
后勤部经理岗位职责
2014/02/23 职场文书
旅游专业毕业生自荐书
2014/06/30 职场文书
学术会议领导致辞
2015/07/29 职场文书
2016年领导干部正风肃纪心得体会
2015/10/09 职场文书
Docker 镜像介绍以及commit相关操作
2022/04/13 Servers
详解Flutter网络请求Dio库的使用及封装
2022/04/14 Java/Android