在我的javascript代码中找不到错误

时间:2013-06-27 12:30:08

标签: javascript debugging

这个js程序应显示前100个素数,但每次都会崩溃,我找不到错误!有人能指出我调试js代码的最佳方法吗?!谢谢!

// initialisation of the array p holding the first 100 prime numbers
var p = [];

// set the first prime number to 2
p.push(2);

// find the first 100 prime numbers and place them in the array p
var i = 3;
while (p.length < 100) {
    var prime = true;
    loop:
    for (var item in p){
        if (i%item === 0){
            prime = false;
            break loop;
        }
    }
    if (prime)
        p.push(i);
    i = i + 2;
}

// display the first 100 prime numbers found
var i=1;
for (var item in p){
    document.writeln(i,item);
    i++;
}

4 个答案:

答案 0 :(得分:2)

变化:

for (var item in p) {

为:

for (var i = 0; i < p.length; i++) {
    item = p[i];

for-in遍历对象或数组的键,而不是值。

答案 1 :(得分:1)

首先,将您的算法放入函数并将此函数放入页面html中。像:

<html>
<head>
<script>

function test(){
// initialisation of the array p holding the first 100 prime numbers
var p = [];

// set the first prime number to 2
p.push(2);

// find the first 100 prime numbers and place them in the array p
var i = 3;
while (p.length < 100) {
    var prime = true;
    loop:
    for (var item in p){
        if (i%item === 0){
            prime = false;
            break loop;
        }
    }
    if (prime)
        p.push(i);
    i = i + 2;
}

// display the first 100 prime numbers found
var i=1;
for (var item in p){
    document.writeln(i,item);
    i++;
}
}

</script>
</head>
    <body>
    <a onmouseclick="test()">test</a>
    </body>
</html>

然后在Chrome或Firefox中打开此页面。

按F12打开调试面板。 然后转到Sources标签dans在左侧视图中选择您的页面(例如:test.html)并在行var p =[];上进行停止点调试,然后单击页面上的链接测试以开始调试。 F10进入另一条线,F11进入方法,F8进入下一个停止点。

希望有所帮助。

答案 2 :(得分:1)

只需更改

if (i%item === 0){

if (i % p[item] == 0){

然后它会起作用。

jsfiddle

答案 3 :(得分:0)

这是最终工作代码的样子:

// initialisation of the array p holding the first 100 prime numbers
var p = [];

// set the first prime number to 2
p.push(2);

// find the first 100 prime numbers and place them in the array p
var i = 3;
var item;
var prime;
while (p.length < 100) {
    prime = true;
    for (item in p){
        if (i%p[item] === 0){
            prime = false;
            break;
        }
    }
    if (prime)
        p.push(i);
    i = i + 2;
}

// display the first 100 prime numbers found
var s = "";
for (item in p){
    if (item != p.length - 1){
        s = s + p[item] + ",";
    }
    else{
        s = s + p[item];
    }
}
alert(s);