[1,2,3] Länge kann 3 sein, „123“ Länge kann auch 3 sein, jeder, der sich ein wenig mit js auskennt, weiß das.
Aber was bekommen eval.length, RegExp.length, "".toString.length, 1..toString.length?
Wir erhalten jeweils 1, 2, 0, 1. Was bedeuten diese Zahlen?
Tatsächlich bestimmt die Länge der Funktion die Anzahl der formalen Parameter.
Werfen wir einen kurzen Blick auf ein Beispiel:
function test(a,b,c) {} test.length // 3 function test(a,b,c,d) {} test.length // 4
Ist es nicht ganz einfach, aber es gibt auch Besonderheiten: Wenn die Parameter über Argumente innerhalb der Funktion aufgerufen werden, ohne die Parameter tatsächlich zu definieren, erhält die Länge nur 0.
function test() { console.log( arguments );} test.length // 0
Diese Funktion kann zwar Parameter übergeben, und die Parameter werden auch intern aufgerufen, aber die Länge kann die Anzahl der übergebenen Parameter nicht kennen.
Die Anzahl der tatsächlichen Parameter kann nur über die Argumentlänge ermittelt werden, wenn die Funktion ausgeführt wird.
function test() { console.log( arguments.length );} test(1,2,3); // 输出 3 test(1,2,3,4); // 输出 4
Das Längenattribut einer Funktion kann also nur die Anzahl ihrer formalen Parameter erhalten, nicht jedoch die Anzahl der tatsächlichen Parameter.