我做了一个简单的程序,使用两个for循环在本地存储一个数组,但发生了一些奇怪的事情......
我的代码是:
var imagesdata = data[0];
var preferences = data[1];
for (var i = preferences.length - 1; i >= 0; i--) {
(function(i){
for (var z = imagesdata.length - 1; z >= 0; z--) {
(function(i){
if(imagesdata[z].cathegory == preferences[i].cathegory){
var array = $('body').data('data'+preferences[i].cathegory);
if(array == null){
alert('asefsef');
$('body').data('data'+preferences[i].cathegory, [{'pname' : imagesdata[z].pname , 'pimage' : imagesdata[z].pimage}]);
}else{
$('body').data('data'+preferences[i].cathegory, array.push({'pname' : imagesdata[z].pname , 'pimage' : imagesdata[z].pimage}));
}
}
})(i);
};
})(i);
};
它说对象2没有方法推送但是如果我刚刚插入了数字2,那么为什么数字2出现在[{'pname' : imagesdata[z].pname , 'pimage' : imagesdata[z].pimage}]
谢谢!
答案 0 :(得分:3)
push()
返回数组的长度,而不是添加了新元素的数组。
除非我误读你的代码:
== null
检查,因此创建一个新数组。 else
子句中并向数组添加元素,但然后将data
属性设置为它的长度(2) 。 Number
没有push()
方法。但是,请注意,因为array
变量在初始化数组后将成为对数组的引用,因此您对其所做的所有更改都将自动反映在数组中data
财产;因此,当您push()
新数据时,您无需回写更改:
if (array == null) {
alert('asefsef');
$('body').data('data' + preferences[i].cathegory, [{
'pname': imagesdata[z].pname,
'pimage': imagesdata[z].pimage}]);
} else {
array.push({
'pname': imagesdata[z].pname,
'pimage': imagesdata[z].pimage
});
}
仅供参考,你可能只是运气== null
检查。如果密钥不存在,则data()
会返回undefined
,而undefined == null
true
就是=== undefined
(通过类型强制)。更好的检查是array instanceof Array
,或者更好,{{1}}