JavaScript函数的默认参数

lsq*_*key 5 javascript parameters default ecmascript-6

我完全理解ECMAScript 6已经创建了许多使用箭头函数等函数处理的潜在方法.

因为我不太熟悉新东西,所以在谈论函数的默认参数时.如何解释以下定义函数的方式之间的差异:

功能1:

function m1({x = 0, y = 0} = {}) {
  return [x, y];
}
Run Code Online (Sandbox Code Playgroud)

功能2:

function m2({x, y} = { x: 0, y: 0 }) {
  return [x, y];
}
Run Code Online (Sandbox Code Playgroud)

Seb*_*mon 0

m1x为和提供默认值y,而m2仅从提供的对象解构xy,并且仅在对象本身未提供\xe2\x80\x99t 时才提供默认值:

\n\n
    \n
  • m1({})将返回[0, 0]
  • \n
  • m2({})将返回[undefined, undefined]
  • \n
  • 两者m1()m2()都会返回[0, 0]
  • \n
\n\n
\n\n
    \n
  • m1({x: 10})将返回[10, 0]
  • \n
  • m2({x: 10})将返回[10, undefined]
  • \n
\n\n

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

\n\n

m1但是,为这两个属性提供默认值,即使它们\xe2\x80\x99 缺失。如果整个对象丢失,它\xe2\x80\x99仍将提供这些默认值。

\n