#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);)