【问题标题】:JavaScript default parameters for function函数的 JavaScript 默认参数
【发布时间】:2017-02-07 15:24:45
【问题描述】:

我完全可以理解 ECMAScript 6 已经创造了很多潜在的方法来处理诸如箭头函数之类的函数。

由于我对新事物不是很熟悉,所以在谈论函数的默认参数时。如何解释以下定义函数的方式之间的差异:

功能1:

function m1({x = 0, y = 0} = {}) {
  return [x, y];
}

功能2:

function m2({x, y} = { x: 0, y: 0 }) {
  return [x, y];
}

【问题讨论】:

  • 我认为使用 javascript 你可以用另一种方法来做到这一点。它类似于函数 m1(x) { x || (x=0); }
  • @lsqleakey 你在问如何在 ES6 中使用默认变量创建箭头函数吗?

标签: javascript parameters ecmascript-6 default


【解决方案1】:

当您尝试将某些内容传递给您的函数时,区别就很明显了:

m1({}) // [0, 0]
m1({z: 1}) // [0, 0]
m1({x: 1}) // [1, 0]

m2({}) // [undefined, undefined]
m2({z: 1}) // [undefined, undefined]
m2({x: 1}) // [1, undefined]

您的第一个语法 (m1({x = 0, y = 0} = {})) 做了三件事:

  • 首先,它为函数提供了一个默认的第一个参数,它是一个空对象。如果没有给出第一个参数 (m1()),则使用默认的空对象(即变为 m1({})
  • 其次,您的代码从该对象中提取 xy 属性。
  • 如果其中一个是undefined,则为其赋予默认值0

m2({x, y} = { x: 0, y: 0 }) 做了一些完全不同的事情:

  • 首先它为函数提供了一个默认的第一个参数,即对象{x: 0, y: 0}。如果没有传递第一个参数,则使用该对象。如果传递了 undefined 以外的任何参数,则使用该值。
  • 其次,代码从该对象中提取xy 属性。如果他们是undefined,那就是你会得到的。

第一个选项(具有默认值的参数,使用更多默认值进行解构)几乎可以肯定是您想要的。第二个选项意味着如果传递参数,您的代码没有合理/有用的属性默认值。

【讨论】:

  • m2() 将产生[0,0]m2({}) 将是 [undefined, undefined]
  • @CodingIntrigue 谢谢:这当然是我的意思。
  • 假设如此,很好的解释,很好的分解
【解决方案2】:

m1xy 提供默认值,而m2 仅从提供的对象中解构xy,并且仅在未提供对象本身时提供默认值:

  • m1({}) 将返回 [0, 0]
  • m2({}) 将返回 [undefined, undefined]
  • m1()m2() 都将返回 [0, 0]

  • m1({x: 10}) 将返回 [10, 0]
  • m2({x: 10}) 将返回 [10, undefined]

因此,如果m2 接收到一个对象,它会将可用值解构为变量xy。如果缺少其中任何一个,则为undefined。只有当整个对象丢失时,它才会提供一个默认对象 ({ x: 0, y: 0 }) 以从中获取值。

m1 但是,即使两个属性都缺失了,它们也会提供默认值。如果整个对象丢失,它仍然会提供这些默认值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-07
    • 1970-01-01
    • 2011-09-23
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    相关资源
    最近更新 更多