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()是一个不应该使用的旧的讨厌的 hack,并且与 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

...没有换行符。在第二次迭代中,你输出1,2没有换行,所以我们有:

11,2

...第三个,你输出1,2,3

11,21,2,3

...依此类推,直到您排长队为止。由于某种原因,Chrome 最终会丢失它并显示一堆空格,然后是文本,有点混乱。

您可能希望通过移动document.write语句在最后输出最终数组。或者,您可以使用document.writelnwhich 将在每行的末尾放置一个换行符(这似乎让 Chrome 很高兴;但输出对于人类来说仍然很难阅读,因为当然 HTML 中的换行符只会导致空格,而不是实际的换行符)。

但到目前为止,最好使用比 更现代的东西document.write,例如(例如)附加到:http document.body: //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 回答