We're looking for a user researcher to understand the needs of developers and designers. Is this you or someone you know? Check out the post: https://mzl.la/2IGzdXS

현재 번역은 완벽하지 않습니다. 한국어로 문서 번역에 동참해주세요.

indexOf () 메서드는 배열에서 지정된 요소를 찾을 수있는 첫 번째 인덱스를 반환하고 존재하지 않으면 -1을 반환합니다.

var a = [2, 9, 9]; 
a.indexOf(2); // 0 
a.indexOf(7); // -1

if (a.indexOf(7) === -1) {
  // 요소가 배열에 존재하지 않습니다.
}

Syntax

arr.indexOf(searchElement)
arr.indexOf(searchElement, fromIndex)

Parameters

searchElement
배열에서 찾을 요소입니다.
fromIndex Optional
검색을 시작할 색인입니다. 인덱스가 배열의 길이보다 크거나 같은 경우 -1이 반환되므로 배열이 검색되지 않습니다. 제공된 색인 값이 음수이면 배열 끝에서부터의 오프셋 값으로 사용됩니다. 참고 : 제공된 색인이 음수이면 배열은 여전히 앞에서 뒤로 검색됩니다. 계산 된 인덱스가 0보다 작 으면 전체 배열이 검색됩니다. 기본값 : 0 (전체 배열 검색).

반환 값

배열 내의 요소의 최초의 인덱스. 발견되지 않으면 -1.

서술

indexOf ()는 엄격한 동등성 (=== 또는 triple-equals 연산자에서 사용하는 것과 같은 메서드)을 사용하여 검색 요소를 Array의 요소와 비교합니다.

예제들

indexOf () 사용하기

다음 예제에서는 indexOf ()를 사용하여 배열의 값을 찾습니다.

var array = [2, 9, 9];
array.indexOf(2);     // 0
array.indexOf(7);     // -1
array.indexOf(9, 2);  // 2
array.indexOf(2, -1); // -1
array.indexOf(2, -3); // 0

요소의 모든 항목 찾기

var indices = [];
var array = ['a', 'b', 'a', 'c', 'a', 'd'];
var element = 'a';
var idx = array.indexOf(element);
while (idx != -1) {
  indices.push(idx);
  idx = array.indexOf(element, idx + 1);
}
console.log(indices);
// [0, 2, 4]

요소가 배열에 존재하는지 확인하고 배열을 업데이트합니다.

function updateVegetablesCollection (veggies, veggie) {
    if (veggies.indexOf(veggie) === -1) {
        veggies.push(veggie);
        console.log('New veggies collection is : ' + veggies);
    } else if (veggies.indexOf(veggie) > -1) {
        console.log(veggie + ' already exists in the veggies collection.');
    }
}

var veggies = ['potato', 'tomato', 'chillies', 'green-pepper'];

updateVegetablesCollection(veggies, 'spinach'); 
// 새로운 채식주의 자 수집은 : 감자, 토마토, 고추, 녹색 후추, 시금치
updateVegetablesCollection(veggies, 'spinach'); 
// 시금치는 이미 채소 컬렉션에 있습니다.

폴리필

indexOf ()는 5 판에서 ECMA-262 표준에 추가되었습니다. 따라서 모든 브라우저에 존재하지 않을 수 있습니다. 스크립트 시작 부분에 다음 코드를 사용하여이 문제를 해결할 수 있습니다. 이것에 의해, 네이티브 지원가없는 경우에 indexOf ()를 사용할 수 있습니다. 이 알고리즘은 TypeError Math.abs() 가 원래 값을 가진다고 가정하고 ECMA-262, 5th edition에 지정된 알고리즘과 일치합니다. 

// ECMA-262, 제 5 판, 15.4.4.14의 생산 단계
// 참조 : http://es5.github.io/#x15.4.4.14
if (!Array.prototype.indexOf) {
  Array.prototype.indexOf = function(searchElement, fromIndex) {

    var k;

    // 1. 이 값을 인수로 전달하는 ToObject를 호출 한 결과를 
    // o라고합니다.
    if (this == null) {
      throw new TypeError('"this" is null or not defined');
    }

    var o = Object(this);

    // 2. lenValue를 Get 함수를 호출 한 결과로 둡니다.
     // 인수가 "length"인 o의 내부 메소드.
     // 3. len을 ToUint32 (lenValue)로 지정합니다.
    var len = o.length >>> 0;

    // 4. len이 0이면 -1을 반환합니다.
    if (len === 0) {
      return -1;
    }

    // 5.Index에서 인수가 전달 된 경우 n을
    // ToInteger (fromIndex); 그렇지 않으면 n은 0이됩니다.
    var n = fromIndex | 0;

    // 6. If n >= len, return -1.
    if (n >= len) {
      return -1;
    }

   // 7. n> = 0 인 경우 k를 n이라고 합니다.
   // 8. 그렇지 않으면 n <0, k는 len - abs (n)이됩니다.
   // k가 0보다 작은 경우 k를 0으로 만듭니다.
    k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);

    // 9. k <len 인 동안 반복한다.
    while (k < len) {
       // a. Pk를 ToString (k)이라고합시다.
       // 이것은 in 연산자의 LHS 피연산자에 대해 암시 적입니다.
       // b. kPresent를 호출 한 결과라고합시다.
       // Hasproperty 인수에 Pk가있는 o의 내부 메소드.
       //이 단계는 c와 결합 될 수 있습니다.
       // c. kPresent가 참이면
       // i. elementK를 Get을 호출 한 결과로합시다.
       // ToString (k) 인수를 가진 o의 내부 메쏘드.
       // ii. 적용한 결과와 동일하게 봅시다.
       // 엄격한 평등 비교 알고리즘
       // searchElement 및 elementK.
       // iii. 동일하면 k를 반환합니다.
      if (k in o && o[k] === searchElement) {
        return k;
      }
      k++;
    }
    return -1;
  };
}

Specifications

Specification Status Comment
ECMAScript 5.1 (ECMA-262)
The definition of 'Array.prototype.indexOf' in that specification.
Standard Initial definition. Implemented in JavaScript 1.6.
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Array.prototype.indexOf' in that specification.
Standard  
ECMAScript Latest Draft (ECMA-262)
The definition of 'Array.prototype.indexOf' in that specification.
Draft  

Browser compatibility

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!

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)

Compatibility notes

  • Starting with Firefox 47 (Firefox 47 / Thunderbird 47 / SeaMonkey 2.44),  this method will no longer return -0. For example, [0].indexOf(0, -0) will now always return +0 (bug 1242043).

See also

문서 태그 및 공헌자

이 페이지의 공헌자: imskojs
최종 변경: imskojs,