如arr=new Array()
此时arr就是null
如已赋值可以用
splice
如下:
var arr=new Array(1,2,3,4)
arr.splice(0,arr.length)//删除arr[]中的所有splice方法splice(2,1)删除arr[3]
if(arr[3]==null){alert("为空")}//判断是否为空
splice方法的使用:
arrayObj.splice(start, deleteCount, [item1[, item2[, . . . [,itemN]]]])
参数
arrayObj
必选项。一个 Array 对象。
start
必选项。指定从数组中移除元素的开始位置,这个位置是从 0 开始计算的。
deleteCount
必选项。要移除的元素的个数。
item1, item2,. . .,itemN
必选项。要在所移除元素的位置上插入的新元素。
JS就这么规定的。主要是因为getElementsByTagName反回的是数组数组有length属性。但是在定义obj时候它并不知道自己是数组类型的(弱类型特点)所以这个时候你直接去obj.length你会发现他的返回值是“未定义”这时候就需要getElementsByTagName去告诉obj“你是个数组!!!”于是返回一个数组特有的属性length给obj.汗。这帮人小看楼主了。to2想到这点的应该不会不知道for(vari=0i<obj.lengthi++){怎么用吧。to1for(variinobj)这个东西应该是遍历obj中的[i],而不是单指属性吧。因为ltdata那儿是回调函数返回结果后赋的值,而你alert那个却不是等回调函数返回结果后执行的操作。意思就是model.findAll(第一个是参数, 第二个是回调函数),也就是说第二个匿名方法是等待被findAll调用
//model.findAll(第一个是参数, 第二个是回调函数)model.findAll({
class:'Hrose_info',
qid:ret.qid
},function(ret,err){
//这儿是回调函数执行后等操作
//也就是说这儿ltdata会在1秒后进行赋值
for(i=0i<ret.lengthi++)
{
ltdata="{uid:'"+i+"',imgPath: '"+ret.Name+"',title: '"+ret.Name+"',subTitle: '"+ret.Sex+ret.Breed+"',remark: '"+ret.State+"'}"
}
})
//假如这个就是model.finAll方法
var model = {
findAll: function(p, e){
setTimeout(function(){
//e(第一个就是ret, 第二个就是err)
e(1, 2)
}, 1000) //一秒后调用e方法
}
}
关于直接retrun你可以放在model.findAll的回调函数里面返回值,如:
model.findAll({class:'Hrose_info',
qid:ret.qid
},function(ret,err){
for(i=0i<ret.lengthi++)
{
ltdata="{uid:'"+i+"',imgPath: '"+ret.Name+"',title: '"+ret.Name+"',subTitle: '"+ret.Sex+ret.Breed+"',remark: '"+ret.State+"'}"
}
return ltdata
})
如果还是不明白,你可以再提问