函数的默认参数值,解构赋值

Default argument value of a function, destructuring assignment

伙计们,这里有一些理论工作。

有一个函数 -

function lol( { x = 10 } = {}, { y } = { y : 10 } ) {
console.log( x, y )
}; 

这里的事情变得很棘手

lol(); // 10, 10
lol( {}, {} ); // 10, undefined
  1. 为什么我在传递空对象后得到 undefined
  2. 为什么我在 y 时得到默认值 10 当 lol() 时?

我迷路了,需要帮助!

Why am i getting undefined after passing empty object?

因为您使用了一个对象,所以没有分配默认值。

         lol(              {},         {}         ); // 10, undefined
function lol( { x = 10 } = {}, { y } = { y : 10 } ) {
// resolves to
function lol( { x = 10 } = {}, { y } = {}         ) {

And why am i getting default value of 10 for y when lol()?

因为你没有提供对象。然后使用默认对象并使用默认对象进行解构。

         lol(                                     ); // 10, undefined
function lol( { x = 10 } = {}, { y } = { y : 10 } ) {
// resolves to
function lol( { x = 10 } = {}, { y } = { y : 10 } ) {

当您不为 y 传递任何内容时,您将获得 { y : 10 } 的默认值,因此 y 为 10。

当你传递一个空对象时,由于 { y },JS 会尝试获取 y 属性。由于该对象没有 y 属性 你得到 undefined

如果你这样做:

(function ({x = 10}) {
  console.log(x)
})()

会出现类型错误:无法匹配 'undefined' 或 'null' 如果你尝试:

(function ({x} = {}) {
  console.log(x)
})()

现在,这给出 undefined


如下:

function({x} = {}) { ... }

xundefined 匹配,因为赋值右侧的 no 属性 具有 属性 x.

function({x = 10} = {}) {...}

同样,xundefined 匹配,因此它采用默认值 10


另一方面,你的第二个论点(单独考虑)

function({ y } = { y : 10 }) {...}

此处,匹配发生,y 得到的值为 10 但是当你传递一个空对象时,默认参数对象 {y : 10} 被覆盖。

相当于拥有:

function({ y } = {}) {...}

在这里,你没有任何东西可以匹配 y,所以它被设置为 undefined