函数的默认参数值,解构赋值
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
- 为什么我在传递空对象后得到
undefined
?
- 为什么我在
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} = {}) { ... }
x
与 undefined
匹配,因为赋值右侧的 no 属性 具有 属性 x
.
function({x = 10} = {}) {...}
同样,x
与 undefined
匹配,因此它采用默认值 10
。
另一方面,你的第二个论点(单独考虑)
function({ y } = { y : 10 }) {...}
此处,匹配发生,y
得到的值为 10
但是当你传递一个空对象时,默认参数对象 {y : 10}
被覆盖。
相当于拥有:
function({ y } = {}) {...}
在这里,你没有任何东西可以匹配 y,所以它被设置为 undefined
伙计们,这里有一些理论工作。
有一个函数 -
function lol( { x = 10 } = {}, { y } = { y : 10 } ) {
console.log( x, y )
};
这里的事情变得很棘手
lol(); // 10, 10
lol( {}, {} ); // 10, undefined
- 为什么我在传递空对象后得到
undefined
? - 为什么我在
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
fory
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} = {}) { ... }
x
与 undefined
匹配,因为赋值右侧的 no 属性 具有 属性 x
.
function({x = 10} = {}) {...}
同样,x
与 undefined
匹配,因此它采用默认值 10
。
另一方面,你的第二个论点(单独考虑)
function({ y } = { y : 10 }) {...}
此处,匹配发生,y
得到的值为 10
但是当你传递一个空对象时,默认参数对象 {y : 10}
被覆盖。
相当于拥有:
function({ y } = {}) {...}
在这里,你没有任何东西可以匹配 y,所以它被设置为 undefined