在百度的开源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"这句的主要作用是什么,我一直没搞懂,向各位大虾赐教!
相当于
var vl;
if(values){
vl=values.length;
}
循环中的意思是,
如果values的长度小于keys的长度或则values根本就没传值的话,那么剩余的key对应的值为true.
就是为了防止values是null或undefined的时候报错的