javascript“in”奇怪或正常的行为?

时间:2009-10-23 13:29:23

标签: javascript arrays

我有一个多重选择,我做了一个函数来检查几个参数,每个参数以另一种形式打印不同的值:

if ( (tot_v >= 10) || (perc_a < 100) ) {
    $("#DA_IDO").val('1');
}

if ( (tot_v > 3) && (tot_v < 10) && (perc_a == 100) ) {
    $("#DA_IDO").val('2');
}   

if ( (tot_v <= 3) && (perc_a == 100) ) {
    $("#DA_IDO").val('3');
}

然后我们来指责:

if ( !( array in {'One':'', 'Two':'','Three':'','Four':'','Five':''}) ) {
    $("#DA_IDO").val('5');
}

这样可行,但在我看来,如果array =(One,Ten),if应该不起作用,因为数组中的至少一个项目就在那里,而不是像if被触发的数组。

我做错了什么?在谷歌搜索“javascript in”是如此困难.-)

由于

4 个答案:

答案 0 :(得分:2)

我认为你误解了“in”声明。 “in”,在javascript中,检查指定的值是否作为属性(或数组中的索引)存在。例如:

var x = { a: 'b', c: 'd' };
if('a' in x){
  //true
}
if('b' in x){
  //false
}

您要做的是确定数组中的任何值是否包含在对象中。为此,你必须使用一个循环,如下所示:

var possible = {'One':'', 'Two':'','Three':'','Four':'','Five':''};
//removed "array" as a variable name, since it's a bit confusing
for(var i = 0; i < values.length; i++){
  if(values[i] in possible){
    //exists
  }
}

有关详细信息,请查看Mozilla文档: https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Operators/Special_Operators/in_Operator

答案 1 :(得分:1)

答案 2 :(得分:1)

Mozilla Developer Central page应该澄清它的用途:

  

如果指定的属性在指定的对象中,则in运算符返回true。

左侧应该是属性的名称,例如“一”。您不能使用属性名称数组。

答案 3 :(得分:-1)

这是正常行为,您的变量“array”是一个数组(当您将其设置为('One','Ten')时),因此它不是int {'One':'', 'Two':'','Three':'','Four':'','Five':''}(但是“One”)。

if阻止的原因有效,因为您正在检查NOT IN('!')。

我希望我在这里没有错过任何内容。