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

时间:2017-02-22 11:58:08

标签: javascript ecmascript-6 arguments

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

有一个功能 -

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

这里的事情越来越多了

lol(); // 10, 10
lol( {}, {} ); // 10, undefined
  1. 为什么我在传递空对象后得到undefined
  2. 为什么我在lol()时获得10的默认值为y
  3. 我迷路了,需要帮助!

3 个答案:

答案 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} = {}) { ... }

xundefined匹配,因为分配右侧的任何属性都没有属性x

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

同样,xundefined匹配,因此默认值为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 } ) {