es6 — 与解构赋值默认值结合使用[通俗易懂]

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

大家好,又见面了,我是全栈君。

参数默认值可以与解构赋值的默认值,结合起来使用。

function foo({x, y = 5}) {
    console.log(x, y)
}

foo({}) // undefined 5
foo({x: 1}) // 1 5
foo({x: 1, y: 2}) // 1 2
foo() // 报错, TypeError: Cannot read property 'x' of undefined

上面代码只使用了对象的解构赋值默认值,没有使用函数参数的默认值。 只有当函数foo的参数是一个对象时,变量x 和 y 才会通过解构赋值生成。如果函数foo调用时没提供参数,变量x 和 y就不会生成,从而报错。通过提供函数参数的默认值,就可以避免这种情况。

function foo({x, y = 5} = {}) {
    console.log(x, y)
}

foo() // undefined 5

 上面代码指定,如果没有提供参数 ,函数foo的参数默认为一个空对象。

eg2:

function fetch(url, {body = '', method = 'GET', header = {} }) {
    console.log(method)
}

fetch('http://example.com', {}) // GET

fetch('http://example.com') // 报错

第二个参数必须是个对象,否则报错,改成下面的写法即可避免这种情况

function fetch(url, {body = '', method = 'GET', headers={} } = {}) {
    console.log(method)
}

fetch('http://example.com') // 'GET'

函数fetch没有第二个参数时,函数参数的默认值就会生效,然后才是解构赋值的默认值生效,变量method才会取到默认值GET。

思考:

// 写法一
function m1({x = 0, y = 0} = {}) {
    return [x, y]
}

// 写法二
function m2({x, y} = {x : 0, y : 0}) {
    return [x, y]
}

上面两种写法的区别: 写法一函数参数的默认值是空对象, 但是设置了对象解构赋值的默认值;写法二函数参数默认是一个有具体属性的对象,但是没有设置对象解构赋值的默认值。

// 函数没有参数的情况
m1() // [0, 0]
m2() // [0, 0]

// x 和 y都有值的情况
m1({x: 3, y: 8}) // [3, 8]
m2({x: 3, y: 8}) // [3, 8]

// 以上的情况都没有区别,下面的情况两者就有区别了
// x 有值,y 无值的情况
m1({x: 3}) // [3, 0]
m2({x: 3}) // [3, undefined]

m1({z: 3}) // [0, 0]
m2({z: 3}) // [undefined, undefined]

 推荐:http://es6.ruanyifeng.com/#docs/function

转载于:https://www.cnblogs.com/garfieldzhong/p/8056105.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107819.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • gridbagconstraints什么意思_gridlayout布局参数

    gridbagconstraints什么意思_gridlayout布局参数GridBagConstraints参数详解gridBagConstraints参数gridx=2;//X=2gridy=0;//Y=0gridwidth=1;//横占一个单元格gridheight=1;//列占一个单元格weightx=0.0;//当窗口放大时,长度不变weighty=0.0;//当窗口放大时,高度不变

    2025年10月16日
    4
  • Java数组转List的三种方式及对比

    点击上方“全栈程序员社区”,星标公众号 重磅干货,第一时间送达 作者:大脑补丁 blog.csdn.net/x541211190/article/details/79597236 …

    2021年6月26日
    87
  • DVP协议

    DVP协议Whatisadigitalvideoport?Camera的并口传输方式很多地方叫做dvp接口,但是并没有统一的标准。AsfarasIknow,thereisnoDVPspecbutthepinoutseemstobesomethingofadefactostandard,eventhoughpartmanufacturers…

    2022年6月6日
    48
  • lightroom cc 2015 mac的快捷键

    lightroom cc 2015 mac的快捷键Lightroom是一款非常专业的图形图像软件,使用它可以加快对图片后期处理的速度。如果这些快捷键你都知道的话?可以帮你节省很多时间,大大提高工作效率。还没有了解全面的不妨仔细看一下!全面了解的也可以看看还有什么疏漏的地方!lightroomcc2015mac快捷按键▪数字0:取消等级1~5:在图库模块中为选中的照片设置等级;6~9:在图库模块中为选中的照片设置色彩标…

    2022年5月26日
    47
  • SpringBoot详细研究-03系统集成

    SpringBoot详细研究-03系统集成

    2022年3月3日
    48
  • 利用Pytorch torchvision完成Faster-rcnn目标检测demo及源码详解

    利用Pytorch torchvision完成Faster-rcnn目标检测demo及源码详解Torchvision更新到0.3.0后支持了更多的功能,其中新增模块detection中实现了整个faster-rcnn的功能。本博客主要讲述如何通过torchvision和pytorch使用faster-rcnn,并提供一个demo和对应代码及解析注释。目录如果你不想深入了解原理和训练,只想用Faster-rcnn做目标检测任务的demo,请看这里torchvision中Faste…

    2022年6月24日
    25

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号