伙计们,有些理论在这里工作。
有一个功能 -
function lol( { x = 10 } = {}, { y } = { y : 10 } ) {
console.log( x, y )
};
这里的事情越来越多了
lol(); // 10, 10
lol( {}, {} ); // 10, undefined
undefined
?10
的默认值为y
?我迷路了,需要帮助!
答案 0 :(得分:2)
当您为y
传递任何内容时,您将获得默认值{ y : 10 }
,因此y
为10。
当您传递一个空对象时,由于y
,JS会尝试获取{ y }
属性。由于该对象没有y
属性,因此您获得undefined
。
答案 1 :(得分:2)
如果你这样做:
(function ({x = 10}) {
console.log(x)
})()
会出现TypeError:无法与'undefined'或'null'匹配 如果你尝试:
(function ({x} = {}) {
console.log(x)
})()
现在,这会给undefined
。
以下是:
function({x} = {}) { ... }
x
与undefined
匹配,因为分配右侧的任何属性都没有属性x
。
function({x = 10} = {}) {...}
同样,x
与undefined
匹配,因此默认值为10
。
另一方面,你的第二个论点(单独拍摄)
function({ y } = { y : 10 }) {...}
此处匹配发生,y
获取值为10
但是当你传递一个空对象时,默认参数对象{y : 10}
会被覆盖。
相当于:
function({ y } = {}) {...}
此处,您没有与y匹配的内容,因此设置为undefined
答案 2 :(得分:0)
为什么我在传递空对象后得到
undefined
?
因为您使用了一个对象,所以不会分配默认值。
lol( {}, {} ); // 10, undefined
function lol( { x = 10 } = {}, { y } = { y : 10 } ) {
// resolves to
function lol( { x = 10 } = {}, { y } = {} ) {
为什么我在lol()时获得
10
的默认值为y
?
因为您没有提供对象。然后使用默认对象,并使用默认对象进行解构。
lol( ); // 10, undefined
function lol( { x = 10 } = {}, { y } = { y : 10 } ) {
// resolves to
function lol( { x = 10 } = {}, { y } = { y : 10 } ) {