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 の定義
ドラフト  

ブラウザ実装状況

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeEdge MobileAndroid 版 FirefoxAndroid 版 OperaiOS 版 SafariSamsung InternetNode.js
基本対応Chrome 完全対応 ありEdge 完全対応 ありFirefox 完全対応 1.5IE 完全対応 9Opera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありEdge Mobile 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 あり

凡例

完全対応  
完全対応

関連情報

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

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