이 방법은 많은 프로그래밍 언어에 해당 구현이 있으며 JavaScript도 예외는 아닙니다. 그러나 IE에서 다음 코드를 실행할 때:
var arr = [1,2,3]
alert(arr.indexOf(1));
그런데 "개체가 이 속성과 메서드를 지원하지 않습니다"라는 메시지가 표시되었습니다. 크롬과 ff에서는 잘 돌아갑니다. 그래서 Google 전문가에게 물어보니 js의 Array의 indexOf 메소드는 js1.6 버전에서만 구현되었고 IE 8에서는 js1.3 버전만 구현되었으며 chrome은 js1.7 버전, ff는 js1.8이었습니다. 버전. (즉, 여전히 반 비트 더 느립니다). IE용으로 확장할 수밖에 없습니다.
Array.prototype._indexOf = function(n){
if("indexOf" in this){
return this["indexOf"](n)
}
for(var i=0;iif(n===this[i]){
return i
}
}
return -1; 🎜>};
은 다음과 같이 사용됩니다.
var arr = ["1","2","3"]
alert(arr._indexOf("2"))
여기서는 Array 프로토타입을 확장했는데, 확장에서는 메서드 이름에 "_" 문자를 추가하는 것이 좋은 습관이라고 생각합니다.
_indexOf 메서드에서는 먼저 현재 Array가 "indexOf" 메서드를 구현하는지 확인합니다. 그렇다면 시스템 메서드를 직접 호출하고, 그렇지 않으면 순회합니다.