Valor predeterminado del parámetro de la función de asignación de objeto ES6 desestructurante

Hola. Estaba revisando ejemplos del uso de la desestructuración de objetos al pasar los parámetros de la función. Demostración de destrucción de objetos

function drawES6Chart({size = 'big', cords = { x: 0, y: 0 }, radius = 25} = **{}**) { console.log(size, cords, radius); // do some chart drawing } // In Firefox, default values for destructuring assignments are not yet implemented (as described below). // The workaround is to write the parameters in the following way: // ({size: size = 'big', cords: cords = { x: 0, y: 0 }, radius: radius = 25} = **{}**) drawES6Chart({ cords: { x: 18, y: 30 }, radius: 30 }); 

¿Alguien me puede decir cuál es la razón de usar la asignación de objeto vacío al final del parámetro de función que he marcado en negrita (incrustado en estrellas dobles) arriba?

Si lo usa y llama a la función sin parámetros, funciona:

 function drawES6Chart({size = 'big', cords = { x: 0, y: 0 }, radius = 25} = {}) { console.log(size, cords, radius); // do some chart drawing } drawES6Chart(); 

La desestructuración con valores predeterminados solo hace su cosa cuando pasas un objeto que no tiene las propiedades respectivas. El valor predeterminado = {} para todo el parámetro permite no pasar un objeto (vacío).

Hace drawES6Chart() equivalente a drawES6Chart({}) .

Tiene un objeto con sus valores predeterminados, pero ese objeto también es un argumento, por lo que necesita un objeto vacío como valor predeterminado para el primer argumento , que es el objeto con los valores completados.

 function drawES6Chart({size = 'big', cords = { x: 0, y: 0 }, radius = 25} = {}) { } 

Eso, en pseudo código, sería:

 function drawES6Chart({**first argument**} = {**default value for first argument**}) { } 

Ese es un valor predeterminado para el parámetro de la función. Sin usar = {} JavaScript intérprete arroja un error cuando no se pasa ningún objeto a la función, ya que no puede desestructurar un valor undefined .