Сводка
Метод every()
проверяет, удовлетворяют ли все элементы массива условию, заданному в передаваемой функции.
Синтаксис
arr.every(callback[, thisArg])
Параметры
callback
- Функция проверки каждого элемента, принимает три аргумента:
currentValue
- Текущий обрабатываемый элемент массива.
index
- Индекс текущего обрабатываемого элемента массива.
array
- Массив, по которому осуществляется проход.
thisArg
- Необязательный параметр. Значение, используемое в качестве
this
при выполнении функцииcallback
.
Описание
Метод every()
вызывает переданную функцию callback
один раз для каждого элемента, присутствующего в массиве до тех пор, пока не найдет такой, для которого callback
вернет ложное значение (значение, становящееся равным false
при приведении его к типу Boolean
). Если такой элемент найден, метод every()
немедленно вернёт false
. В противном случае, если callback
вернёт true
для всех элементов массива, метод every()
вернёт true
. Функция callback
вызывается только для индексов массива, имеющих присвоенные значения; она не вызывается для индексов, которые были удалены или которым значения никогда не присваивались.
Функция callback
вызывается с тремя аргументами: значением элемента, индексом элемента и массивом, по которому осуществляется проход.
Если в метод every()
был передан параметр thisArg
, при вызове callback
он будет использоваться в качестве значения this
. В противном случае в качестве значения this
будет использоваться значение undefined
. В конечном итоге, значение this
, наблюдаемое из функции callback
, определяется согласно обычным правилам определения this
, видимого из функции.
Метод every()
не изменяет массив, для которого он был вызван.
Диапазон элементов, обрабатываемых методом every()
, устанавливается до первого вызова функции callback
. Элементы, добавленные в массив после начала выполнения метода every()
, не будут посещены функцией callback
. Если существующие элементы массива изменятся, значения, переданные в функцию callback
, будут значениями на тот момент времени, когда метод every()
посетит их; удалённые элементы посещены не будут.
Метод every()
действует подобно квантору всеобщности в математике. В частности, он вернёт true
для пустого массива. Это так называемая бессодержательная истина (vacuously true) — все элементы пустого множества (англ.) удовлетворяют любому заданному условию.
Примеры
Пример: проверка размера всех элементов массива
Следующий пример проверяет, являются ли все элементы массива числами, большими 10.
function isBigEnough(element, index, array) { return element >= 10; } [12, 5, 8, 130, 44].every(isBigEnough); // false [12, 54, 18, 130, 44].every(isBigEnough); // true
Пример: использование стрелочных функций
Стрелочные функции предоставляют более краткий синтаксис для подобных проверок.
[12, 5, 8, 130, 44].every(elem => elem >= 10); // false [12, 54, 18, 130, 44].every(elem => elem >= 10); // true
Полифилл
Метод every()
был добавлен к стандарту ECMA-262 в 5-м издании; поэтому он может не присутствовать в других реализациях стандарта. Вы можете работать с ним, добавив следующий код в начало ваших скриптов, он позволяет использовать every()
в реализациях, которые не поддерживают этот метод. Этот алгоритм является точно тем, что описан в ECMA-262 5-го издания; и предполагает что Object
и TypeError
имеют свои первоначальные значения и что callback.call
вычисляется в оригинальное значение Function.prototype.call()
.
if (!Array.prototype.every) { Array.prototype.every = function(callbackfn, thisArg) { 'use strict'; var T, k; if (this == null) { throw new TypeError('this is null or not defined'); } // 1. Положим O равным результату вызова ToObject над значением // this, переданным в качестве аргумента. var O = Object(this); // 2. Положим lenValue равным результату вызова внутреннего метода Get // объекта O с аргументом "length". // 3. Положим len равным ToUint32(lenValue). var len = O.length >>> 0; // 4. Если IsCallable(callbackfn) равен false, выкинем исключение TypeError. if (typeof callbackfn !== 'function') { throw new TypeError(); } // 5. Если thisArg присутствует, положим T равным thisArg; иначе положим T равным undefined. if (arguments.length > 1) { T = thisArg; } // 6. Положим k равным 0. k = 0; // 7. Пока k < len, будем повторять while (k < len) { var kValue; // a. Положим Pk равным ToString(k). // Это неявное преобразование для левостороннего операнда в операторе in // b. Положим kPresent равным результату вызова внутреннего метода // HasProperty объекта O с аргументом Pk. // Этот шаг может быть объединён с шагом c // c. Если kPresent равен true, то if (k in O) { // i. Положим kValue равным результату вызова внутреннего метода Get // объекта O с аргументом Pk. kValue = O[k]; // ii. Положим testResult равным результату вызова внутреннего метода Call // функции callbackfn со значением T в качестве this и списком аргументов, // содержащим kValue, k и O. var testResult = callbackfn.call(T, kValue, k, O); // iii. Если ToBoolean(testResult) равен false, вернём false. if (!testResult) { return false; } } k++; } return true; }; }
Спецификации
Спецификация | Статус | Комментарии |
---|---|---|
ECMAScript 5.1 (ECMA-262) Определение 'Array.prototype.every' в этой спецификации. |
Стандарт | Изначальное определение. Реализована в JavaScript 1.6. |
ECMAScript 2015 (6th Edition, ECMA-262) Определение 'Array.prototype.every' в этой спецификации. |
Стандарт | |
ECMAScript 2017 Draft (ECMA-262) Определение 'Array.prototype.every' в этой спецификации. |
Черновик |
Совместимость с браузерами
Возможность | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Базовая поддержка | (Да) | 1.5 (1.8) | 9 | (Да) | (Да) |
Возможность | Android | Chrome для Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Базовая поддержка | (Да) | (Да) | 1.0 (1.8) | (Да) | (Да) | (Да) |