every() メソッドは、与えられた関数によって実行されるテストに、配列のすべての要素が通るかどうかをテストします。
注: このメソッドは空の配列ではあらゆる条件式に対して true を返します。
The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
構文
arr.every(callback[, thisArg])
引数
callback- 各要素に対してテストを実行する関数です。次の 3 つの引数を取ります。
element- 現在処理されている要素です。
indexOptional- 現在処理されている要素のインデックスです。
arrayOptionaleveryが実行されている配列です。
thisArgOptionalcallbackを実行するときにthisとして使用するオブジェクト。
返り値
コールバック関数が配列のすべての要素について truthy 値を返した場合は true。それ以外は false。
説明
every は、与えられた callback 関数を、配列に含まれる各要素に対して一度ずつ、callback が falsy 値を返す要素が見つかるまで呼び出します。そのような要素が見つかると、every メソッドはただちに false を返します。callback がすべての要素に対して truthy 値を返した場合、every は true を返します。callback は値が代入されている配列のインデックスに対してのみ呼び出されます。つまり、すでに削除されたインデックスや、まだ値が代入されていないインデックスに対しては呼び出されません。
callback は、要素の値、要素のインデックス、走査されている Array オブジェクトという 3 つの引数をともなって呼び出されます。
every に thisArg パラメータが与えられると、callback の呼び出しのたびにそのオブジェクトが this として使用されます。それ以外は this の値として undefined が使われます。callback が最終的に監視できる this の値は、関数から見た this の決定に関する一般的なルールによって決定されます。
every は呼び出された配列を変化させません。
every によって処理される要素の範囲は、callback が最初に呼び出される前に設定されます。every の呼び出しが開始された後に追加された要素に対しては、callback は実行されません。既存の配列要素が変更されたり、削除された場合、callback に渡される値は every がそれらを訪れた時点での値になり、every が削除された要素を訪問することはありません。
every は、数学における「∀ (すべての / for all)」記号と同様のふるまいをします。具体的に言うと、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(x => x >= 10); // false [12, 54, 18, 130, 44].every(x => x >= 10); // true
Polyfill
every は ECMA-262 標準の第 5 版に追加されたメソッドであり、規格外の実装には存在しない場合があります。次のコードをスクリプトの先頭に挿入すると、ネイティブでサポートされていない実装でも every を使用できるようになります。このアルゴリズムは ECMA-262 第 5 版で指定されたアルゴリズムとまったく同じものです。TypeError はそれらのオリジナルの値を持ち、また、それらの callbackfn.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 は、this を引数として ToObject に渡し、実行した結果です。
var O = Object(this);
// 2. lenValue は、"length" を引数として O の Get 内部メソッドを実行した結果です。
// 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 は、Pk を引数として O の HasProperty 内部メソッドを実行した結果です。
// このステップは c と組み合わせられます。
// c. kPresent が true の場合、続きます。
if (k in O) {
// i. kValue は、Pk を引数として O の Get 内部メソッドを実行した結果です。
kValue = O[k];
// ii. testResult は、this 値としての T と、kValue、k、0 を含む引数リストを
// ともなって、callbackfn の Call 内部メソッドを実行した結果です。
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 Latest Draft (ECMA-262) Array.prototype.every の定義 |
ドラフト |
ブラウザー実装状況
| デスクトップ | モバイル | サーバー | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
every | Chrome 完全対応 1 | Edge 完全対応 12 | Firefox 完全対応 1.5 | IE 完全対応 9 | Opera 完全対応 あり | Safari 完全対応 あり | WebView Android 完全対応 ≤37 | Chrome Android 完全対応 18 | Firefox Android 完全対応 4 | Opera Android 完全対応 あり | Safari iOS 完全対応 あり | Samsung Internet Android 完全対応 1.0 | nodejs 完全対応 あり |
凡例
- 完全対応
- 完全対応