代码之家  ›  专栏  ›  技术社区  ›  Felix

0 in[1,2]==真,为什么?

  •  15
  • Felix  · 技术社区  · 15 年前

    我的javascript控制台摘录:

    > 0 in [1, 2]
    true
    

    为什么?

    3 回复  |  直到 15 年前
        1
  •  23
  •   Adam Wright    15 年前

    因为如果指定的属性/索引在对象中可用,“In”将返回true。[1,2]是一个数组,在0索引处有一个对象。因此,0 in[1,2]和1 in[1,2]。但是!(2英寸[1,2])。

    编辑:对于你可能想要的,大卫多沃德下面的评论是非常有用的。如果您(有点反常地)希望坚持使用“in”,则可以使用对象文本

    x = {1: true, 2: true};
    

    这应该允许 1 in x && 2 in x && !(0 in x) 等等,但实际上,只是使用indexof。

        2
  •  6
  •   Egon    15 年前

    因为有一个 0 -数组中的第个元素。

    > 0 in [8,9]
    true
    > 1 in [8,9]
    true
    > 8 in [8,9]
    false
    
        3
  •  2
  •   PatrikAkerstrand    15 年前

    你可能在找 [1,2].indexOf(0) . indexOf 但在IE6中可能不起作用。

    下面是一个修复它的实现:

    if(!Array.indexOf) {
       Array.prototype.indexOf = function(obj) {
          for(var i=0; i<this.length; i++) {
             if (this[i]==obj) {
                return i;
             }
           }
           return -1;
        }
    }