Я получаю странную ошибку только в 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?
class
- зарезервированное ключевое слово. Поместите кавычки вокруг этого 'class'
. Вам также может потребоваться доступ к свойству с помощью []
нотации, как в joeBlow['class']
.
Как объяснил 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