How to check if an object is an array?

后端 未结 30 2900
名媛妹妹
名媛妹妹 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 06:51

    I have updated the jsperf fiddle with two alternative methods as well as error checking.

    It turns out that the method defining a constant value in the 'Object' and 'Array' prototypes is faster than any of the other methods. It is a somewhat surprising result.

    /* Initialisation */
    Object.prototype.isArray = function() {
      return false;
    };
    Array.prototype.isArray = function() {
      return true;
    };
    Object.prototype._isArray = false;
    Array.prototype._isArray = true;
    
    var arr = ["1", "2"];
    var noarr = "1";
    
    /* Method 1 (function) */
    if (arr.isArray()) document.write("arr is an array according to function
    "); if (!noarr.isArray()) document.write("noarr is not an array according to function
    "); /* Method 2 (value) - **** FASTEST ***** */ if (arr._isArray) document.write("arr is an array according to member value
    "); if (!noarr._isArray) document.write("noarr is not an array according to member value
    ");

    These two methods do not work if the variable takes the undefined value, but they do work if you are certain that they have a value. With regards to checking with performance in mind if a value is an array or a single value, the second method looks like a valid fast method. It is slightly faster than 'instanceof' on Chrome, twice as fast as the second best method in Internet Explorer, Opera and Safari (on my machine).

提交回复
热议问题