A Subtle Javascript Mistake
January 29th, 2010I was just pounding my head against what turned out to be a simple Javascript misconception that I hope I can save people from: in tests for the existance of a key, not a value, in an object or array. So the following work:
var myObj = {1: "one", 2: "two"} 1 in myObj // -> true 2 in myObj // -> true var myArr = [1, 2] 0 in myArr // -> true 1 in myArr // -> true
But you might be surprised at the following results (I was):
2 in myArr // -> false
That is because myArr has values 1 and 2 at keys 0 and 1, respectively. To test the existence of a value in an array, you need to use indexOf. For instance:
myArr.indexOf(1) // -> 0 myArr.indexOf(2) // -> 1 myArr.indexOf("doesn't exist") // -> -1
As you can see, -1 indicates the value does not exist in the array.