0

これが117から300までの数字を出力する理由を誰か教えてもらえますか?

var x = [12, 55, 177];
var y = [25, 75, 255];
var value = [];

for (var i = 1; i <= 300; i++) {
    value.push(JSON.stringify(i));
    document.write(value);
} ​

結果:

117, 118, ..., 299, 300 

(jsFiddle http://jsfiddle.net/minagabriel/6crZW/ )

4

3 に答える 3

5

これは、document.write()使用すべきではない古い厄介なハックであり、jsfiddle と互換性がないためです。

ループからそれを削除して追加すると:

console.log(value);

最後に、配列が正しく蓄積されていることがわかります。

さらに、配列が構築された後にのみ、配列をJSONエンコードする必要がある場合があります。

var value = [];
for (var i = 1; i <= 300; i++) {
    value.push(i);
} 
console.log(JSON.stringify(value));
于 2012-05-10T13:03:34.893 に答える
0

配列の印刷をループの外に移動するだけで機能します。

var x = [12, 55, 177];
var y = [25, 75, 255];
var value = [];

for (var i = 1; i <= 300; i++) {
    value.push(JSON.stringify(i));             
} 

document.write(value);
​

http://jsfiddle.net/6crZW/8/

于 2012-05-10T13:04:05.670 に答える
0

array.pushまず、これはJSONとは関係ありません。:-)

117,118あなたのコードは最初になどを出力しません。Chrome ではこのように表示されます。空白のない行に関連する Chrome の内部制限またはバグに達しているようです。Firefox では、それは行われません。

基本的に、コードは改行なしで配列を繰り返し出力しています。したがって、ループの最初の繰り返しで、出力します

1

...改行なし。2 回目の反復では、1,2改行なしで出力するため、次のようになります。

11,2

...そして 3 番目に、次のように出力します1,2,3

11,21,2,3

...など、非常に長い列ができるまで続けます。何らかの理由で、Chrome は最終的にそれを失い、一連のスペースとそれに続くテキストを少しごちゃ混ぜに表示します。

document.writeおそらく、ステートメントを移動して、最後に最終的な配列を出力したいと思うでしょう。document.writeln別の方法として、各行の最後に改行を入れる which を使用することもできます(これは Chrome を喜ばせるようです。ただし、もちろん、HTML の改行は単に結果としてスペースであり、実際の改行ではありません)。

document.writeしかし、(たとえば)に追加するなど、より現代的なものを使用する方がはるかに優れていますdocument.bodyhttp://jsfiddle.net/CLmYW/

var value = [];

for (var i = 1; i <= 300; i++) {
    value.push(i);
    display(value);
}

function display(msg) {
    var p = document.createElement('p');
    p.innerHTML = msg;
    document.body.appendChild(p);
}

...うまく出力します

1
1,2
1,2,3
1,2,3,4
1,2,3,4,5
1,2,3,4,5,6
1,2,3,4,5,6,7
1,2,3,4,5,6,7,8
1,2,3,4,5,6,7,8,9

...等々。

console.logまた、作業中に状態を確認するのにも非常に役立ちます。最新のすべての主要ブラウザの開発ツールでサポートされています。

JSON.stringify;を削除したことにも注意してください。行っていたのは、インデックス カウンターの文字列バージョンを返すことだけでした。出力では、配列内の数値が実際に数値か文字列かは問題ではありません。

于 2012-05-10T13:43:29.960 に答える