2010-12-10 171 views
0

我试图运行一个脚本,如果[i]存在(意思是存在[i]的值,任何值)或另一部分运行if [i]没有价值,任何人都能照亮我吗?检查[i]是否存在

我讲的for循环,像

for(var i=0;i<data.length;i++){ 
if(var i == doesnt exist){ 
code1 runs 
} 
else{ 
code2 runs 
} 

继承人的代码的HTML

<script> 
function funfacts(o){ 
    var facts = document.getElementById('funfacts'); 
    var data = o.query.results.a; 
    for(var i=0;i<data.length;i++){ 
     var out = document.createElement('a'); 
     facts.appendChild(out); 
     out.href = data[i].href; 
     out.innerHTML = data[i].alt; 
     out.appendChild(document.createElement('br')); 
    } 
} 
</script> 
+0

'data [i]'应该是什么?它会存在,因为你正在循环现有的元素。你想知道它是否为空? – 2010-12-10 09:47:51

+0

是的,我需要知道它是空还是不存在,然后继续执行其余代码 – Shadow 2010-12-10 10:07:35

+0

它不能**不存在,因为它是数据数组/对象的元素。您需要告诉我们在数据中应该看到如何测试它们的存在。 – 2010-12-10 10:11:20

回答

1
for(var i=0;i<data.length;i++){ 
    if(data[i]){ 
    code1 runs 
    } else { 
    code2 runs 
    } 
} 

这是假设你迭代虽然数组和一些数组中的对象是null。否则,这个循环将永远不会超过最后一个数组索引,所以没有必要保护它,除非在数组中实际上有null

请注意,这也会失败一个零,因为在javascript中被认为是零。如果这是你的情况有问题,你可以用null

​​

对照,并在循环外,你可以检查,看看如果一个数组的索引值都通过:

if (typeof(data[i]) === 'undefined') { 

这将看看在该索引处是否有值,可能是false,零,null或其他任何内容,并且此测试会通过。

但是,在该循环内,它保证在数组范围内。

+0

没有办法,我的意思是,它什么都不做:S – Shadow 2010-12-10 09:55:25

0

如果你之前只是创建了一行,'i'不能存在吗?

如果被设置为undefined内环路您可以检查:

for(var i=0;i<data.length;i++){ 
    if(i){ 
     //code1 runs 
    } 
    else{ 
    //code2 runs 
    } 
} 
1

您的代码:

for(var i=0;i<data.length;i++){ 
    if(var i == doesnt exist){ 
     code1 runs // this will never be executed 
    } 
    else{ 
     code2 runs 
    } 
} // I don't see this brace in your code, so I assume it's here 

等同于:

for(var i=0;i<data.length;i++){ 
    code2 runs 
} 

也许你的意思是这个:

if(data.length == 0) { 
    code2 runs 
} 
else { 
    for(var i=0;i<data.length;i++){ 
     code 1 runs 
    } 
}