【发布时间】:2014-06-03 00:02:40
【问题描述】:
这是我的代码:
// 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])
什么给了?
【问题讨论】:
-
不要使用alert(),使用console.log(),然后检查浏览器的控制台。
-
只是尝试一下,但可能是因为 JavaScript 没有关联数组,而这正是 字符串键 的含义。 JavaScript 有括号表示法和点表示法,但它们是指对象而不是数组。
-
对于第一种情况,您的
realArray实际上是一个数组,因此length属性变为不可迭代,您 不能使用任何类型的循环(甚至是for...in)使其公开,公开该属性的唯一方法是使用称为Object.getOwnPropertyNames()的纯JS 方法。对于第二种情况,如果您交换 2 和“长度”,那么fakeArray根本不是假数组,因此无法使用$.makeArray将其转换为真实数组,因此将整个fakeArray放入放入一个数组,例如[fakeArray],警告它只显示[object Object]。 -
感谢@KingKing 我注意到的另一件事是,当我将
"length": 2更改为"length": 3时,它再次返回[object Object],这是为什么呢? -
@Wilhelm 这也是对象是类数组对象的条件,
length应该是数组的项目数,你有0和1所以它应该是length:2。无论如何,这就是$.makeArray将对象理解为类数组并将其转换为真实数组的方式。
标签: javascript jquery arrays object key-value