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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • JSONObject、JSONArray

    JSONObject、JSONArray最近两个星期接触最多的就是json和map了。  之前用到的json,就是一个键对应一个值,超级简单的一对一关系。现在用到的json那可以层层嵌套啊,刚开始接触的时候,确实有种崩溃的赶脚,不想去理,取个数据还那么麻烦。其实,就跟ifelse语句一样,如果if中套if,if中再套if,写的规范了还行,要是代码格式不规范,那我们肯定也看着麻烦。所以啊,对于json嵌套,只要记住符号“:”前是键

  • 光棍节程序员闯关秀(总共10关)

    光棍节程序员闯关秀(总共10关)程序员闯关大挑战:https://1111.segmentfault.com/仓鼠演示7k7k、4399小游戏:http://cdn.abowman.com/widgets/hamster/ha

  • 用python删除文件_python运行另一个py文件

    用python删除文件_python运行另一个py文件python删除文件夹和文件

    2022年10月26日
  • RationalDMIS 7.1 高级编程2020

    $$/*HeaderDMISMN/’Createdby[爱科腾瑞科技(北京)有限公司-101520-DEMO-10546A(深圳力合)]onTuesday,June30,2020′,4.0UNITS/MM,ANGDEC,MMPSWKPLAN/XYPLANPRCOMP/ONTECOMP/ONFLY/1.0000MODE/PROG,MANSNSET/APPRCH,2.0000SNSET/RETRCT,2.0000SNSET/DEPTH,0.0000SNSET

  • fizz buzz 翻译_thefizzbuzz中文翻译

    fizz buzz 翻译_thefizzbuzz中文翻译存档日期:2019年5月15日|首次发布:2010年10月26日GoogleBuzz允许用户将实时状态更新,新闻和内容发布到他们的Google帐户,并订阅其他人的类似更新。网络应用程序开发人员可以通过GoogleBuzzRESTAPI访问和搜索此内容。本文介绍了GoogleBuzzAPI,并在PHP应用程序上下文中对其进行了演示,并说明了如何在GoogleBuzz上…

    2022年10月15日
  • 获取iframe src里的参数

    获取iframe src里的参数父业面iframe:<divid=”vue”> <iframeid=”mainiframe”width=”100%”height=”100%”frameborder=”no”border=”0″marginwidth=”0″marginheight=”0″scrolling=”auto”src=”../swap/finance/index.html?CID=13123jklkljlajkj”></iframe></div>子页

发表回复

您的电子邮箱地址不会被公开。

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