Массив IE9 не поддерживает indexOf

#javascript #internet-explorer-9

#javascript #internet-explorer-9

Вопрос:

На основе http://ie.microsoft.com/testdrive/HTML5/ECMAScript5Array/Default.html , Я думал, что IE9 поддерживает indexOf в массиве, но следующие разрывы. Есть идеи, почему?

 <script type="text/javascript">
    var a = [59, 20, 75, 22, 20, 11, 63, 29, 15, 77]; 
    var result = a.indexOf(32);//
    document.write(result);
</script>
  

Сообщение об ошибке, как показано ниже:

 SCRIPT438: Object doesn't support property or method 'indexOf' 
  

test.php , строка 9 символ 1

Комментарии:

1. Это работает для меня, но если вам это действительно нужно, есть прокладка в developer.mozilla.org/en/JavaScript/Reference/Global_Objects /.

Ответ №1:

Вы уверены, что ваша страница работает в режиме IE9? Проверьте в инструментах разработки (F12). Если у вас старый DOCTYPE, вы можете видеть свою страницу в режиме IE8 / 7, поэтому indexOf не поддерживается. Если вы работаете в режиме IE9, то он работает просто отлично.

Комментарии:

1. Я предлагаю с помощью HTML5 типа документа: <!DOCTYPE html> это работает везде и будущее (по крайней мере, мне нравится думать, что).

2. Я не уверен, что это переключит старые IE в режим, соответствующий стандартам, но опять же, возможно, пришло время перестать заботиться.

3. Старые ИЕ не поддерживают indexOf для массива, поэтому у вас все равно должна быть прокладка для них. Это включает в себя не только более старые версии, но и более старые версии других браузеров — они также используются в настоящее время.

4. Нет, это не так. Но они будут отображать страницу в режиме quirks, что может иметь другие неблагоприятные побочные эффекты. В MDC есть хороший раздел «Совместимость» о том, как добавлять indexOf() в браузеры, которые изначально его не поддерживают: developer.mozilla.org/en/JavaScript/Reference/Global_Objects /…

Ответ №2:

ваш код выглядит правильно, и эта таблица совместимости показывает, что IE9 должен поддерживать indexOf() и проверяет ваш фактический браузер на совместимость.

попробуйте открыть его и взглянуть на свой результат. возможно, вы используете IE в режиме совместимости для IE7 / 8 или что-то еще.

этот jsfiddle работает в моем IE9 — пожалуйста, попробуйте и это.

Ответ №3:

Это может помочь, если вы объявите массив явно:

 var a = new Array(1,2,3);
a.indexOf(2);
  

Комментарии:

1. это не имеет значения, это работает: jsfiddle.net/byFYT — проблема заключается в режиме совместимости.

2. Хорошо, хорошо. Иногда IE во всех версиях нуждается в специальной обработке. Рад, что здесь это было не так.

3. Синтаксис new Array(…) и new Object() является плохой практикой. Всегда используйте вместо этого литералы массива и объекта. (т.е. var x = { foo: ‘bar’ } вместо: var x = new Object(); x.foo = ‘bar’; и [1, 2, 3] вместо new Array(1, 2, 3);)