Непривилегированный пользователь (не root) не может открыть прослушивающий сокет на портах ниже 1024.
Если вы используете его и вызываете функцию без параметров, она работает:
function drawES6Chart({size = 'big', cords = { x: 0, y: 0 }, radius = 25} = {}) {
console.log(size, cords, radius);
// do some chart drawing
}
drawES6Chart();
, если нет, возникает ошибка:
TypeError: невозможно преобразовать undefined в объект
blockquote>
function drawES6Chart({size = 'big', cords = { x: 0, y: 0 }, radius = 25}) { console.log(size, cords, radius); // do some chart drawing } drawES6Chart();
Деструктурирование по умолчанию имеет значение только при передаче объекта, который не имеет соответствующих свойств. = {}
по умолчанию для всего параметра позволяет вообще не пропускать (пустой) объект.
Он делает drawES6Chart()
эквивалентным drawES6Chart({})
.
У вас есть объект с вашими значениями по умолчанию, но этот объект тоже является аргументом, поэтому для первого аргумента нужен пустой объект, являющийся объектом с заполненными значениями.
function drawES6Chart({size = 'big', cords = { x: 0, y: 0 }, radius = 25} = {}) {
}
То, что в псевдокоде будет:
function drawES6Chart({**first argument**} = {**default value for first argument**}) {
}
Это значение по умолчанию для параметра функции. Без использования интерпретатора = {}
JavaScript интерпретирует ошибку, когда объект не передается функции, поскольку он не может разрушить значение undefined
.