JavaScript свойство Function.length
Определение и применение
JavaScript свойство length объекта Function соответствует числу аргументов, ожидаемых
функцией. Это значение не включает в себя rest-параметр (остаточные аргументы, собираемые в массив через
...) и только включает параметры перед первым со значением по умолчанию. В отличие от этого свойства,
свойство length объекта
arguments, который является локальным для функции и предоставляет количество аргументов, реально переданных в функцию.
Свойство func.length доступно только для чтения.
Каждый параметр с деструктуризацией (извлечением полей объекта или элементов массива) считается одним параметром. Это
не ограничение числа аргументов при вызове. Присваивание не меняет стандартное length, но его можно
переопределить через Object.defineProperty().
Атрибуты свойства: writable разрешает присваивание, enumerable определяет участие в
перечислении свойств, configurable разрешает удаление и переопределение.
| Атрибут | Значение |
|---|---|
writable |
false |
enumerable |
false |
configurable |
true* |
* - до реализации ECMAScript 2015 атрибут configurable имел значение
false.
Подробную информацию о дескрипторах свойств вы можете получить в описании метода
defineProperty(), который позволяет определить новое или изменить существующее свойство объекта, описывая его дескрипторами.
Поддержка браузерами
Спецификация: ecma262
Поддерживается во всех основных браузерах с 2015 года.
| Возможность | Компьютеры | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
length | 1 | 12 | 1 | 3 | 1 | 18 | 4 | 10.1 | 1 | 1.0 | 4.4 | 1 |
| Configurable: true | 43 | 12 | 37 | 30 | 10 | 43 | 37 | 30 | 10 | 4.0 | 43 | 10 |
поддерживаетсяс ограниченияминет поддержкинет данных≤31 — не позднее версии 31
JavaScript синтаксис:
func.length
Спецификация
ECMAScript — Function: length.
Примеры, попробуйте сами
Какие параметры учитываются в length
Добавьте параметр до значения по умолчанию или после него. Сравните length функции и arguments.length при вызове.
index.html
<p>Результат выполнения выводится в консоль.</p>
main.js
// конструктор Function является объектом Function и его свойство length имеет значение 1
console.log(Function.length) // возвращаемое значение 1
// свойство length объекта прототипа Function имеет значение 0
console.log(Function.prototype.length) // возвращаемое значение 0
console.log(function () {}.length) // возвращаемое значение 0
console.log(function (a) {}.length) // возвращаемое значение 1
console.log(function (a, b) {}.length) // возвращаемое значение 2
console.log(function (...args) {}.length) // возвращаемое значение 0
console.log(function (a, ...args) {}.length) // возвращаемое значение 1 (не включает в себя rest параметры)
console.log(function (a, b, c = 1) {}.length) // возвращаемое значение 2
console.log(function (a, b = 1, c) {}.length) // возвращаемое значение 1 (параметры до первого со значением по умолчанию)
// Деструктуризация считается одним параметром, фактические аргументы — отдельно.
function unpack({ value }, second = 0) {
console.log(arguments.length)
}
console.log(unpack.length) // 1
unpack({ value: 1 }, 2, 3) // 3