【问题标题】:IE9 array does not support indexOfIE9 数组不支持 indexOf
【发布时间】:2011-12-09 04:23:22
【问题描述】:

基于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

【问题讨论】:

标签: javascript internet-explorer-9


【解决方案1】:

您确定您的页面在 IE9 模式下运行吗?签入开发工具 (F12)。如果您有旧的 DOCTYPE,您可能会在 IE8/7 模式下看到您的页面,因此不支持 indexOf。如果您在 IE9 模式下运行,那么它工作得很好。

【讨论】:

  • 我建议使用 HTML5 doctype: 它适用于任何地方并且是面向未来的(至少我喜欢这样认为)。
  • 我不确定这是否会将旧版 IE 切换到符合标准的模式,但也许是时候停止关心了。
  • 较旧的 IE 不支持 Array 的 indexOf,因此无论如何您都应该为它们准备一个 shim。这不仅包括较旧的 IE,还包括其他浏览器的较旧版本——它们现在也在使用。
  • 不,他们没有。但是它们会以怪异模式呈现页面,这可能会产生其他不利的副作用。 MDC 有一个很好的“兼容性”部分,介绍如何将indexOf() 添加到本身不支持它的浏览器:developer.mozilla.org/en/JavaScript/Reference/Global_Objects/…
【解决方案2】:

您的代码看起来正确,this compatibility table 表明 IE9 应该支持 indexOf() 并检查您的实际浏览器的兼容性。

尝试打开它并查看您的结果。也许你在 IE7/8 或其他的兼容模式下运行 IE。

this jsfiddle 在我的 IE9 中工作 - 请也尝试一下。

【讨论】:

    【解决方案3】:

    显式声明数组可能会有所帮助:

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

    【讨论】:

    • 没有什么区别,这行得通:jsfiddle.net/byFYT - 问题是兼容模式。
    • 好的,很好。有时所有版本的 IE 都需要特殊处理。很高兴这里不是这样。
    • new Array(...) 和 new Object() 语法是不好的做法。始终使用数组和对象字面量代替。 (即 var x = { foo: 'bar' } 而不是: var x = new Object(); x.foo = 'bar'; 和 [1, 2, 3] 而不是 new Array(1, 2, 3) ;)
    猜你喜欢
    • 2012-10-29
    • 2012-02-09
    • 2012-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多