首页 新闻 搜索 专区 学院

javascript中关于数组的问题

0
[已解决问题] 解决于 2010-12-26 15:51

在百度的开源js框架tangram中有这样一个函数:

/** * 将两个数组参数合并成一个类似hashMap结构的对象,这个对象使用第一个数组做为key,使用第二个数组做为值,如果第二个参数未指定,则把对象的所有值置为true。 

* @name baidu.array.hash 

* @function

 * @grammar baidu.array.hash(keys[, values])

 * @param {Array} keys 作为key的数组 

* @param {Array} [values] 作为value的数组,未指定此参数时,默认值将对象的值都设为true。 *            

  * @returns {Object} 合并后的对象{key : value} 

*/

baidu.array.hash = function(keys, values) {   

 var o = {}, vl = values && values.length, i = 0, l = keys.length;  

  for (; i < l; i++) {      

  o[keys[i]] = (vl && vl > i) ? values[i] : true;  

  }    

return o;

};

其中 "vl = values && values.length"这句的主要作用是什么,我一直没搞懂,向各位大虾赐教!

yearN的主页 yearN | 小虾三级 | 园豆:551
提问于:2010-12-24 20:04
< >
分享
最佳答案
0

相当于

 

var vl;
if(values){
vl
=values.length;
}

循环中的意思是,

 

如果values的长度小于keys的长度或则values根本就没传值的话,那么剩余的key对应的值为true.

Dickhead | 菜鸟二级 |园豆:205 | 2010-12-25 00:39
values是一个array,values.length则是一个integer,两则怎样进行与运算。
yearN | 园豆:551 (小虾三级) | 2010-12-25 11:58
就是values不为空的情况下,怎样运算。
yearN | 园豆:551 (小虾三级) | 2010-12-25 12:00
@yearN:这个运算规则是这样的,返回第一个为false的值;如果都为true,那么返回最后一个为true的值。例如:a=0&&1,那么a=0;a=1&&0&&1那么a=0;a=1&&3&&2,那么a=2;就像通过一样,每个条件都是一关,看你能通到第几关。
Dickhead | 园豆:205 (菜鸟二级) | 2010-12-25 12:11
就像通关一样,有个错别字……
Dickhead | 园豆:205 (菜鸟二级) | 2010-12-25 12:12
另外||运算刚好相反,它返回第一个为true的值;如果都为false,那么返回最后一个为false的值
Dickhead | 园豆:205 (菜鸟二级) | 2010-12-25 12:15
明白了,谢谢!
yearN | 园豆:551 (小虾三级) | 2010-12-26 15:51
其他回答(1)
0

就是为了防止values是null或undefined的时候报错的

Gray Zhang | 园豆:17610 (专家六级) | 2010-12-25 01:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册