every() メソッドは、与えられた関数によって実行されるテストに、配列のすべての要素が通るかどうかをテストします。

構文

arr.every(callback[, thisArg])

引数

callback
各要素に対してテストを実行する関数。次の 3 つの引数を取る。
currentValue (必須)
現在処理されている要素。
index (optional)
現在処理されている要素のインデックス。
array (optional)
every が実行されている配列。
thisArg
callback を実行するときに this として使用するオブジェクト。

返り値

コールバック関数が配列のすべての要素について truthy 値を返した場合は true。それ以外は false

説明

every は、与えられた callback 関数を、配列に含まれる各要素に対して一度ずつ、callbackfalsy 値を返す要素が見つかるまで呼び出します。 そのような要素が見つかると、every メソッドはただちに false を返します。 callback がすべての要素に対して truthy 値を返した場合、everytrue を返します。 callback は値が代入されている配列のインデックスに対してのみ呼び出されます。つまり、すでに削除されたインデックスや、まだ値が代入されていないインデックスに対しては呼び出されません。

callback は、要素の値、要素のインデックス、走査されている Array オブジェクトという 3 つの引数をともなって呼び出されます。

everythisArg パラメータが与えられると、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.callFunction.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;
  };
}

仕様

仕様 状態 Comment
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 の定義
ドラフト  

 

ブラウザ実装状況

Kangax's compat tables に基づく。

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help!

機能 Chrome Firefox (Gecko) Internet Explorer Opera Safari
基本サポート (有) (有) 9 (有) (有)
機能 Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
基本サポート ? ? ? ? ? ?

関連情報

ドキュメントのタグと貢献者

 このページの貢献者: sii, teoli, ethertank, Potappo, Shoot
 最終更新者: sii,