javascript 익스플로러에서 indexOf 사용하기

표준을 지키면서 웹프로그래밍을 하신다면 IE가 얼마나 애물단지인지 아실겁니다.
javascript 1.6이 2005년도에 표준으로 등록되었지만, IE7-8에서도 지켜지지 않는 부분이 많이 있습니다. 저번 달에는 ECMA 5가 표준으로 발표가 되었죠? IE8에서 많은 부분이 개선되긴 했지만 여전히 문제가 많습니다. 결국 주소창 옆에 호환성 보기를 달아주는 수고까지 보여줬습니다.

본론으로 들어가서 indexOf()는 배열 안에서 원하는 값을 검색할 때 사용합니다. 자동차라는 배열 안에 Jaguar가 있는지 확인하는 용도로 쓸 수 있죠. 이전에는 이러한 작업을 아래와 같이 했습니다.

needle = 'jaguar';
cars = ['jeep', 'jaguar', 'BMW', 'Lexus', 'Hyundai'];
var flgExist = -1;

for (var i=0; i<cars.length; i++) {
    if(cars[i] == needle) {
        flgExist = 1;
        break;
    }
}

indexOf를 사용하면 짧게 끝낼 수 있죠

needle = 'jaguar';
cars = ['jeep', 'jaguar', 'BMW', 'Lexus', 'Hyundai'];
var flgExist = cars.indexOf(needle);

하지만 IE에서는 indexOf를 지원하지 않습니다. 확인해 본 결과 IE7, IE8 전부 그러네요.. 이런 경우 indexOf를 표준이 아니라고 해야 할 지..ㅜㅜ

결국 IE에서 사용하려면 prototype을 만들어 줘야 합니다. 아래와 같이 Array에 prototype을 추가하시면 동일하게 indexOf를 사용할 수 있겠죠..번거롭지만 오늘도 IE를 위해서 몇 줄 더 써 줍니다. –;

if (!Array.indexOf) {
  Array.prototype.indexOf = function (obj, start) {
    for (var i = (start || 0); i < this.length; i++) {
      if (this[i] == obj) {
        return i;
      }
    }
  }
}

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s