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 相关文章推荐
js href的用法
May 13 Javascript
JQuery中对服务器控件 DropdownList, RadioButtonList, CheckboxList的操作总结
Jun 28 Javascript
jquery fancybox ie6不显示关闭按钮的解决办法
Dec 25 Javascript
jQuery+ajax实现鼠标单击修改内容的方法
Jun 27 Javascript
jquery简单实现外部链接用新窗口打开的方法
May 30 Javascript
在JavaScript应用中使用RequireJS来实现延迟加载
Jul 01 Javascript
前端实现文件的断点续传(前端文件提交+后端PHP文件接收)
Nov 04 Javascript
BootStrap整体框架之基础布局组件
Dec 15 Javascript
JavaScript实现省市县三级级联特效
May 16 Javascript
JS实现json的序列化和反序列化功能示例
Jun 13 Javascript
webpack多入口文件页面打包配置详解
Jan 09 Javascript
微信接入之获取用户头像的方法步骤
Sep 23 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
DC这些乐高系列动画电影你看过几部?
2020/04/09 欧美动漫
用文本文件制作留言板提示(下)
2006/10/09 PHP
php echo 输出字符串函数详解
2010/05/13 PHP
PHP SPL使用方法和他的威力
2013/11/12 PHP
php中ob_flush函数和flush函数用法分析
2015/03/18 PHP
php实现留言板功能(代码详解)
2017/03/28 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
2020/02/21 PHP
Aster vs KG BO3 第二场2.18
2021/03/10 DOTA
脚本安需导入(装载)的三种模式的对比
2007/06/24 Javascript
利用JS解决ie6不支持max-width,max-height问题的方法
2014/01/02 Javascript
jquery 图片缩放拖动的简单实例
2014/01/08 Javascript
JavaScript数组常用操作技巧汇总
2014/11/17 Javascript
Jquery promise实现一张一张加载图片
2015/11/13 Javascript
结合代码图文讲解JavaScript中的作用域与作用域链
2016/07/05 Javascript
浅谈基于Vue.js的移动组件库cube-ui
2017/12/20 Javascript
解决使用layui的时候form表单中的select等不能渲染的问题
2019/09/18 Javascript
刷新页面后让控制台的js代码继续执行
2019/09/20 Javascript
详解从vue-loader源码分析CSS Scoped的实现
2019/09/23 Javascript
angular异步验证防抖踩坑实录
2019/12/01 Javascript
[02:59]DOTA2完美大师赛主赛事第三日精彩集锦
2017/11/25 DOTA
Python里隐藏的“禅”
2014/06/16 Python
Python使用pygame模块编写俄罗斯方块游戏的代码实例
2015/12/08 Python
python3读取MySQL-Front的MYSQL密码
2017/05/03 Python
Python实现冒泡排序的简单应用示例
2017/12/11 Python
Python3实现的Mysql数据库操作封装类
2018/06/06 Python
浅谈pyqt5中信号与槽的认识
2019/02/17 Python
python 字典访问的三种方法小结
2019/12/05 Python
Python3之外部文件调用Django程序操作model等文件实现方式
2020/04/07 Python
详解python中groupby函数通俗易懂
2020/05/14 Python
详解background属性的8个属性值(面试题)
2020/11/02 HTML / CSS
销售业务员岗位职责
2014/01/29 职场文书
安全检查管理制度
2014/02/02 职场文书
环保建议书200字
2014/05/14 职场文书
测量员岗位职责
2015/02/14 职场文书
神州牡丹园的导游词
2019/11/20 职场文书
2020年个人安全保证书参考模板
2020/01/08 职场文书