> 웹 프론트엔드 > JS 튜토리얼 > IE8에서 `Array.indexOf()`가 실패하는 이유는 무엇이며 어떻게 해결할 수 있습니까?

IE8에서 `Array.indexOf()`가 실패하는 이유는 무엇이며 어떻게 해결할 수 있습니까?

DDD
풀어 주다: 2024-11-21 00:36:17
원래의
900명이 탐색했습니다.

Why Does `Array.indexOf()` Fail in IE8, and How Can It Be Fixed?

IE8에서 Array.indexOf() 함수 실패

배열에 있는 요소의 인덱스를 확인하는 데 사용되는 indexOf() 함수 , 9 이전 Internet Explorer(IE) 버전에서는 문제가 발생합니다. 특히 IE8에서는 이 기능이 예상대로 작동하지 않아 개발자가 당황하게 됩니다.

근본 원인을 추적하려면 다음 기능을 고려하세요. Opera, Firefox, Chrome 등의 브라우저에서 작동합니다.

function CheckMe() {
    var allowed = new Array('docx','xls','xlsx', 'mp3', 'mp4', '3gp', 'sis', 'sisx', 'mp3', 'wav', 'mid', 'amr', 'jpg', 'gif', 'png', 'jpeg', 'txt', 'pdf', 'doc', 'rtf', 'thm', 'rar', 'zip', 'htm', 'html', 'css', 'swf', 'jar', 'nth', 'aac', 'cab', 'wgz');
    var fileinput=document.getElementById('f');
    var ext = fileinput.value.toLowerCase().split('.');
    
    if (allowed.indexOf(ext[1]) == -1) {...
로그인 후 복사

함수가 if (allowed.indexOf(ext[1]) == -1) 조건문을 실행하려고 하면 오류가 발생합니다. . IE8에서는 indexOf()가 배열에 지원되지 않아 코드가 실패하게 됩니다.

이 문제를 해결하려면 다음 수정 사항을 구현할 수 있습니다.

if (!Array.prototype.indexOf)
{
  Array.prototype.indexOf = function(elt /*, from*/)
  {
    var len = this.length >>> 0;

    var from = Number(arguments[1]) || 0;
    from = (from < 0)
         ? Math.ceil(from)
         : Math.floor(from);
    if (from < 0)
      from += len;

    for (; from < len; from++)
    {
      if (from in this &&
          this[from] === elt)
        return from;
    }
    return -1;
  };
}
로그인 후 복사

이 수정 사항은 indexOf를 추가합니다. () 메소드가 존재하지 않는 경우 Array 프로토타입에 추가합니다. 특히 누락된 IE8 이하를 대상으로 합니다. 이 수정 사항을 통합하면 CheckMe() 함수가 의도한 대로 작동하여 IE8의 문제가 해결됩니다.

위 내용은 IE8에서 `Array.indexOf()`가 실패하는 이유는 무엇이며 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿