Jak zbytek operátoru a výchozí hodnoty ovlivňují vlastnost délky funkce

V JavaScriptu můžete získat počet argumentů, které funkce očekává, pomocí length vlastnictví. To může být užitečné, když jste autory knihovny (myslím). Můj přítel Jason mě požádal o konkrétní případy použití, které si vymyslím a později upravím tento příspěvek.

function add (a, b) {
  return a + b;
}

console.log(add.length); // 2

Otázka, kterou jsem si nikdy nepoložil, je, jak je ovlivněna vlastnost length operátorem rest (function a (a, ...b) { } ).

Velký příspěvek do týdeníku Web Tools Weekly zde. Louis Lazaris neuvádí „pouze“ seznam nástrojů, ale také vysvětluje přiblblé detaily JavaScriptu, jako je přesně tato otázka týkající se operátoru zbytku a vlastnosti délky funkce v první části zpravodaje.

Tak! Jak operátor rest ovlivňuje fn.length ? Pojďme se podívat na úryvek obsažený ve zpravodaji.

function myFunc1 (a, ...b) { }
function myFunc2 (a, b, c, ...d) { }
function myFunc3 (...d) { }

console.log(myFunc1.length); // 1
console.log(myFunc2.length); // 3
console.log(myFunc3.length); // 0

Jak vidíte výše, operátor rest se "nepočítá" do vlastnosti length. Zajímavé!

Ale tohle mě vlastně přivedlo na myšlenku... co tedy výchozí hodnoty?

function myFunc1 (a = 1, b = 2) { }
function myFunc2 (a = 1, b) { }
function myFunc3 (a, b = 2) { }

console.log(myFunc1.length) // 0
console.log(myFunc2.length) // 0
console.log(myFunc3.length) // 1

Víceméně to samé... nezapočítává se (a když je první argument výchozí hodnota, délka je nula). Dobré vědět!

Toto učení nic svět nemění, ale myslím, že je dobré znát tyto drobné detaily jazyka, který každý den píšeme. 🎉

Upraveno: Můj přítel Robin k tomuto článku napsal pěkné pokračování „Vlastnosti délky funkce nelze věřit“. Takže to možná budete chtít zkontrolovat.