Check if an array item is set in JS

前端 未结 9 1108
别跟我提以往
别跟我提以往 2021-02-02 08:10

I\'ve got an array

    var assoc_pagine = new Array();
    assoc_pagine[\"home\"]=0;
    assoc_pagine[\"about\"]=1;
    assoc_pagine[\"work\"]=2;
相关标签:
9条回答
  • 2021-02-02 08:56

    Use the in keyword to test if a attribute is defined in a object

    if (assoc_var in assoc_pagine)
    

    OR

    if ("home" in assoc_pagine)
    

    There are quite a few issues here.

    Firstly, is var supposed to a variable has the value "home", "work" or "about"? Or did you mean to inspect actual property called "var"?

    If var is supposed to be a variable that has a string value, please note that var is a reserved word in JavaScript and you will need to use another name, such as assoc_var.

    var assoc_var = "home";
    assoc_pagine[assoc_var] // equals 0 in your example
    

    If you meant to inspect the property called "var", then you simple need to put it inside of quotes.

    assoc_pagine["var"]
    

    Then, undefined is not the same as "undefined". You will need typeof to get the string representation of the objects type.

    This is a breakdown of all the steps.

    var assoc_var = "home"; 
    var value = assoc_pagine[assoc_var]; // 0
    var typeofValue = typeof value; // "number"
    

    So to fix your problem

    if (typeof assoc_pagine[assoc_var] != "undefined") 
    

    update: As other answers have indicated, using a array is not the best sollution for this problem. Consider using a Object instead.

    var assoc_pagine = new Object();
    assoc_pagine["home"]=0;
    assoc_pagine["about"]=1;
    assoc_pagine["work"]=2;
    
    0 讨论(0)
  • 2021-02-02 08:58
    var assoc_pagine = new Array();
    assoc_pagine["home"]=0;
    

    Don't use an Array for this. Arrays are for numerically-indexed lists. Just use a plain Object ({}).

    What you are thinking of with the 'undefined' string is probably this:

    if (typeof assoc_pagine[key]!=='undefined')
    

    This is (more or less) the same as saying

    if (assoc_pagine[key]!==undefined)
    

    However, either way this is a bit ugly. You're dereferencing a key that may not exist (which would be an error in any more sensible language), and relying on JavaScript's weird hack of giving you the special undefined value for non-existent properties.

    This also doesn't quite tell you if the property really wasn't there, or if it was there but explicitly set to the undefined value.

    This is a more explicit, readable and IMO all-round better approach:

    if (key in assoc_pagine)
    
    0 讨论(0)
  • 2021-02-02 09:01
    if (assoc_pagine.indexOf('home') > -1) {
       // we have home element in the assoc_pagine array
    }
    

    Mozilla indexOf

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