一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

YUI 讀碼日記之 YAHOO.lang.is*

YAHOO.lang = YAHOO.lang || {
    isArray: function(o) { 
        if (o) {
           var l = YAHOO.lang;
           // 如果該對象有 length 這個屬性,同時支持 splice 方法,
           // 那么就認為它為數組。
           return l.isNumber(o.length) && l.isFunction(o.splice);
        }
        return false;
    },

    isBoolean: function(o) {
        return typeof o === 'boolean';
    },

    isFunction: function(o) {
        return typeof o === 'function';
    },

    isNull: function(o) {
        return o === null;
    },

    isNumber: function(o) {
        return typeof o === 'number' && isFinite(o);
    },

    isObject: function(o) {
        return (o && (typeof o === 'object' || 
                            YAHOO.lang.isFunction(o))) || false;
    },

    isString: function(o) {
        return typeof o === 'string';
    },

    isUndefined: function(o) {
        return typeof o === 'undefined';
    },

    //...

    isValue: function(o) {
        // Infinity fails
        // return (o || o === false || o === 0 || o === '');
        var l = YAHOO.lang;
        return (l.isObject(o) || l.isString(o) || 
                           l.isNumber(o) || l.isBoolean(o));
    }
};…… 復制粘貼分割線 ……

據悉,在 YUI 2.2.0 版本以前,YAHOO.lang.isArray 是這樣寫的。

isArray: function(obj) { 
    // safari 有 bug,只好處理字符串
    if (obj && obj.constructor && 
                 obj.constructor.toString().indexOf('Array') > -1) {  
        return true;  
    } else {
        return YAHOO.lang.isObject(obj) && obj.constructor == Array;  
    }  
},而這樣的判斷數組類型是有缺陷的,比如下面的代碼

function myArray() {
   this.name = 'name';  
}  
var o2 = new myArray();  
alert(YAHOO.util.isArray(o2));  // 彈出true  
// 因為 obj.constructor.toString() 中包含 myArray 字樣,所以返回true  

function Obj() {  
    this.name = 'name';  
}  
var o = new Obj();  
o.constructor = Array;
alert(YAHOO.util.isArray(o));  // 彈出 true  
// 因為在 JavaScript 里,constructor 也是屬性
// 可以動態指定,所以返回 true因此,在 YUI 的后續版本,YAHOO.lang.isArray 被修改成了目前的這個樣子

isArray: function(o) { 
    if (o) {
       var l = YAHOO.lang;
       // 如果該對象有 length 這個屬性,同時支持 splice 方法,
       // 那么就認為它為數組。
       return l.isNumber(o.length) && l.isFunction(o.splice);
    }
    return false;
},新的實現用了另外的思路:如果該對象有 length 這個屬性,同時支持 splice 方法,那么就認為它為數組。當然,它依然有漏洞,我們仍然可以創建一個對象,使其擁有 length 屬性和 splice 方法。但我覺得現在的實現更為合理,因為一來可能性不大,二來避免了詭異的瀏覽器的 BUG 。

再看 YUI 2.3.0 后引入的 YAHOO.lang.isValue,其實就是判斷參數是否是一個有意義的值,只要參數不是 null/undefined/NaN,那么都返回 true。(注意這和一般的判斷真假的不同就是, 0/false/''(空字符串) 這些都算是有效的值),所以 YAHOO.lang.isValue 非常適合用來判斷表單域的值是否為有效值。

JavaScript技術YUI 讀碼日記之 YAHOO.lang.is*,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 99精品视频一区在线视频免费观看 | 中文字幕日本久久2019 | 婷婷亚洲综合五月天小说在线 | 亚洲国产99在线精品一区二区 | 日本免费网站观看 | 国产精品一区二区三 | 亚洲伊人成人网 | 视色4se视频在线观看 | 苦瓜se在线精品视频 | 国产综合欧美日韩视频一区 | 青青草99久久精品国产综合 | 草草视频手机在线观看视频 | 欧洲精品一区二区三区在线观看 | 在线播放12p | 国产成品精品午夜视频 | 蜜桃福利视频 | 国产精品亚洲综合网站 | 亚洲免费小视频 | 97成人精品视频在线播放 | 国产成人久视频免费 | 四虎影视免费永久在线观看 | 伊人久久成人成综合网222 | 五月婷婷在线免费观看 | 缴情啪啪三级小说网 | 日本一区二区在线免费观看 | 一级毛片成人免费看免费不卡 | 德国女人一级毛片免费 | 一本久道久久综合中文字幕 | 六月天丁香婷婷 | 欧美激情一区二区三区在线播放 | 四虎免费视频 | 人人做人人爽人人爱秋霞影视 | 精品视频99 | 日本高清中文字幕一区二区三区a | 免费在线观看黄色小视频 | 7799国产精品久久久久99 | 青青热在线精品视频免费 | 精品伊人久久香线蕉 | 久久国产自偷自偷免 | 加勒比色综合久久久久久久久 | 欧美极品美軳人人体 |