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

4 に答える 4

5

[]一部のブラウザーでサポートされていますが、すべてではありません。

配列のような文字アクセス (上記の 2 番目の方法) は 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>
于 2012-12-28T13:44:48.137 に答える
2

string[x]古いバージョンの IE は、文字列にアクセスするための配列表記 ( ) をサポートしていません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>

もちろん、他の場所からも実行する必要がない限り。

于 2012-12-28T13:44:59.957 に答える
-1

ここconsoleが問題です。このオブジェクトは、IE J​​avascript エンジンには存在しません。

これを行うと、両方で機能します

<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 ではまだ機能しません)。
于 2012-12-28T13:48:12.260 に答える