如何判断javascript变量是否为Array且只是一个Array

spi*_*nt0 4 javascript arrays

什么是确定Javascript变量是否是数组但没有其他用户定义属性的最佳方法?'instanceof Array'不会这样做.

例如

var var1 = [10,11];
var1['key1'] = 'extraProperty';

var1 instanceof Array;    //returns true
Run Code Online (Sandbox Code Playgroud)

小智 5

var isOnlyArray = function(o) {
    if (! (Object.prototype.toString.call(o) === "[object Array]")) {
        return false;
    }
    for (property in o) { 
        if (o.hasOwnProperty(property)) {
            var asInt = parseInt(property, 10);
            if (!(0 <= asInt && asInt < o.length)
                || String(asInt) !== property) {
                return false;
            }
        }
    }

    return true;
}
Run Code Online (Sandbox Code Playgroud)

此函数确认它是一个Array并且对象上的每个已定义属性都是指定范围内的整数索引.length.

var a = [1, 2];
console.log(isOnlyArray(a)); // true
a[2] = 4;
console.log(isOnlyArray(a)); // true
a["foo"] = 5;
console.log(isOnlyArray(a)); // false
Run Code Online (Sandbox Code Playgroud)