How to check if an object is an array?

后端 未结 30 2894
名媛妹妹
名媛妹妹 2020-11-21 06:31

I\'m trying to write a function that either accepts a list of strings, or a single string. If it\'s a string, then I want to convert it to an array with just the one item so

相关标签:
30条回答
  • 2020-11-21 07:11

    Here's my lazy approach:

    if (Array.prototype.array_ === undefined) {
      Array.prototype.array_ = true;
    }
    
    // ...
    
    var test = [],
        wat = {};
    
    console.log(test.array_ === true); // true
    console.log(wat.array_ === true);  // false
    

    I know it's sacrilege to "mess with" the prototype, but it appears to perform significantly better than the recommended toString method.

    Note: A pitfall of this approach is that it wont work across iframe boundaries, but for my use case this is not an issue.

    0 讨论(0)
  • 2020-11-21 07:11

    A simple function for testing if an input value is an array is the following:

    function isArray(value)
    {
      return Object.prototype.toString.call(value) === '[object Array]';
    }
    

    This works cross browser, and with older browsers. This is pulled from T.J. Crowders' blog post

    0 讨论(0)
  • 2020-11-21 07:12

    There's just one line solution for this question

    x instanceof Array
    

    where x is the variable it will return true if x is an array and false if it is not.

    0 讨论(0)
  • 2020-11-21 07:13

    jQuery also offers an $.isArray() method:

    var a = ["A", "AA", "AAA"];
    
    if($.isArray(a)) {
      alert("a is an array!");
    } else {
      alert("a is not an array!");
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

    0 讨论(0)
  • 2020-11-21 07:13

    This is my attempt to improve on this answer taking into account the comments:

    var isArray = myArray && myArray.constructor === Array;
    

    It gets rid of the if/else, and accounts for the possibility of the array being null or undefined

    0 讨论(0)
  • 2020-11-21 07:13

    You can try this:

    var arr = []; (or) arr = new Array();
    var obj = {}; (or) arr = new Object();
    
    arr.constructor.prototype.hasOwnProperty('push') //true
    
    obj.constructor.prototype.hasOwnProperty('push') // false
    
    0 讨论(0)
提交回复
热议问题