Discuz common.js代碼註釋(二)

//獲取瀏覽器版本號
function browserVersion(types) {
    var other = 1;    //默認版本號
    for (i in types) {  //遍歷types
        var v = types[i] ? types[i] : i; //判斷types[i]是否爲空,爲空給types[i]賦值爲i(types循環出的鍵),不爲空則賦值types[i]自己
        if (USERAGENT.indexOf(v) != -1) {  //USERAGENT:瀏覽器請求頭的User-Agent屬性
            var re = new RegExp(v + '(\\/|\\s|:)([\\d\\.]+)', 'ig');  //聲明正則表達式
            var matches = re.exec(USERAGENT);    //在USERAGENT匹配符合正則表達式的結果集
            var ver = matches != null ? matches[2] : 0;  //獲得版本號
            other = ver !== 0 && v != 'mozilla' ? 0 : other;//若是ver不等於0且v不是火狐瀏覽器若爲空則默認版本號,不爲空則返回0
          } else {
            var ver = 0;   //設置版本號爲0 
        }
        eval('BROWSER.' + i + '= ver'); //執行表達式
    }
    BROWSER.other = other;  //設置非標準瀏覽器版本號
}
//獲取事件對象
function getEvent() { 
    if (document.all) return window.event;   //document.all:指頁面全部元素的集合(只有IE支持) 返回值window.event:指事件對象(只有IE支持)
    func = getEvent.caller;   //獲取調用getEvent函數caller func可能的結果:相似function onclick(event){}這樣的方法函數本體
    while (func != null) {    //遍歷func,經過dfunc.arguments[0]獲取到函數的第一個參數(event事件對象),若是事件對象爲空,則經過func=func.caller從新給func賦值,直到取到知足條件的event事件對象
        var arg0 = func.arguments[0];  //獲取觸發本函數(getEvent)函數的第一個參數
        if (arg0) {
            //arg0.constructor:          constructor多是Event也多是MouseEvent
            //typeof (arg0) == "object": 判斷arg0是否爲對象
            //arg0.preventDefault:      判斷preventDefault方法是否存在(preventDefault()的做用只要是通知web瀏覽器不要執行與事件關聯的默認動做)
            //arg0.stopPropagation:      判斷stopPropagation方法是否存在(stopPropagation()的做用是中止事件的傳播,阻止它被分派到其餘Document節點)
            if ((arg0.constructor == Event || arg0.constructor == MouseEvent) || (typeof (arg0) == "object" && arg0.preventDefault && arg0.stopPropagation)) {
                return arg0;   //返回arg0
            }
        }
        func = func.caller;    //將func的caller賦值給func
    }
    return null;  //返回null
}
//判斷參數值的變量類型是否等於‘undefined’若是等於就返回true,不然返回false
function isUndefined(variable) {  
    return typeof variable == 'undefined' ? true : false;
}
//判斷needle是否存在於haystack數組中
function in_array(needle, haystack) {   //needle:指定值 haystack:數組集合
    if (typeof needle == 'string' || typeof needle == 'number') {    //判斷變量needle的數據類型
        for (var i in haystack) {    //遍歷haystack
            if (haystack[i] == needle) {  //判斷haystack中是否有值等於needle
                return true;    //若是有則返回true
            }
        }
    }
    return false;    //若是haystack中沒有值等於needle就返回false
}


 
相關文章
相關標籤/搜索