美文网首页
解构赋值默认值与函数参数默认值

解构赋值默认值与函数参数默认值

作者: 小龙虾Julian | 来源:发表于2018-08-23 17:29 被阅读0次

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

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的参数默认为一个空对象。

1、再举个栗子(解构赋值默认值的例子):

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

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

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

上面代码中,如果函数fetch的第二个参数是一个对象,就可以为它的三个属性设置默认值。这种写法不能省略第二个参数,如果结合函数参数的默认值,就可以省略第二个参数。这时,就出现了双重默认值。

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

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

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

2、请比较以下两种写法的区别:

// 写法一
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]

// x 和 y 都无值的情况
m1({}) // [0, 0];
m2({}) // [undefined, undefined]

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

相关文章

  • ES6-函数参数的赋值

    函数参数的解构赋值: 函数参数解构赋值的默认值: 函数参数解构赋值的默认值undefined:

  • 10- Function 扩展

    1、函数参数的默认值 2、与解构赋值默认值结合使用 3、区分如下函数参数解构赋值的两种方式 区别:写法一函数参数的...

  • 解构赋值默认值与函数参数默认值

    参数默认值可以与解构赋值的默认值,结合起来使用。 上面代码只使用了对象的解构赋值默认值,没有使用函数参数的默认值。...

  • es6

    解构赋值 默认值 解构赋值 解构默认值和参数默认值的区别

  • ES6学习第六节:Function扩展

    函数参数默认值 与解构赋值默认值结合使用 参数默认值的位置 函数的length属性 作用域 一旦设置了参数的默认值...

  • ES6 函数的扩展

    函数参数的默认值 ES6允许为函数的参数设置默认值,即直接写在参数定义的后面 函数参数默认值与解构赋值默认值结合使...

  • ES6 函数扩展 JavaScript

    1.函数参数的默认值 基本用法 与解构赋值默认值结合使用 参数默认值的位置 函数的length属性 作用域 应用 ...

  • ECMAScript6学习(二)

    函数的扩展 函数参数的默认值 ES6 允许为函数的参数设置默认值,即直接写在参数定义的后面。 与解构赋值默认值结合...

  • ES6笔记 - 函数的扩展

    函数参数的默认值 ES6允许为函数的参数设置默认值,即直接写在参数定义的后面。 与解构赋值默认值结合使用 参数默认...

  • 函数扩展

    默认值 undefined,将触发该参数等于默认值,null则没有这个效果 解构赋值与默认值的结合 函数没有参数的...

网友评论

      本文标题:解构赋值默认值与函数参数默认值

      本文链接:https://www.haomeiwen.com/subject/mzjmiftx.html