Checking if a key exists in a JavaScript object?

前端 未结 22 2202
礼貌的吻别
礼貌的吻别 2020-11-21 22:57

How do I check if a particular key exists in a JavaScript object or array?

If a key doesn\'t exist, and I try to access it, will it return false? Or throw an error?<

相关标签:
22条回答
  • 2020-11-21 23:32

    The accepted answer refers to Object. Beware using the in operator on Array to find data instead of keys:

    ("true" in ["true", "false"])
    // -> false (Because the keys of the above Array are actually 0 and 1)
    

    To test existing elements in an Array: Best way to find if an item is in a JavaScript array?

    0 讨论(0)
  • 2020-11-21 23:32

    In 'array' world we can look on indexes as some kind of keys. What is surprising the in operator (which is good choice for object) also works with arrays. The returned value for non-existed key is undefined

    let arr = ["a","b","c"]; // we have indexes: 0,1,2
    delete arr[1];           // set 'empty' at index 1
    arr.pop();               // remove last item
    
    console.log(0 in arr,  arr[0]);
    console.log(1 in arr,  arr[1]);
    console.log(2 in arr,  arr[2]);

    0 讨论(0)
  • vanila js

    yourObjName.hasOwnProperty(key) : true ? false;
    

    If you want to check if the object has at least one property in es2015

    Object.keys(yourObjName).length : true ? false
    
    0 讨论(0)
  • 2020-11-21 23:38

    The easiest way to check is

    "key" in object
    

    for example:

    var obj = {
      a: 1,
      b: 2,
    }
    "a" in obj // true
    "c" in obj // false
    

    Return value as true implies that key exists in the object.

    0 讨论(0)
  • 2020-11-21 23:39

    If you are using underscore.js library then object/array operations become simple.

    In your case _.has method can be used. Example:

    yourArray = {age: "10"}
    
    _.has(yourArray, "age")
    

    returns true

    But,

    _.has(yourArray, "invalidKey")
    

    returns false

    0 讨论(0)
  • 2020-11-21 23:40

    Checking for undefined-ness is not an accurate way of testing whether a key exists. What if the key exists but the value is actually undefined?

    var obj = { key: undefined };
    obj["key"] !== undefined // false, but the key exists!
    

    You should instead use the in operator:

    "key" in obj // true, regardless of the actual value
    

    If you want to check if a key doesn't exist, remember to use parenthesis:

    !("key" in obj) // true if "key" doesn't exist in object
    !"key" in obj   // ERROR!  Equivalent to "false in obj"
    

    Or, if you want to particularly test for properties of the object instance (and not inherited properties), use hasOwnProperty:

    obj.hasOwnProperty("key") // true
    

    For performance comparison between the methods that are in, hasOwnProperty and key is undefined, see this benchmark

    0 讨论(0)
提交回复
热议问题