手机
当前位置:查字典教程网 >编程开发 >Javascript教程 >YUI 读码日记之 YAHOO.lang.is*
YUI 读码日记之 YAHOO.lang.is*
摘要:YAHOO.lang=YAHOO.lang||{isArray:function(o){if(o){varl=YAHOO.lang;//如果...

YAHOO.lang=YAHOO.lang||{

isArray:function(o){

if(o){

varl=YAHOO.lang;

//如果该对象有length这个属性,同时支持splice方法,

//那么就认为它为数组。

returnl.isNumber(o.length)&&l.isFunction(o.splice);

}

returnfalse;

},

isBoolean:function(o){

returntypeofo==='boolean';

},

isFunction:function(o){

returntypeofo==='function';

},

isNull:function(o){

returno===null;

},

isNumber:function(o){

returntypeofo==='number'&&isFinite(o);

},

isObject:function(o){

return(o&&(typeofo==='object'||

YAHOO.lang.isFunction(o)))||false;

},

isString:function(o){

returntypeofo==='string';

},

isUndefined:function(o){

returntypeofo==='undefined';

},

//...

isValue:function(o){

//Infinityfails

//return(o||o===false||o===0||o==='');

varl=YAHOO.lang;

return(l.isObject(o)||l.isString(o)||

l.isNumber(o)||l.isBoolean(o));

}

};……复制粘贴分割线……

据悉,在YUI2.2.0版本以前,YAHOO.lang.isArray是这样写的。

isArray:function(obj){

//safari有bug,只好处理字符串

if(obj&&obj.constructor&&

obj.constructor.toString().indexOf('Array')>-1){

returntrue;

}else{

returnYAHOO.lang.isObject(obj)&&obj.constructor==Array;

}

},而这样的判断数组类型是有缺陷的,比如下面的代码

functionmyArray(){

this.name='name';

}

varo2=newmyArray();

alert(YAHOO.util.isArray(o2));//弹出true

//因为obj.constructor.toString()中包含myArray字样,所以返回true

functionObj(){

this.name='name';

}

varo=newObj();

o.constructor=Array;

alert(YAHOO.util.isArray(o));//弹出true

//因为在JavaScript里,constructor也是属性

//可以动态指定,所以返回true因此,在YUI的后续版本,YAHOO.lang.isArray被修改成了目前的这个样子

isArray:function(o){

if(o){

varl=YAHOO.lang;

//如果该对象有length这个属性,同时支持splice方法,

//那么就认为它为数组。

returnl.isNumber(o.length)&&l.isFunction(o.splice);

}

returnfalse;

},新的实现用了另外的思路:如果该对象有length这个属性,同时支持splice方法,那么就认为它为数组。当然,它依然有漏洞,我们仍然可以创建一个对象,使其拥有length属性和splice方法。但我觉得现在的实现更为合理,因为一来可能性不大,二来避免了诡异的浏览器的BUG。

再看YUI2.3.0后引入的YAHOO.lang.isValue,其实就是判断参数是否是一个有意义的值,只要参数不是null/undefined/NaN,那么都返回true。(注意这和一般的判断真假的不同就是,0/false/''(空字符串)这些都算是有效的值),所以YAHOO.lang.isValue非常适合用来判断表单域的值是否为有效值。

【YUI 读码日记之 YAHOO.lang.is*】相关文章:

JavaScript中的replace()方法使用详解

基于JavaScript实现智能右键菜单

JavaScript中的pow()方法使用

JS对字符串编码的几种方式使用

动态加载iframe

JS实现简单路由器功能的方法

jQuery获取页面元素绝对与相对位置的方法

JavaScript基于setTimeout实现计数的方法

简介JavaScript中getUTCMonth()方法的使用

jQuery实现鼠标经过图片变亮其他变暗效果

精品推荐
分类导航