ES6基础之默认参数值


Posted in Javascript onFebruary 21, 2019

如果调用函数的过程中,定义的参数缺失,此参数变量的值则会是undefined。怎么给缺失的参数赋值默认值,在ES6之前,没有简洁的语法设置缺失参数的默认值,但是我们一般可以这么编写代码解决缺失参数默认值:

function myFunction(x, y, z) {
 x = x === undefined ? 1 : x;
 y = y === undefined ? 2 : y;
 z = z === undefined ? 3 : z;
 console.log(x, y, z); //Output "6 7 3"
 }
 myFunction(6, 7);

这种写法是不是比较麻烦?默认值的设置是不是不够直观?在ES6中,我们可以用更简洁的语法进行实现,通过本篇文章你将学习到以下内容:

  • 使用ES6语法声明参数默认
  • 值使用undefined传
  • 参参数运算

使用ES6语法声明参数默认值

我们可以使用ES6简洁的语法,如下示例进行声明函数参数的默认值:

function myFunction(x = 1, y = 2, z = 3) {
 console.log(x, y, z); 
}
myFunction(6,7); // Outputs 6 7 3

在上述代码示例中,我们在调用此函数中传递了前两个参数,因此参数的默认值(即x=1和y=2)将会被覆盖(即x=6和y=7)。由于第三个参数缺省,因此z使用默认值,将会是3。

使用undefined传参

如果我们想让具体某个参数使用默认值,我们可以使用undefined进行赋值,如下段代码所示:

function myFunction(x = 1, y = 2, z = 3) {
 console.log(x, y, z); // Outputs "1 7 9"
 }
 myFunction(undefined,7,9);

是不是很简单,只需要使用undefined,我们就可以指定具体某个参数使用默认值。

参数运算

在ES6中我们不仅可以给参数默认赋值具体的数值,同时参数赋值支持参数的逻辑运算进行赋值,如下段代码所示:

function myFunction(x = 1, y = 2, z = x + y) {
 console.log(x, y, z); // Output "6 7 13"
 }
 myFunction(6,7);

在上述代码中,我们只传入了前两个参数,第三个参数缺省,第三个参数的值默认值是则会是前两个参数之和。

小节

今天的内容就到这里,当我们在开发一些工程应用通用组件时,都需要暴露一些接口以供使用。而这些接口的友好性是决定这个组件质量的一大指标,其中参数缺省值(默认值)的完善程度同时也影响接口的友好性,感谢ES6能让我们用如此简介的语法设置参数的缺省值。

与解构赋值默认值结合使用

这里有两种写法需要区分一下:

function m1({x=0,y=0} = {}){
  return [x,y];
}
function m2({x,y} = {x:0,y:0}){
  return [x,y];
}
m1({x:3});//[3,0]
m2({x:3});//[3,undefined]
m1({});//[0,0]
m2({});//[undefined,undefined]

参数默认值的位置

通常情况下,定义了默认值的参数应该是函数的尾参数。因为这样比较容易看出,到底省略了哪些参数,如果非尾部的参数设置默认值,实际上这个参数是无法省略的。

如果有默认值的参数都不是尾参数,这时,无法只省略该参数而不省略其后的参数,除非显示输入undefined。如果传入undefined,那么就会触发默认值,但是null没有这个效果。

函数的length属性

如果函数指定了默认值后,函数的length属性就不会包含有默认值的参数。这是因为length属性的含义是,该函数预期传入的参数个数,某个参数指定默认值之后,预期传入的参数个数就不包括这个参数了,同理,rest参数也不会计入length属性。

函数参数默认值的类型

(1)变量
如果函数参数的默认值是一个变量,则该变量所处的作用域和其他变量的作用域规则相同,即是先前函数的作用域,然后再是全局作用域。

(2)函数
如果函数A的参数默认值是函数B,那么由于函数的作用域是其声明的时候所在的作用域,函数B的作用域就在全局作用域而不是函数A的作用域。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Prototype Class对象学习
Jul 19 Javascript
jQuery DOM操作小结与实例
Jan 07 Javascript
jquery 事件对象属性小结
Apr 27 Javascript
基于jQuery实现下拉收缩(展开与折叠)特效
Dec 25 Javascript
jQuery+CSS 半开折叠效果原理及代码(自写)
Mar 04 Javascript
js中继承的几种用法总结(apply,call,prototype)
Dec 26 Javascript
jQuery链式操作实例分析
Nov 16 Javascript
JS组件Bootstrap实现弹出框和提示框效果代码
Dec 08 Javascript
超实用的javascript时间处理总结
Aug 16 Javascript
ES6扩展运算符的用途实例详解
Aug 20 Javascript
VUE实现移动端列表筛选功能
Aug 23 Javascript
Vue中 axios delete请求参数操作
Aug 25 Javascript
微信小程序HTTP接口请求封装的实现
Feb 21 #Javascript
微信小程序控制台提示warning:Now you can provide attr "wx:key" for a "wx:for" to improve performance解决方法
Feb 21 #Javascript
Element-UI中Upload上传文件前端缓存处理示例
Feb 21 #Javascript
详解Puppeteer前端自动化测试实践
Feb 21 #Javascript
javascript中join方法实例讲解
Feb 21 #Javascript
React 组件渲染和更新的实现代码示例
Feb 21 #Javascript
vue图片上传本地预览组件使用详解
Feb 20 #Javascript
You might like
十天学会php之第一天
2006/10/09 PHP
使用一个for循环将N*N的二维数组的所有值置1实现方法
2017/05/29 PHP
Laravel框架生命周期与原理分析
2018/06/12 PHP
自定义一个jquery插件[鼠标悬浮时候 出现说明label]
2011/06/27 Javascript
javascript单引号和双引号的区别和处理
2014/05/14 Javascript
JS动态修改iframe内嵌网页地址的方法
2015/04/01 Javascript
AngularJS 过滤与排序详解及实例代码
2016/09/14 Javascript
一句jQuery代码实现返回顶部效果(简单实用)
2016/12/28 Javascript
微信小程序  TLS 版本必须大于等于1.2问题解决
2017/02/22 Javascript
jQuery 判断元素整理汇总
2017/02/28 Javascript
JS实现无缝循环marquee滚动效果
2017/05/22 Javascript
在vue项目创建的后初始化首次使用stylus安装方法分享
2018/01/25 Javascript
vue检测对象和数组的变化分析
2018/06/30 Javascript
JS添加或删除HTML dom元素的方法实例分析
2019/03/05 Javascript
详解babel升级到7.X采坑总结
2019/05/12 Javascript
小程序使用分包的示例代码
2020/03/23 Javascript
[47:38]Optic vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
复习Python中的字符串知识点
2015/04/14 Python
Python变量作用范围实例分析
2015/07/07 Python
python实现彩票系统
2020/06/28 Python
Python一句代码实现找出所有水仙花数的方法
2018/11/13 Python
在Django admin中编辑ManyToManyField的实现方法
2019/08/09 Python
使用PyQt的QLabel组件实现选定目标框功能的方法示例
2020/05/19 Python
Python爬虫爬取博客实现可视化过程解析
2020/06/29 Python
Html5原创俄罗斯方块(基于canvas)
2019/01/07 HTML / CSS
施华洛世奇水晶荷兰官方网站:SWAROVSKI荷兰
2017/05/12 全球购物
Bibloo奥地利:购买女装、男装、童装、鞋和配件
2018/10/18 全球购物
大学生简历中个人的自我评价
2013/10/06 职场文书
基层干部十八大感言
2014/01/19 职场文书
幼儿园保教管理制度
2014/02/03 职场文书
初中班级口号
2014/06/09 职场文书
药剂专业自荐书
2014/06/20 职场文书
教师自我剖析材料范文
2014/09/30 职场文书
酒店人事主管岗位职责
2015/04/11 职场文书
家长对学校的意见和建议
2015/06/03 职场文书
2016婚礼主持词开场白
2015/11/24 职场文书