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 相关文章推荐
jquery给图片添加鼠标经过时的边框效果
Nov 12 Javascript
js获取下拉列表的值和元素个数示例
May 07 Javascript
node.js中的fs.write方法使用说明
Dec 15 Javascript
使用纯JS代码判断字符串中有多少汉字的实现方法(超简单实用)
Nov 12 Javascript
EditPlus 正则表达式 实战(3)
Dec 15 Javascript
浅谈react.js中实现tab吸顶效果的问题
Sep 06 Javascript
chorme 浏览器记住密码后input黄色背景处理方法(两种)
Nov 22 Javascript
jQuery实现轮播图及其原理详解
Apr 12 jQuery
Vue中使用canvas方法总结
Feb 12 Javascript
微信小程序 checkbox使用实例解析
Sep 09 Javascript
vue实现路由不变的情况下,刷新页面操作示例
Feb 02 Javascript
js实现自动播放匀速轮播图
Feb 06 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
使用JSON实现数据的跨域传输的php代码
2011/12/20 PHP
php计算两个日期相差天数的方法
2015/03/14 PHP
PHP工厂模式简单实现方法示例
2018/05/23 PHP
javascript 进阶篇3 Ajax 、JSON、 Prototype介绍
2012/03/14 Javascript
Javascript在IE和FireFox中的不同表现简析
2012/12/03 Javascript
jQuery简单自定义图片轮播插件及用法示例
2016/11/21 Javascript
JavaScript函数节流和函数防抖之间的区别
2017/02/15 Javascript
Js自定义多选框效果的实例代码
2017/07/05 Javascript
Node.js如何使用Diffie-Hellman密钥交换算法详解
2017/09/05 Javascript
解决Jquery下拉框数据动态获取的问题
2018/01/25 jQuery
jquery写出PC端轮播图实例
2018/01/26 jQuery
Angular使用操作事件指令ng-click传多个参数示例
2018/03/27 Javascript
解决vue v-for src 图片路径问题 404
2019/11/12 Javascript
简单了解JS打开url的方法
2020/02/21 Javascript
微信小程序分享小程序码的生成(带参数)以及参数的获取
2020/03/25 Javascript
JavaScript实现图片放大预览效果
2020/11/02 Javascript
[01:18:33]Secret vs VGJ.S Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
python使用PythonMagick将jpg图片转换成ico图片的方法
2015/03/26 Python
详解Python的Django框架中的Cookie相关处理
2015/07/22 Python
将Python的Django框架与认证系统整合的方法
2015/07/24 Python
python使用多进程的实例详解
2018/09/19 Python
python使用numpy读取、保存txt数据的实例
2018/10/14 Python
对python字典过滤条件的实例详解
2019/01/22 Python
python GUI库图形界面开发之PyQt5线程类QThread详细使用方法
2020/02/26 Python
浅谈matplotlib默认字体设置探索
2021/02/03 Python
python中time.ctime()实例用法
2021/02/03 Python
HTML5 CSS3打造相册效果附源码下载
2014/06/16 HTML / CSS
总经理办公室主任岗位职责
2013/11/12 职场文书
新闻专业本科生的自我评价分享
2013/11/20 职场文书
资源工程专业毕业生求职信
2014/02/27 职场文书
解除劳动合同协议书(样本)
2014/10/02 职场文书
读《教育心理学》心得体会
2016/01/22 职场文书
导游词之安徽醉翁亭
2020/01/10 职场文书
python使用pywinauto驱动微信客户端实现公众号爬虫
2021/05/19 Python
一文搞懂python异常处理、模块与包
2021/06/26 Python
Html5同时支持多端sdk的小技巧
2021/11/17 HTML / CSS