Один вариант использует «объект в качестве первого аргумента», как вы описали, но синтаксис немного странный. Рассмотрим:
function foo({a, b=0}) { console.log(a,b); }
Это определяет функцию, которая требует объект в качестве первого аргумента, и накладывает структурные ограничения на этот объект. В частности, будет работать следующее:
foo({a:1}); // output: 1 0
foo({a:1, b:2}); // output: 1 2
foo({}); // output: undefined 0
foo({a:1, b:2, c: 3}); // output: 1 2 /* c is ignored */
Хотя следующее приведет к ошибке:
foo(); // TypeError: Cannot destructure property `a` of 'undefined' or 'null'
Другой вариант, который вы часто видите, является идиомой форма:
function foo(some_object) { let {a,b} = some_object; console.log(a,b); }
Оба они являются экземплярами деструктуризации . Насколько я знаю, это наиболее близкий к python -подобный синтаксис (этот ответ дает, возможно, более подробное изложение, и я даю, возможно, слишком тщательный анализ формального языка, который объясняет наблюдаемые эффекты Объект деструктуризации ES6 значение по умолчанию для параметра функции назначения )