开发者

0 in [1, 2] == true, why?

Excerpt from m开发者_JAVA技巧y JavaScript console:

> 0 in [1, 2]
true

Why?


Because "in" returns true if the specified property/index is available in the object. [1, 2] is an array, and has a object at the 0 index. Hence, 0 in [1, 2], and 1 in [1, 2]. But !(2 in [1, 2]).

Edit: For what you probably intended, David Dorward's comment below is very useful. If you (somewhat perversely) want to stick with 'in', you could use an object literal

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

This should allow 1 in x && 2 in x && !(0 in x) etc. But really, just use indexOf.


Because there is a 0-th element in the array.

> 0 in [8,9]
true
> 1 in [8,9]
true
> 8 in [8,9]
false


You are probably looking for [1,2].indexOf(0). indexOf might not work in ie6 though.

Here is one implementation that fixes it:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜