4

My site just started returning false for the following javascript check. I am trying to understand why.

_test = ["0e52a313167fecc07c9507fcf7257f79"]
"0e52a313167fecc07c9507fcf7257f79" in _test
>>> false
_test[0] === "0e52a313167fecc07c9507fcf7257f79"
>>> true 

Can someone help me understand why ?

Nix
  • 57,072
  • 29
  • 149
  • 198
  • possible duplicate of [Javascript - check array for value](http://stackoverflow.com/questions/11015469/javascript-check-array-for-value) – Nix Apr 09 '13 at 21:05

3 Answers3

6

the in operator tests if a property is in an object. For example

var test = {
    a: 1,
    b: 2 
};

"a" in test == true;
"c" in test == false;

You want to test if an array contains a specific object. You should use the Array#indexOf method.

test.indexOf("0e52...") != -1 // -1 means "not found", anything else simply indicates the index of the object in the array.

Array#indexOf at MDN: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/indexOf

Bart
  • 26,399
  • 1
  • 23
  • 24
1

From the MDN :

The in operator returns true if the specified property is in the specified object.

It checks the key, not the value.

There, the property key would be 0, not "0e52a313167fecc07c9507fcf7257f79".

You can test that 0 in _test is true.

If you want to check if a value is in an array, use indexOf :

_test.indexOf("0e52a313167fecc07c9507fcf7257f79")!==-1

(a shim given by the MDN is necessary for IE8)

Denys Séguret
  • 372,613
  • 87
  • 782
  • 758
0

"in" operator searches in object keys, not values. You will have to use indexOf and take care of its non implentation in previous IE versions. So you may find a cross browser implementation for the Array.prototype.indexOf method on the first google result.

atondelier
  • 2,424
  • 15
  • 11