Javascript 为什么jQuery';s$.makeArray是否忽略字符串键?
这是我的密码:Javascript 为什么jQuery';s$.makeArray是否忽略字符串键?,javascript,jquery,arrays,object,key-value,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); }); 该警报给出了“Ad
// 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”
和“subtract”
,但完全忽略了“length”:2
键值对。更重要的是,当我交换“length”时:2
// Swap 2 and "length"
var fakeArray = { 2: "length", 0: "Addy", 1: "Subtracty" };
它只提醒对象(即[object object]
)给出了什么?因为它应该在类似数组的对象上工作 具有
.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:有关确切定义,请参见,因为它应该用于类似数组的对象
具有.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:有关确切定义,请参见,因为它应该用于类似数组的对象
具有.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:有关确切定义,请参见,因为它应该用于类似数组的对象
具有.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:有关确切定义,请参见不要使用alert(),使用console.log(),然后检查浏览器的控制台。尝试一下这个,但可能是因为JavaScript没有字符串键所需的关联数组。JavaScript有括号表示法和点表示法,但它们是指对象而不是数组。对于第一种情况,您的
realArray
实际上是一个数组,因此length
属性变得不可编辑,您不能使用任何类型的循环(甚至for…in
)使其公开,公开该属性的唯一方法是使用名为Object.getOwnPropertyNames()
的纯JS方法。对于第二种情况,如果交换2和“length”,那么伪数组根本不是伪数组,因此无法使用$将其转换为真实数组。makeArray
,因此整个伪数组将被放入一个数组中,如[fakeArray]
,提醒它只显示[object object]
。谢谢@KingKing我注意到的另一件事是,当我将“length”:2
更改为“length”:3
时,它会再次返回[对象对象]
,这是为什么?@Wilhelm这也是对象成为类似数组的对象的一个条件,length
应该是数组的项数,您有0
和1
,因此它应该是length:2
。无论如何,这就是$的方式。makeArray
理解一个类似数组的对象并将其转换为真实数组。不要使用alert(),使用console.log(),然后检查浏览器的控制台。只是尝试一下这个,但可能是因为JavaScript没有字符串键所具有的关联数组。JavaScript有括号表示法和点表示法,但它们是指对象而不是数组。对于第一种情况,您的realArray
实际上是一个数组,因此length
属性变得不可编辑,您不能使用任何类型的循环(甚至for…in
)使其公开,公开该属性的唯一方法是使用名为Object.getOwnPropertyNames()
的纯JS方法。对于第二种情况,如果交换2和“length”,那么伪数组根本不是伪数组,因此无法使用$将其转换为真实数组。makeArray
,因此整个伪数组将被放入一个数组中,如[fakeArray]
,提醒它只显示[object object]
。谢谢@KingKing我注意到的另一件事是,当我将“length”:2
更改为“length”:3
时,它会再次返回[对象对象]
,这是为什么?@Wilhelm这也是对象成为类似数组的对象的一个条件,length
应该是数组的项数,您有0
和1
,因此它应该是length:2
。无论如何,这就是$的方式。makeArray
理解一个类似数组的对象并将其转换为真实数组。不要使用alert(),使用console.log(),然后检查浏览器的控制台。只是尝试一下这个,但可能是因为JavaScript没有字符串键所具有的关联数组。JavaScript有括号表示法和点表示法,但它们是指对象而不是数组。对于第一种情况,您的realArray
实际上是一个数组,因此length
属性变得不可编辑,您不能使用任何类型的循环(甚至for…in
)使其公开,公开该属性的唯一方法是使用名为Object.getOwnPropertyNames()
的纯JS方法。对于第二种情况,如果交换2和“length”,那么伪数组根本不是伪数组,因此无法使用$将其转换为真实数组。makeArray
,因此整个伪数组将被放入一个数组中,如[fakeArray]
,提醒它只显示[object object]
。谢谢@KingKing我注意到的另一件事是,当我将“length”:2
更改为“length”:3
时,它返回[o