簡體   English   中英

如何判斷 javascript 變量是否為數組且僅是數組

[英]How to tell whether a javascript variable is an Array and only an Array

確定 Javascript 變量是否為數組但沒有其他用戶定義屬性的最佳方法是什么? 'instanceof Array' 不這樣做。

例如

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

var1 instanceof Array;    //returns true
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;
}

這個 function 確認它是一個Array ,並且 object 上的每個定義的屬性都是一個 integer 索引,它在.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

我認為您無法驗證作為Array object 創建的內容的完整性。 Javascript 不會禁止您向此類 object 添加屬性。

可以遍歷對象的屬性並返回false如果您看到一個您認為不應該在Array中的屬性,但這仍然不能保證即使是普通屬性的值也沒有被破壞。

只是不要向Array添加屬性,那么您就不會有這個問題。 你問這種問題意味着你在代碼的其他地方做了一些非常錯誤的事情。

一般來說,你無法區分數組和 object。 Object 可以用作數組,反之亦然。 例子:

var fancyObj = {
    favoriteFood: "pizza",
    add: function(a, b){
        return a + b;
    }
};
fancyObj.add(2,3); // returns 5
fancyObj['add'](2,3); // ditto.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM