有人可以告诉我为什么这会打印从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/)
答案 0 :(得分: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));
答案 1 :(得分: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);
答案 2 :(得分: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.writeln
,它会在每一行的末尾加上一个换行符(这似乎让Chrome很开心;但是输出对人类来说仍然非常难以阅读,因为当然有一个换行符HTML只会产生空格,而不是实际的换行符。
但到目前为止更好的方法是使用比document.write
更现代的东西,比如(例如)附加到document.body
:http://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
;所做的只是返回索引计数器的字符串版本,在输出中,数组中的数字是否真的是数字或字符串无关紧要。