MDN wants to learn about developers like you: https://qsurvey.mozilla.com/s3/MDN-dev-survey

every() 메소드는 배열의 모든 요소가 제공한 함수로 구현된 테스트를 통과하는지를 테스트합니다.

구문

arr.every(callback[, thisArg])

매개변수

callback
각 요소를 테스트하는 함수, 인수 셋을 취하는:
currentValue
배열에서 현재 처리 중인 요소.
index Optional
배열에서 현재 처리 중인 요소의 인덱스.
array Optional
every가 호출한 배열.
thisArg
선택 사항. callback을 실행할 때 this로서 사용하는 값.

반환값

콜백 함수가 모든 배열 요소에 대해 참인(truthy) 값을 반환하는 경우 true; 그렇지 않으면, false.

설명

every 메소드는 callback이 거짓인(falsy) 값(Boolean으로 변환할 때 false가 되는 값)을 반환하는 요소를 찾을 때까지 배열에 있는 각 요소에 대한 한 번씩 제공한 callback 함수를 실행합니다. 그런 요소가 발견된 경우, every 메소드는 즉시 false를 반환합니다. 그렇지 않고, callback이 모든 요소에 대해 true 값을 반환하는 경우, everytrue를 반환합니다. callback은 할당한 값이 있는 배열의 인덱스에 대해서만 호출됩니다; 삭제됐거나 값이 할당된 적이 없는 인덱스에 대해서는 호출되지 않습니다.

callback은 세 인수(요소값, 요소 인덱스 및 순회되는 Array 객체)와 함께 호출됩니다.

thisArg 매개변수가 every에 제공되는 경우, callback이 호출될 때 전달됩니다, this 값으로 사용하기 위해. 그렇지 않으면, undefined 값이 그 this 값으로 사용하기 위해 전달됩니다. 결국 callback에 의해 관찰할 수 있는 this 값은 함수에 의해 보이는 this를 결정하는 평소 규칙에 따라 결정됩니다.

every는 호출되는 배열을 변화시키지(mutate) 않습니다.

every에 의해 처리되는 요소의 범위는 첫 callback 호출 전에 설정됩니다. every 호출이 시작한 뒤 배열에 추가된 요소는 callback에 의해 방문되지 않습니다. 배열의 기존 요소가 변경되는 경우, callback에 전달한 그 값은 every가 요소를 방문한 시점의 값이 됩니다; 삭제된 요소는 방문되지 않습니다.

every는 (이산)수학에서 전칭("for all", ∀) 정량자(quantifier, 한정자)처럼 행동합니다. 특히, 빈 배열에 대해서는 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판에서 서술한 겁니다, ObjectTypeError가 원래값을 갖고 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" 인수가 있는 0의 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 연산자의 좌변(LHS) 피연산자에 대한 암시(implicit)임
      // b. Let kPresent를 Pk 인수가 있는 0의 HasProperty
      //    내부 메소드 호출의 결과이게 함.
      //    이 과정은 c와 결합될 수 있음
      // c. kPresent가 true인 경우, 그러면
      if (k in O) {

        // i. kValue를 인수 Pk가 있는 0의 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)
The definition of 'Array.prototype.every' in that specification.
Standard 초기 정의. JavaScript 1.6에서 구현됨.
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Array.prototype.every' in that specification.
Standard  
ECMAScript 2017 Draft (ECMA-262)
The definition of 'Array.prototype.every' in that specification.
Draft  

브라우저 호환성

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support (Yes) 1.5 (1.8) 9 (Yes) (Yes)
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support (Yes) (Yes) 1.0 (1.8) (Yes) (Yes) (Yes)

참조

문서 태그 및 공헌자

 이 페이지의 공헌자: Netaras, Kaben, preco21
 최종 변경: Netaras,