makeArray不返回带有jquery类型的实数组

时间:2014-01-15 06:12:18

标签: jquery

我在阅读$.map() jquery函数

时发现了以下代码
// The following object masquerades as an array. 
var fakeArray = {"length": 1, 0: "Addy", 1: "Subtracty"}; 
// Therefore, convert it to a real array 
var realArray = $.makeArray( fakeArray ) 
// Now it can be used reliably with $.map() 
$.map( realArray, function(val, i) { // do something }); 

但似乎有$ .makeArray()

的问题

让我们看看下面的例子:

var fakeArr = {0,1,2};
var realArr = $.makeArray(fakeArr);
if($.type(realArr)==="array")
$('div').text(realArr.join());// doesn't return the array text

我也试过了$.isArray(),这也没有导致数组

但如果我这样做:

var realArr = [0,1,2];
if($.type(realArr)==="array")
$('div').text(realArr.join());// returns the array text

那么,$.makeArray真的会返回真正的数组吗?

2 个答案:

答案 0 :(得分:1)

var fakeArr = {0,1,2};

这在javascript中无效。

请参阅$.makeArray的说明,它用于将类似数组的对象转换为真正的JavaScript数组。像NodeList之类的东西被称为类似数组的对象。


更新

如果您的意思是为什么您的第一段代码会将fakeArray转换为['Addy']而不是['Addy', 'Subtracty'],那是因为length的{​​{1}}仅为{{1} },应该是fakeArray

类似于数组的对象 - 具有1属性且值2索引

答案 1 :(得分:0)

我刚刚看到你的问题,在我看来你想要从顶部提供的对象中制作一个数组,如果你转到jsonlint.com你可以看到你的 javascript对象无效,可能就是这种情况。

试试这个:

var fakeArray = {"length": "1", "0": "Addy", "1": "Subtracty"};
// Therefore, convert it to a real array 
var realArray = $.makeArray(fakeArray);

console.log(realArray);

此处您的对象键和值已引用""双引号。

在这里测试:Demo @ Fiddle