【问题标题】:Bizarre IE8 error when using jQuery使用 jQuery 时出现奇怪的 IE8 错误
【发布时间】:2013-09-20 22:32:35
【问题描述】:

我只在 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 是保留字,可能是这样。

标签: javascript jquery html css internet-explorer-8


【解决方案1】:

class 是保留关键字。在它周围加上引号'class'。您可能还必须使用[] 表示法访问该属性,如joeBlow['class']

【讨论】:

  • 请注意,在这种情况下(对象属性名称),在符合 ES5 的浏览器(IE8 不是)中应该不是问题。
  • @bfavaretto - 哇哦,所以class 不是 ES5 及更高版本中的保留字?很高兴知道。 :-)
  • @Karl 是保留字,但保留字适用于变量和函数名,而不是属性名。
【解决方案2】:

正如 plalx 解释的那样,您必须引用 class 并使用 IE 8 的括号表示法来支持将其用作属性名称,因为它是一个保留字。

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

或者,为该属性使用另一个名称。 (注意:这是 W3C 为 className 选择的选项。)

但是,进一步解释原因:

这是由于使用的标准不同。具体来说,IE 8 实现了 ECMAScript 3,而 IE 9 和 10 实现了ECMAScript 5

而且,在 ECMAScript 的这些版本之间,Object initialisersdot notation 的语法已更改为允许任何 IdentifierNames (ES5),其中包括 ReservedWords,而不是将它们限制为 标识符 (ES3)。

标识符 :: IdentifierName 但不是 ReservedWord

【讨论】:

  • 哇,ES5 中的标识符和标识符名称之间甚至有区别?任何东西都可以在 JavaScript 中运行,这真是太神奇了,更不用说跨浏览器或跨版本了。感谢您的帮助。
  • @KarlAnderson 好吧,IdentifiersIdentifierNames 在两个版本中都有相同的定义。只是在某些情况下可以使用的内容发生了变化。
猜你喜欢
  • 1970-01-01
  • 2020-08-30
  • 2013-05-05
  • 1970-01-01
  • 2015-12-19
  • 1970-01-01
  • 2012-05-05
  • 2011-06-16
  • 2011-01-08
相关资源
最近更新 更多