在Internet Explorer中JavaScript数组索引为“undefined”

3
以下脚本会对字符串中的每个字符打印出undefined,但在Chrome中可以正常工作。
<script>
function main()
{
    var x = "hello world";
    for ( var i = 0; i < x.length; ++i ) {
        console.log( x[i] );
    }
}
main();
</script>

是否需要对数组进行处理,以使其在所有浏览器中正常工作?

4个回答

5

[]在某些浏览器中得到支持,但不是所有浏览器都支持:

类似数组的字符访问(如上面的第二种方式)不属于ECMAScript 3的一部分。它是JavaScript和ECMAScript 5的功能。

为了最大限度地提高兼容性,请改用String.charAt()

<script>
function main()
{
    var x = "hello world";
    for ( var i = 0; i < x.length; ++i ) {
        console.log( x.charAt(i) );
    }
}
main();
</script>

IE8 完美支持 [],包括字符串,请查看我的回答。 - Marco Demaio

2

旧版本的IE不支持使用数组表示法(string[x]) 访问字符串,所以请使用charAt()替代。

<script>
    function main() {
        var x = "hello world";
        for ( var i = 0; i < x.length; ++i ) {
            console.log( x.charAt(i) );
        }
    }
    main();
</script>

此外,如果你正在直接执行函数,你也可以创建一个自执行的匿名函数(以保留作用域/不污染全局命名空间)。
<script>
    (function main() {
        var x = "hello world";
        for ( var i = 0; i < x.length; ++i ) {
            console.log( x.charAt(i) );
        }
    }());
</script>

除非你当然还需要从其他地方运行它。

IE8 完美支持它,详见我的回答。 - Marco Demaio
@MarcoDemaio: IE8也支持console.log() - Cerbrus
那我如何在IE8中登录?简单:IE开发人员工具比IE 10旧得多。OP谈论的是“JavaScript数组索引未定义”。这与控制台毫无关系。 - Cerbrus
console 对象仅适用于 IE10,我已经测试过了。如果您不信任,请参考 Microsoft 的参考文献:http://msdn.microsoft.com/en-us/library/hh772192(v=vs.85).aspx。 - Marco Demaio
@MarcoDemaio 也许OP正在以怪异模式运行页面,那么 [] 将无法工作。 - Teemu
显示剩余2条评论

-1

问题出在console上。这个对象在IE的Javascript引擎中不存在。

如果你这样做,它就可以在两者中都正常工作。

<script>
function main()
{
    var x = "hello world", result = "";
    for ( var i = 0; i < x.length; ++i )
       result += x[i];
    document.write(result); //it prints "hello world" on page
}
main();
</script>

编辑:

  • console 对象在 IE10 以前不存在(正如 Cerbrus 所指出的那样,除非您打开 IE 开发工具,在这种情况下它也存在于 IE8 上)
  • [] 访问字符串字符可以在 IE8+ 中使用(在 IE7 上尚不起作用)

尝试在不支持“console.log”的IE版本上运行此代码。这些版本也不支持字符串的类数组访问。 - Cerbrus
IE7不支持我的代码,但我想用户现在应该不再使用IE7了。无论如何,我已经更新了答案,仍然IE8、IE9和IE10都支持[],它们不需要charAt。这就是为什么我认为用户的问题在于这里的console.log - Marco Demaio
以下脚本将在控制台打印未定义(undefined)。确实有一个控制台 :) - Salman A
您的编辑有误:如果用户安装了开发工具,console 在IE8/9中是存在的。 - Cerbrus

-1
如果您使用以下代码,请尝试将TimeOut值增加到最大值...
window.setTimeOut('Your Js function(), 150)

现在,它增加到

window.setTimeOut('Your Js function(), 2000)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接