为什么jQuery的$ .makeArray会忽略字符串键?

时间:2014-06-02 15:50:09

标签: javascript jquery arrays object key-value

这是我的代码:

// My object
var fakeArray = { "length": 2, 0: "Addy", 1: "Subtracty" };

// Convert my object to a real array
var realArray = $.makeArray( fakeArray )

// Use $.map() to a
$.map( realArray, function( val, i ) {
    alert(val);
});

警报提供"Addy""Subtracty",但完全忽略了"length": 2键值对。当我交换"length": 2

时,还有什么呢?
// Swap 2 and "length"
var fakeArray = { 2: "length", 0: "Addy", 1: "Subtracty" };

它仅警告对象(即[object Object]
是什么给了什么?

1 个答案:

答案 0 :(得分:3)

因为$.makeArray应该适用于类似数组的对象

具有.length属性 1 的对象将从0迭代到length,并且每个属性值将被推送到结果数组。非整数键将被连贯地忽略。

所有其他对象将简单地包装在一个数组中。

> $.makeArray({"length": 2, 0: "Addy", 1: "Subtracty"})
["Addy", "Subtracty"]
> $.makeArray({0: "Addy", 1: "Subtracty", 2: "length"})
[{0: "Addy", 1: "Subtracty", 2: "length"}]

1:有关确切定义,请参阅isArrayLike