Странная ошибка IE8 при использовании jQuery

0

Я получаю странную ошибку только в IE8, а не в IE9. Сообщение об ошибке:

SCRIPT1028: ожидаемый идентификатор, строка или номер

Вот моя разметка:

<style>
    .warrior { color: red; }
    .ninja  { color: blue; }
    .wizard { color: green; }
</style>

<div id="player"></div>
<script src="Scripts/jquery.min.js"></script>
<script>
    (function () { 
        "use strict"; 

        var joeBlow = {
            name: "Joe Blow",
            class: "ninja", 
            age: 35
        };
        $("#player").html(joeBlow.name + " " + joeBlow.age).addClass(joeBlow.class);
    }());
</script>

Я ожидаю, что у DIV будет "Joe Blow 35", написанный синим цветом, но я получаю ошибку выше.

Что вызывает это в IE8, но не IE9 или IE10?

Теги:
internet-explorer-8

2 ответа

6
Лучший ответ

class - зарезервированное ключевое слово. Поместите кавычки вокруг этого 'class'. Вам также может потребоваться доступ к свойству с помощью [] нотации, как в joeBlow['class'].

  • 0
    Обратите внимание, что в этом контексте (имя свойства объекта) это не должно быть проблемой в браузерах, совместимых с ES5 (которых нет в IE8).
  • 0
    @bfavaretto, да IE8 - это боль, я должен работать с этим каждый день ...
Показать ещё 2 комментария
2

Как объяснил plalx, вам придется процитировать class и использовать условное обозначение для IE 8, чтобы поддерживать его как имя свойства, так как это зарезервированное слово.

var joeBlow = {
    name: "Joe Blow",
    'class': "ninja", 
    age: 35
};
$("#player").html(/* ... */).addClass(joeBlow['class']);

Или используйте другое имя для свойства. (Примечание. Это опция W3C, className для className.)

Но, чтобы объяснить далее, почему:

Это связано с различием в используемых стандартах. В частности, IE 8 реализует ECMAScript 3, в то время как IE 9 и 10 реализуют ECMAScript 5.

И между этими выпусками ECMAScript синтаксис инициализаторов Object и точечной нотации изменился, чтобы разрешить любые Идентификационные имена (ES5), которые включают ReservedWords, а не ограничивать их только идентификаторами (ES3).

Идентификатор :: ИдентификаторName, но не ReservedWord

  • 0
    Вау, так есть ли разница между идентификаторами и именами идентификаторов в ES5? Удивительно, что что-то работает на JavaScript, не говоря уже о кросс-браузерной или кросс-версии. Спасибо за вашу помощь.
  • 0
    @KarlAnderson Ну, идентификаторы и IdentifierNames находятся в обеих редакциях и имеют одинаковые определения. То, что можно использовать в определенных контекстах, изменилось.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню