亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

js+jquery常用知識點匯總

2019-11-20 13:03:02
字體:
來源:轉載
供稿:網友

一、jquery源碼中常見的知識點

  1.string,number類型轉換的快捷方法

復制代碼 代碼如下:

// @param s為字符串,n為數字
function fn(obj){
    //轉換為String類型
    var s = obj +"";
    //轉換為number類型
    var n = +obj;
}

  分享一個面試例子:

//加會將其后面自動轉換成字符串
"64"+4="644"
//減會將其自動轉換成數字
"64"-4=60

  2.bool類型轉換

  !!obj,將其強制轉換為bool類型

復制代碼 代碼如下:

alert(!!0)  //結果為false
alert(!!"33dd")  //結果為true

  !obj,取相反的bool類型

復制代碼 代碼如下:

alert(!0)  //結果為true
alert(!"222333")  //結果為false

  3.=== 與 ==區別

  === 是嚴格相等,不會進行類型轉換,而 == 是不嚴格相等,會進行類型轉換。有些js的書中,建議開發人員永遠不要用 == 或者 != 。

  但是jquery源碼中,有用到“==”或者“!=”的情況 ―― 判斷 undefined 和 null 的時候。

復制代碼 代碼如下:

//這里的判斷,將obj是null,obj是undefined都排除在外了
if(obj != null){
}

  4.檢測obj是否為window對象

復制代碼 代碼如下:

//null == window.null為true
function isWindow(obj){
    return obj != null && obj == window.obj;
}

  5.|| 與 && 用法技巧

復制代碼 代碼如下:

//例 var aa=5; name = aa || {} ; alert(name) 則name為55
this.name = name || {} //如果name值存在,則值為name,反之為{}
//例 var aa=5; name = aa && {} ; alert(name) 則name為{},因為aa為5,不為0則為真
this.name = bool && [] //如果bool為true,則值為[],反之則為bool

  經典實例:

復制代碼 代碼如下:

( window.foo || ( window.foo = "bar" ) );
                alert(window.foo);  //彈出  bar
//  為什么最后的結果是bar呢,其實可以看成是   undefined || bar  出來的結果肯定是bar

  6.setTimeout(fn,0)與setTimeout(fn)區別

  setTimeout(fn,0)與setTimeout(fn)都是延遲執行,但是setTimeout(fn)比setTimeout(fn,0)延遲時間還要長,例

復制代碼 代碼如下:

        function fn(){
            var data = new Date();
            for(var i=0;i<=1000;i++){
                if(i==1000){
                    console.log("fn="+data.getTime());
                }
            }
        }
        function fn1(){
            var data = new Date();
            for(var i=0;i<=1000;i++){
                if(i==1000){
                    console.log("fn1="+data.getTime());
                }
            }
        }
        setTimeout(fn,0),
        setTimeout(fn1);

  結果:

  7.判斷是否為數值

復制代碼 代碼如下:

function isNumeric(obj){
return !isNaN(parseFloat(obj)) && isFinite(obj);
}

  8.判斷是否為空對象

復制代碼 代碼如下:

function isEmptyObject(){
    var name;
    //遍歷不是空對象返回
    for (name in obj) {
        return false;
    }
    return true;
}

  9.檢測對象類型

  檢測obj對象類型,返回類型,通過Object.prototype.toString()來判斷類型,但是ie低版本兼容性有問題,因此采用{}.toString來監測,返回為[object Array],[object Object],[object Function]

復制代碼 代碼如下:

// 類型判斷
function isType(type){
    return function(o){
        return Object.prototype.toString.call(o) === '[object ' + type + ']';
    }
}
var isString = isType(“String”);
var isObject = isType("Object");
var isArray = isType("Array");
isString("I'm Barret Lee.");
isArray([1,2,3]);
isObject({});

  10.jquery里的去除空格trim妙用

復制代碼 代碼如下:

//相當于if (String.prototype.trim && “/uFEFF/xA0″.trim() !== “”)高級的瀏覽器已經支持原生的String的trim方法,但是pFan還為了避免它沒法解析全角空白,所以加多了一個判斷:”/uFEFF/xA0″.trim() !== “”   
vart core_version = "1.0",core_trim = core_version.trim;           
function trim(){
    core_trim && !core_trim.call("/uFEFF/xA0") ?
                    function (text) {
                        return text == null ?
                            "" :
                            core_trim.call(text); //這里按我的理解應該為" ".trim.call(text),有點不明白轉換為"1.1.0".trim.call(text)
                    } :
        
                    // 高級的瀏覽器已經支持原生的String的trim方法,如果瀏覽器不支持則采用
                    function (text) {
                        var  whitespace = "[//x20//t//r//n//f]",
                         rtrim = new RegExp("^" + whitespace + "+|((?:^|[^////])(?:////.)*)" + whitespace + "+$", "g");
                        return text == null ?
                            "" :
                            (text + "").replace(rtrim, "");
                    },
                //nodeName函數是獲取dom節點的節點名字或者判斷其名字跟傳入參數是否匹配   
                nodeName: function(elem,name){
                     //IE下,DOM節點的nodeName是大寫的,例如DIV
                     return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
                }
}

  11.jquery中檢測數組或者類數組中是否含存在傳入的值

復制代碼 代碼如下:

/**
    檢查數組中是否存在傳入的值,如果存在就返回值所在的位置,如果不存在就返回-1。
    *elem 規定需檢索的值。
    *arr 數組
    *i 可選的整數參數。規定在數組中開始檢索的位置。它的合法取值是 0 到 arr.length - 1。如省略該參數,則將從數組首元素開始檢索。
    */
function inArray(elem, arr, i){
    var len;
    if (arr) {
        //如果瀏覽器支持Array擁有indexOf方法
        if ([].indexOf) {
            return [].indexOf.call(arr, elem, i);
        }
        len = arr.length;
         //當i為負數的時候,從數組后邊len+i的位置開始索引
         //理解這個分成兩個部分i = i ? (i < 0 ? Math.max(0, len + i) : i) : 0;,i=i為true,執行(i < 0 ? Math.max(0, len + i) : i),反正執行i=0
        i = i ? i < 0 ? Math.max(0, len + i) : i : 0;
        for (; i < len; i++) {
            // 雙重檢測防止類似這樣的數組 ar = [];ar[1]=1;ar[0] = undefined; 0 in ar =false;a[0]===undefined;
            // 0 in arr  => arr[0]是否存在  'nme' in arr => arr['nme']是否存在
            if (i in arr && arr[i] === elem) {
                return i;
            }
        }
    }
    return -1;
}

二、javascript中原型鏈常見的知識點

  1.hasOwnProperty()方法

   使用hasOwnProperty()方法可以檢測一個屬性是存在與實例,還是存在于原型中。這個方法從Object繼承,只在給定屬性存在于對象實例中時,才會返回true。

復制代碼 代碼如下:

    function Person(){
            this.age=25;
            this.job="web";
    }
    Person.prototype={
        name:'pingfan',
        sayName:function(){
                        alert(this.name);
                }
    }
    var person1=new Person();
    //來自構造函數,檢測屬性,也返回true
    alert(person1.hasOwnProperty("age"));
    //來自原型屬性,返回false
    alert(person1.hasOwnProperty("name"));
    person1.name='ping';
    //來自實例屬性,返回true
    alert(person1.hasOwnProperty("name"));

  2.通過instanceOf保證只實例一次

復制代碼 代碼如下:

 function shiCha(opt){
    //只實例一次
    if( !(this instanceof shiCha)){
        return new shiCha(opt);
    }               
}
var shicha = shiCha();

  3.javascript中Array.prototype.slice.call(arguments)  

  我們通常看到Array.prototype.slice.call(arguments,1)或者Array.prototype.slice.call(arguments),都有點摸不著頭腦,其實我們就是借助Array.prototype中slice()將arguments變成一個數組,并且使用該數組工作更方便,第二個參數是從索引值,開始將其變成數組,例Array.prototype.call("22223",2)和Array.prototype.call([1,2,3,4],2),從字符串第二個開始。

復制代碼 代碼如下:

function sliArray(array){
                        //輸出為從索引1到索引3
            return Array.prototype.slice.call(array,1,3);
}
alert(sliArray([1,2,3,4,5,6]))    //結果為2,3

  4. 利用空對象F,實現對象繼承,效率最高

復制代碼 代碼如下:

//利用空對象做媒介,進行繼承效果最佳
function inhert(C,P){
        var F=function(){};
        F.protototype = P.prototype;
        C.prototype = new F();
        C.prototype.constructor = C;
}

三、javascript中常用方法集
  1. 常見的數組操作方法

  數組去重:

復制代碼 代碼如下:

//數組去重原型
Array.prototype.unqie = function(){
  var arr = this, len=this.length, obj={}, newArr=[];           
          while(len--){
                   if(obj[ arr[len] ] !== arr[len]){
                        obj[arr[len]] = arr[len];   newArr.push( arr[len]);
                  } 
          }
return newArr.reverse();
}

  取數組中最大值:

復制代碼 代碼如下:

Array.prototype.arrMax=function(){
                var arr=this, len=this.length,max=arr[0];
                for(var i=1;i<len;i++){
                        if(max<arr[i]){
                                max=arr[i];
                        }
                }
        return max;
}
//數組中通過sort取最大值
  Array.prototype.arrMax=function(){
    var arr=this;
    arr.sort(function(a,b){
      return a-b;
    })
    return arr[arr.length-1];
  }
//利用Math.max取數組最大值
Array.prototype.arrMax =function(){
    var array = this;
    return Math.max.apply(null, array);
}
alert([1,2,3,4,5,6,9,8,7,9].arrMax());

  取數組中最小值:

復制代碼 代碼如下:

//數組中最的小值
Array.prototype.arrMin=function(){
                var arr=this, len=this.length,min=arr[0];
                for(var i=1;i<len;i++){
                        if(min>arr[i]){
                                min=arr[i];
                        }
                }
        return min;
}
//數組中通過sort取最的小值
Array.prototype.arrSortMin=function(){
    var arr=this;
    arr.sort(function(a,b){
      return a-b;
    })
    return arr[0];
}
//利用Math.max取數組最大值
Array.prototype.arrSortMin =function(){
    var array = this;
    return Math.min.apply(null, array);
}
alert([1,2,3,4,5,6,9,8,7,9].arrSortMin());

  復制數組:

復制代碼 代碼如下:

Array.prototype.copy =
  function() {
    return [].concat(this);
};

  去除數組中只指定元素,只能去除一個,如果想多個,之前先用unique處理:

復制代碼 代碼如下:

Array.prototype.remove = function(value){
    for(var i=0,len=this.length;i<len;i++)
    {
        if(this[i]==value){
            this.splice(i, 1);
            break;
        }
    }
   
    return this;
}

  2.操作document.loaction的方法集(這里借用了園友總結的相關方法)

復制代碼 代碼如下:

pFan.url = { //#URL
    //參數:變量名,url為空則表從當前頁面的url中取
    getQuery: function (name, url) {
        var u = arguments[1] || window.location.search
            , reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)")
            , r = u.substr(u.indexOf("?") + 1).match(reg)
        ;
        return r != null ? r[2] : "";
    }
    , getHash: function (name, url) { //# 獲取 hash值
        var u = arguments[1] || location.hash;
        var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
        var r = u.substr(u.indexOf("#") + 1).match(reg);
        if (r != null) {
            return r[2];
        }
        return "";
    }
    , parse: function (url) { //# 解析URL
        var a = document.createElement('a');
        url = url || document.location.href;
        a.href = url;
        return {
            source: url
            , protocol: a.protocol.replace(':', '')
            , host: a.hostname
            , port: a.port
            , query: a.search
            , file: (a.pathname.match(/([^//?#]+)$/i) || [, ''])[1]
            , hash: a.hash.replace('#', '')
            , path: a.pathname.replace(/^([^//])/, '/$1')
            , relative: (a.href.match(/tps?:////[^//]+(.+)/) || [, ''])[1]
            , segments: a.pathname.replace(/^///, '').split('/')
        };
    }
};

  3.常用的正則表達式

復制代碼 代碼如下:

pFan.regExp = {  //# 字符串匹配
    //是否為 數字!整數,浮點數
    isNum: function (num) { //# 是否為數組
        return !isNaN(num);
    }
    , isEmail: function (mail) {//# 是否為 郵箱
        return /^([a-z0-9]+[_/-/.]?)*[a-z0-9]+@([a-z0-9]+[_/-/.]?)*[a-z0-9]+/.[a-z]{2,5}$/i.test(mail);
    }
    , isIdCard: function (card) { //# 是否為 身份證
        return /^(/d{14}|/d{17})(/d|[xX])$/.test(card);
    }
    , isMobile: function (mobile) { //# 是否為 手機
        return /^0*1/d{10}$/.test(mobile);
    }
    , isQQ: function (qq) { //# 是否為 QQ
        return /^[1-9]/d{4,10}$/.test(qq);
    }
    , isTel: function (tel) { //# 是否為 電話
        return /^/d{3,4}-/d{7,8}(-/d{1,6})?$/.text(tel);
    }
    , isUrl: function (url) { //# 是否為 URL
        return /https?:////[a-z0-9/./-]{1,255}/.[0-9a-z/-]{1,255}/i.test(url);
    }
    , isColor: function (color) { //# 是否為 16進制顏色
        return /#([/da-f]{3}){1,2}$/i.test(color);
    }
    //@id : 身份證 ,
    // @now : 當前時間 如:new Date('2013/12/12') , '2013/12/12'
    // @age : 允許的年齡
    , isAdult: function (id, allowAge, now) { //# 是否年齡是否成年
        var age = 0 // 用戶 年月日
            , nowDate = 0  //當前年月日
        ;
        allowAge = parseFloat(allowAge) || 18;
        now = typeof now == 'string' ? new Date(now) : (now || new Date());

        if (!this.isIdCard(id)) {
            return false;
        }
        //15位身份證
        if (15 == id.length) {
            age = '19' + id.slice(6, 6);
        } else {
            age = id.slice(6, 14);
        }
        // 類型轉換 整型
        age = ~~age;
        nowDate = ~~(Tydic.date.format('YYYYMMDD', now));
        //比較年齡
        if (nowDate - age < allowAge * 1e4) {
            return false;
        }
        return true;
    }
    //浮點數
    , isFloat: function (num) { //# 是否為 浮點數
        return /^(([1-9]/d*)|(/d+/./d+)|0)$/.test(num);
    }
    //正整數
    , isInt: function (num) { //# 是否為 正整數
        return /^[1-9]/d*$/.test(num);
    }
    //是否全為漢字
    , isChinese: function (str) { //# 是否全為 漢字
        return /^([/u4E00-/u9FA5]|[/uFE30-/uFFA0])+$/gi.test(str);
    }
};

  4.操作className的方法集

復制代碼 代碼如下:

PFan.conClass = {
    hasClass:function(){
        return ele.className.match(new RegExp('(//s|^)'+cls+'(//s|$)'));
    },
    addClass:function(){
        if (!hasClass(ele,cls)) ele.className += " "+cls;
    },
    removeClass:function(){
        if (hasClass(ele,cls)) {
            var reg = new RegExp('(//s|^)'+cls+'(//s|$)');
            ele.className=ele.className.replace(reg,' ');
        }        
    }
}

  5.操作字符串方法

復制代碼 代碼如下:

pFan.string = { //# 字符串
    codeHtml: function (content) { //# 轉義 HTML 字符
        return this.replace(content, {
            '&': "&"
            , '"': """
            , "'": '''
            , '<': "<"
            , '>': ">"
            , ' ': " "
            , '/t': " "
            , '(': "("
            , ')': ")"
            , '*': "*"
            , '+': "+"
            , ',': ","
            , '-': "-"
            , '.': "."
            , '/': "/"
            , '?': "?"
            , '//': "\"
            , '/n': "<br>"
        });
    }
    //重復字符串
    , repeat: function (word, length, end) { //# 重復字符串
        end = end || ''; //加在末位
        length = ~~length;
        return new Array(length * 1 + 1).join(word) + '' + end;
    }
    //增加前綴
    , addPre: function (pre, word, size) { //# 補齊。如給數字前 加 0
        pre = pre || '0';
        size = parseInt(size) || 0;
        word = String(word || '');
        var length = Math.max(0, size - word.length);
        return this.repeat(pre, length, word);
    }
    //去除兩邊空格
    , trim: function (text) { //# 去除兩邊空格
        return (text || '').replace(/^/s+|/s$/, '');
    }
     //去除左邊空格
    ,ltrim:function(){
        return s.replace( /^(/s*| *)/, "");
    }
    //去除右邊空格
    ,rtrim:function(){
        return s.replace( /(/s*| *)$/, "");
    }
    //返回腳本內容
    ,evalscript:function(s) {
        if(s.indexOf('<script') == -1) return s;
        var p = /<script[^/>]*?>([^/x00]*?)<//script>/ig;
        var arr = [];
        while(arr = p.exec(s)) {
            var p1 = /<script[^/>]*?src=/"([^/>]*?)/"[^/>]*?(reload=/"1/")?(?:charset=/"([/w/-]+?)/")?><//script>/i;
            var arr1 = [];
            arr1 = p1.exec(arr[0]);
            if(arr1) {
                appendscript(arr1[1], '', arr1[2], arr1[3]);
            } else {
                p1 = /<script(.*?)>([^/x00]+?)<//script>/i;
                arr1 = p1.exec(arr[0]);
                appendscript('', arr1[2], arr1[1].indexOf('reload=') != -1);
            }
        }
        return s;
    }
    //清除腳本內容
    ,stripscript:function(){
        return s.replace(/<script.*?>.*?<//script>/ig, '');
    }
    //字符串替換
    , replace: function (str, re) { //# 字符串替換
        str = str || '';
        for (var key in re) {
            replace(key, re[key]);
        };
        function replace(a, b) {
            var arr = str.split(a);
            str = arr.join(b);
        };
        return str;
    }
    , xss: function (str, type) { //# XSS 轉義
        //空過濾
        if (!str) {
            return str === 0 ? "0" : "";
        }
        switch (type) {
            case "html": //過濾html字符串中的XSS
                return str.replace(/[&'"<>/////-/x00-/x09/x0b-/x0c/x1f/x80-/xff]/g, function (r) {
                    return "&#" + r.charCodeAt(0) + ";"
                }).replace(/ /g, " ").replace(//r/n/g, "<br />").replace(//n/g, "<br />").replace(//r/g, "<br />");
                break;
            case "htmlEp": //過濾DOM節點屬性中的XSS
                return str.replace(/[&'"<>/////-/x00-/x1f/x80-/xff]/g, function (r) {
                    return "&#" + r.charCodeAt(0) + ";"
                });
                break;
            case "url": //過濾url
                return escape(str).replace(//+/g, "%2B");
                break;
            case "miniUrl":
                return str.replace(/%/g, "%25");
                break;
            case "script":
                return str.replace(/[//"']/g, function (r) {
                    return "http://" + r;
                }).replace(/%/g, "//x25").replace(//n/g, "//n").replace(//r/g, "//r").replace(//x01/g, "//x01");
                break;
            case "reg":
                return str.replace(/[///^/$/*/+/?/{/}/./(/)/[/]]/g, function (a) {
                    return "http://" + a;
                });
                break;
            default:
                return escape(str).replace(/[&'"<>/////-/x00-/x09/x0b-/x0c/x1f/x80-/xff]/g, function (r) {
                    return "&#" + r.charCodeAt(0) + ";"
                }).replace(/ /g, " ").replace(//r/n/g, "<br />").replace(//n/g, "<br />").replace(//r/g, "<br />");
                break;
        }
    }
    // badword , 過濾敏感詞
    //@text : 要過濾的文本 , 類型 :字符串
    //@words : 敏感詞 ,類型,數組, 如 : ['你妹', '我丟' ,'我靠']
    // 如果 用 正則匹配, text 長度 100萬,words 100萬,需要 4秒!
    , badWord: function (text, words) { //# 敏感詞過濾
        text = String(text || '');
        words = words || [];
        var reg = new RegExp(words.join('|'), 'g')
            , _self = this;
        return text.replace(reg, function ($0) {
            var length = String($0 || '').length;
            return _self.repeat('*', length);
        });
    }
};

  6.加密方法集

復制代碼 代碼如下:

pFan.encrypt = { //# 加密
    md5: function (words) {  //# md5 哈希算法
        /*
         * Crypto-JS 3.1.2
         * http://code.google.com/p/crypto-js
         */
        var CryptoJS = function (s, p) {
            var m = {}, l = m.lib = {}, n = function () { }, r = l.Base = { extend: function (b) { n.prototype = this; var h = new n; b && h.mixIn(b); h.hasOwnProperty("init") || (h.init = function () { h.$super.init.apply(this, arguments) }); h.init.prototype = h; h.$super = this; return h }, create: function () { var b = this.extend(); b.init.apply(b, arguments); return b }, init: function () { }, mixIn: function (b) { for (var h in b) b.hasOwnProperty(h) && (this[h] = b[h]); b.hasOwnProperty("toString") && (this.toString = b.toString) }, clone: function () { return this.init.prototype.extend(this) } }, q = l.WordArray = r.extend({ init: function (b, h) { b = this.words = b || []; this.sigBytes = h != p ? h : 4 * b.length }, toString: function (b) { return (b || t).stringify(this) }, concat: function (b) { var h = this.words, a = b.words, j = this.sigBytes; b = b.sigBytes; this.clamp(); if (j % 4) for (var g = 0; g < b; g++) h[j + g >>> 2] |= (a[g >>> 2] >>> 24 - 8 * (g % 4) & 255) << 24 - 8 * ((j + g) % 4); else if (65535 < a.length) for (g = 0; g < b; g += 4) h[j + g >>> 2] = a[g >>> 2]; else h.push.apply(h, a); this.sigBytes += b; return this }, clamp: function () { var b = this.words, h = this.sigBytes; b[h >>> 2] &= 4294967295 << 32 - 8 * (h % 4); b.length = s.ceil(h / 4) }, clone: function () { var b = r.clone.call(this); b.words = this.words.slice(0); return b }, random: function (b) { for (var h = [], a = 0; a < b; a += 4) h.push(4294967296 * s.random() | 0); return new q.init(h, b) } }), v = m.enc = {}, t = v.Hex = { stringify: function (b) { var a = b.words; b = b.sigBytes; for (var g = [], j = 0; j < b; j++) { var k = a[j >>> 2] >>> 24 - 8 * (j % 4) & 255; g.push((k >>> 4).toString(16)); g.push((k & 15).toString(16)) } return g.join("") }, parse: function (b) { for (var a = b.length, g = [], j = 0; j < a; j += 2) g[j >>> 3] |= parseInt(b.substr(j, 2), 16) << 24 - 4 * (j % 8); return new q.init(g, a / 2) } }, a = v.Latin1 = { stringify: function (b) { var a = b.words; b = b.sigBytes; for (var g = [], j = 0; j < b; j++) g.push(String.fromCharCode(a[j >>> 2] >>> 24 - 8 * (j % 4) & 255)); return g.join("") }, parse: function (b) { for (var a = b.length, g = [], j = 0; j < a; j++) g[j >>> 2] |= (b.charCodeAt(j) & 255) << 24 - 8 * (j % 4); return new q.init(g, a) } }, u = v.Utf8 = { stringify: function (b) { try { return decodeURIComponent(escape(a.stringify(b))) } catch (g) { throw Error("Malformed UTF-8 data"); } }, parse: function (b) { return a.parse(unescape(encodeURIComponent(b))) } },
                g = l.BufferedBlockAlgorithm = r.extend({ reset: function () { this._data = new q.init; this._nDataBytes = 0 }, _append: function (b) { "string" == typeof b && (b = u.parse(b)); this._data.concat(b); this._nDataBytes += b.sigBytes }, _process: function (b) { var a = this._data, g = a.words, j = a.sigBytes, k = this.blockSize, m = j / (4 * k), m = b ? s.ceil(m) : s.max((m | 0) - this._minBufferSize, 0); b = m * k; j = s.min(4 * b, j); if (b) { for (var l = 0; l < b; l += k) this._doProcessBlock(g, l); l = g.splice(0, b); a.sigBytes -= j } return new q.init(l, j) }, clone: function () { var b = r.clone.call(this); b._data = this._data.clone(); return b }, _minBufferSize: 0 }); l.Hasher = g.extend({ cfg: r.extend(), init: function (b) { this.cfg = this.cfg.extend(b); this.reset() }, reset: function () { g.reset.call(this); this._doReset() }, update: function (b) { this._append(b); this._process(); return this }, finalize: function (b) { b && this._append(b); return this._doFinalize() }, blockSize: 16, _createHelper: function (b) { return function (a, g) { return (new b.init(g)).finalize(a) } }, _createHmacHelper: function (b) { return function (a, g) { return (new k.HMAC.init(b, g)).finalize(a) } } }); var k = m.algo = {}; return m
        }(Math);
        (function (s) {
            function p(a, k, b, h, l, j, m) { a = a + (k & b | ~k & h) + l + m; return (a << j | a >>> 32 - j) + k } function m(a, k, b, h, l, j, m) { a = a + (k & h | b & ~h) + l + m; return (a << j | a >>> 32 - j) + k } function l(a, k, b, h, l, j, m) { a = a + (k ^ b ^ h) + l + m; return (a << j | a >>> 32 - j) + k } function n(a, k, b, h, l, j, m) { a = a + (b ^ (k | ~h)) + l + m; return (a << j | a >>> 32 - j) + k } for (var r = CryptoJS, q = r.lib, v = q.WordArray, t = q.Hasher, q = r.algo, a = [], u = 0; 64 > u; u++) a[u] = 4294967296 * s.abs(s.sin(u + 1)) | 0; q = q.MD5 = t.extend({
                _doReset: function () { this._hash = new v.init([1732584193, 4023233417, 2562383102, 271733878]) }, _doProcessBlock: function (g, k) {
                    for (var b = 0; 16 > b; b++) { var h = k + b, w = g[h]; g[h] = (w << 8 | w >>> 24) & 16711935 | (w << 24 | w >>> 8) & 4278255360 } var b = this._hash.words, h = g[k + 0], w = g[k + 1], j = g[k + 2], q = g[k + 3], r = g[k + 4], s = g[k + 5], t = g[k + 6], u = g[k + 7], v = g[k + 8], x = g[k + 9], y = g[k + 10], z = g[k + 11], A = g[k + 12], B = g[k + 13], C = g[k + 14], D = g[k + 15], c = b[0], d = b[1], e = b[2], f = b[3], c = p(c, d, e, f, h, 7, a[0]), f = p(f, c, d, e, w, 12, a[1]), e = p(e, f, c, d, j, 17, a[2]), d = p(d, e, f, c, q, 22, a[3]), c = p(c, d, e, f, r, 7, a[4]), f = p(f, c, d, e, s, 12, a[5]), e = p(e, f, c, d, t, 17, a[6]), d = p(d, e, f, c, u, 22, a[7]), c = p(c, d, e, f, v, 7, a[8]), f = p(f, c, d, e, x, 12, a[9]), e = p(e, f, c, d, y, 17, a[10]), d = p(d, e, f, c, z, 22, a[11]), c = p(c, d, e, f, A, 7, a[12]), f = p(f, c, d, e, B, 12, a[13]), e = p(e, f, c, d, C, 17, a[14]), d = p(d, e, f, c, D, 22, a[15]), c = m(c, d, e, f, w, 5, a[16]), f = m(f, c, d, e, t, 9, a[17]), e = m(e, f, c, d, z, 14, a[18]), d = m(d, e, f, c, h, 20, a[19]), c = m(c, d, e, f, s, 5, a[20]), f = m(f, c, d, e, y, 9, a[21]), e = m(e, f, c, d, D, 14, a[22]), d = m(d, e, f, c, r, 20, a[23]), c = m(c, d, e, f, x, 5, a[24]), f = m(f, c, d, e, C, 9, a[25]), e = m(e, f, c, d, q, 14, a[26]), d = m(d, e, f, c, v, 20, a[27]), c = m(c, d, e, f, B, 5, a[28]), f = m(f, c, d, e, j, 9, a[29]), e = m(e, f, c, d, u, 14, a[30]), d = m(d, e, f, c, A, 20, a[31]), c = l(c, d, e, f, s, 4, a[32]), f = l(f, c, d, e, v, 11, a[33]), e = l(e, f, c, d, z, 16, a[34]), d = l(d, e, f, c, C, 23, a[35]), c = l(c, d, e, f, w, 4, a[36]), f = l(f, c, d, e, r, 11, a[37]), e = l(e, f, c, d, u, 16, a[38]), d = l(d, e, f, c, y, 23, a[39]), c = l(c, d, e, f, B, 4, a[40]), f = l(f, c, d, e, h, 11, a[41]), e = l(e, f, c, d, q, 16, a[42]), d = l(d, e, f, c, t, 23, a[43]), c = l(c, d, e, f, x, 4, a[44]), f = l(f, c, d, e, A, 11, a[45]), e = l(e, f, c, d, D, 16, a[46]), d = l(d, e, f, c, j, 23, a[47]), c = n(c, d, e, f, h, 6, a[48]), f = n(f, c, d, e, u, 10, a[49]), e = n(e, f, c, d,
                                C, 15, a[50]), d = n(d, e, f, c, s, 21, a[51]), c = n(c, d, e, f, A, 6, a[52]), f = n(f, c, d, e, q, 10, a[53]), e = n(e, f, c, d, y, 15, a[54]), d = n(d, e, f, c, w, 21, a[55]), c = n(c, d, e, f, v, 6, a[56]), f = n(f, c, d, e, D, 10, a[57]), e = n(e, f, c, d, t, 15, a[58]), d = n(d, e, f, c, B, 21, a[59]), c = n(c, d, e, f, r, 6, a[60]), f = n(f, c, d, e, z, 10, a[61]), e = n(e, f, c, d, j, 15, a[62]), d = n(d, e, f, c, x, 21, a[63]); b[0] = b[0] + c | 0; b[1] = b[1] + d | 0; b[2] = b[2] + e | 0; b[3] = b[3] + f | 0
                }, _doFinalize: function () { var a = this._data, k = a.words, b = 8 * this._nDataBytes, h = 8 * a.sigBytes; k[h >>> 5] |= 128 << 24 - h % 32; var l = s.floor(b / 4294967296); k[(h + 64 >>> 9 << 4) + 15] = (l << 8 | l >>> 24) & 16711935 | (l << 24 | l >>> 8) & 4278255360; k[(h + 64 >>> 9 << 4) + 14] = (b << 8 | b >>> 24) & 16711935 | (b << 24 | b >>> 8) & 4278255360; a.sigBytes = 4 * (k.length + 1); this._process(); a = this._hash; k = a.words; for (b = 0; 4 > b; b++) h = k[b], k[b] = (h << 8 | h >>> 24) & 16711935 | (h << 24 | h >>> 8) & 4278255360; return a }, clone: function () { var a = t.clone.call(this); a._hash = this._hash.clone(); return a }
            }); r.MD5 = t._createHelper(q); r.HmacMD5 = t._createHmacHelper(q)
        })(Math);
        return CryptoJS.MD5(words).toString();
    }
    // sha1
    , sha1: function (words) { //# sha1  哈希算法
        var CryptoJS = function (e, m) { var p = {}, j = p.lib = {}, l = function () { }, f = j.Base = { extend: function (a) { l.prototype = this; var c = new l; a && c.mixIn(a); c.hasOwnProperty("init") || (c.init = function () { c.$super.init.apply(this, arguments) }); c.init.prototype = c; c.$super = this; return c }, create: function () { var a = this.extend(); a.init.apply(a, arguments); return a }, init: function () { }, mixIn: function (a) { for (var c in a) a.hasOwnProperty(c) && (this[c] = a[c]); a.hasOwnProperty("toString") && (this.toString = a.toString) }, clone: function () { return this.init.prototype.extend(this) } }, n = j.WordArray = f.extend({ init: function (a, c) { a = this.words = a || []; this.sigBytes = c != m ? c : 4 * a.length }, toString: function (a) { return (a || h).stringify(this) }, concat: function (a) { var c = this.words, q = a.words, d = this.sigBytes; a = a.sigBytes; this.clamp(); if (d % 4) for (var b = 0; b < a; b++) c[d + b >>> 2] |= (q[b >>> 2] >>> 24 - 8 * (b % 4) & 255) << 24 - 8 * ((d + b) % 4); else if (65535 < q.length) for (b = 0; b < a; b += 4) c[d + b >>> 2] = q[b >>> 2]; else c.push.apply(c, q); this.sigBytes += a; return this }, clamp: function () { var a = this.words, c = this.sigBytes; a[c >>> 2] &= 4294967295 << 32 - 8 * (c % 4); a.length = e.ceil(c / 4) }, clone: function () { var a = f.clone.call(this); a.words = this.words.slice(0); return a }, random: function (a) { for (var c = [], b = 0; b < a; b += 4) c.push(4294967296 * e.random() | 0); return new n.init(c, a) } }), b = p.enc = {}, h = b.Hex = { stringify: function (a) { var c = a.words; a = a.sigBytes; for (var b = [], d = 0; d < a; d++) { var f = c[d >>> 2] >>> 24 - 8 * (d % 4) & 255; b.push((f >>> 4).toString(16)); b.push((f & 15).toString(16)) } return b.join("") }, parse: function (a) { for (var c = a.length, b = [], d = 0; d < c; d += 2) b[d >>> 3] |= parseInt(a.substr(d, 2), 16) << 24 - 4 * (d % 8); return new n.init(b, c / 2) } }, g = b.Latin1 = { stringify: function (a) { var c = a.words; a = a.sigBytes; for (var b = [], d = 0; d < a; d++) b.push(String.fromCharCode(c[d >>> 2] >>> 24 - 8 * (d % 4) & 255)); return b.join("") }, parse: function (a) { for (var c = a.length, b = [], d = 0; d < c; d++) b[d >>> 2] |= (a.charCodeAt(d) & 255) << 24 - 8 * (d % 4); return new n.init(b, c) } }, r = b.Utf8 = { stringify: function (a) { try { return decodeURIComponent(escape(g.stringify(a))) } catch (c) { throw Error("Malformed UTF-8 data"); } }, parse: function (a) { return g.parse(unescape(encodeURIComponent(a))) } }, k = j.BufferedBlockAlgorithm = f.extend({ reset: function () { this._data = new n.init; this._nDataBytes = 0 }, _append: function (a) { "string" == typeof a && (a = r.parse(a)); this._data.concat(a); this._nDataBytes += a.sigBytes }, _process: function (a) { var c = this._data, b = c.words, d = c.sigBytes, f = this.blockSize, h = d / (4 * f), h = a ? e.ceil(h) : e.max((h | 0) - this._minBufferSize, 0); a = h * f; d = e.min(4 * a, d); if (a) { for (var g = 0; g < a; g += f) this._doProcessBlock(b, g); g = b.splice(0, a); c.sigBytes -= d } return new n.init(g, d) }, clone: function () { var a = f.clone.call(this); a._data = this._data.clone(); return a }, _minBufferSize: 0 }); j.Hasher = k.extend({ cfg: f.extend(), init: function (a) { this.cfg = this.cfg.extend(a); this.reset() }, reset: function () { k.reset.call(this); this._doReset() }, update: function (a) { this._append(a); this._process(); return this }, finalize: function (a) { a && this._append(a); return this._doFinalize() }, blockSize: 16, _createHelper: function (a) { return function (c, b) { return (new a.init(b)).finalize(c) } }, _createHmacHelper: function (a) { return function (b, f) { return (new s.HMAC.init(a, f)).finalize(b) } } }); var s = p.algo = {}; return p }(Math);
        (function () { var e = CryptoJS, m = e.lib, p = m.WordArray, j = m.Hasher, l = [], m = e.algo.SHA1 = j.extend({ _doReset: function () { this._hash = new p.init([1732584193, 4023233417, 2562383102, 271733878, 3285377520]) }, _doProcessBlock: function (f, n) { for (var b = this._hash.words, h = b[0], g = b[1], e = b[2], k = b[3], j = b[4], a = 0; 80 > a; a++) { if (16 > a) l[a] = f[n + a] | 0; else { var c = l[a - 3] ^ l[a - 8] ^ l[a - 14] ^ l[a - 16]; l[a] = c << 1 | c >>> 31 } c = (h << 5 | h >>> 27) + j + l[a]; c = 20 > a ? c + ((g & e | ~g & k) + 1518500249) : 40 > a ? c + ((g ^ e ^ k) + 1859775393) : 60 > a ? c + ((g & e | g & k | e & k) - 1894007588) : c + ((g ^ e ^ k) - 899497514); j = k; k = e; e = g << 30 | g >>> 2; g = h; h = c } b[0] = b[0] + h | 0; b[1] = b[1] + g | 0; b[2] = b[2] + e | 0; b[3] = b[3] + k | 0; b[4] = b[4] + j | 0 }, _doFinalize: function () { var f = this._data, e = f.words, b = 8 * this._nDataBytes, h = 8 * f.sigBytes; e[h >>> 5] |= 128 << 24 - h % 32; e[(h + 64 >>> 9 << 4) + 14] = Math.floor(b / 4294967296); e[(h + 64 >>> 9 << 4) + 15] = b; f.sigBytes = 4 * e.length; this._process(); return this._hash }, clone: function () { var e = j.clone.call(this); e._hash = this._hash.clone(); return e } }); e.SHA1 = j._createHelper(m); e.HmacSHA1 = j._createHmacHelper(m) })();
        return CryptoJS.SHA1(words).toString();
    }
    // time33 哈希
    , time33: function (words) { //# time33 哈希算法
        words = words || '';
        //哈希time33算法
        for (var i = 0, len = words.length, hash = 5381; i < len; ++i) {
            hash += (hash << 5) + words.charAt(i).charCodeAt();
        };
        return hash & 0x7fffffff;
    }
}

  7.日期方法集

復制代碼 代碼如下:

pFan.date = {
    //返回時間戳
    getTimeStamp:function(){
        var timestamp=new Date().getTime();
        return timestamp.toString();
    },
    //時間戳轉為日期格式
    //@nS為時間戳
    getLocalTime: function(nS) { 
        return new Date(parseInt(nS) * 1000).toLocaleString().substr(0,17);
    },
    //@time , 時間 , 如 new Date('2013/11/10 0:12:12')
    //@pre , 星期的 前綴,如:周 ,星期
    //@ nums ,如:一二三四五六日
    getWeek: function (time, pre, nums) { //# 獲取星期幾
        time = typeof time == 'string' ? this.parse(time) : (time || new Date());
        pre = pre || '星期'; //周
        nums = nums || '日一二三四五六';
        return pre + nums[time.getDay()];
    },
    //@formatType : YYYY, YY, MM
    //@ time : new Date('2013/11/12')
    //@weeks : 日一二三四五六
    format: function (formatType, time, weeks) { //格式化輸出時間
        var pre = '0',
        formatType = formatType || 'YYYY-MM-DD',
        weeks = weeks || '日一二三四五六',
        time = time || new Date();
        //格式化時間
        return (formatType || '')
            .replace(/yyyy|YYYY/g, time.getFullYear())
            .replace(/yy|YY/g, Tydic.string.addPre(pre, time.getFullYear() % 100), 2)
            .replace(/mm|MM/g, Tydic.string.addPre(pre, time.getMonth() + 1, 2))
            .replace(/m|M/g, time.getMonth() + 1)
            .replace(/dd|DD/g, Tydic.string.addPre(pre, time.getDate(), 2))
            .replace(/d|D/g, time.getDate())
            .replace(/hh|HH/g, Tydic.string.addPre(pre, time.getHours(), 2))
            .replace(/h|H/g, time.getHours())
            .replace(/ii|II/g, Tydic.string.addPre(pre, time.getMinutes(), 2))
            .replace(/i|I/g, time.getMinutes())
            .replace(/ss|SS/g, Tydic.string.addPre(pre, time.getSeconds(), 2))
            .replace(/s|S/g, time.getSeconds())
            .replace(/w/g, time.getDay())
            .replace(/W/g, weeks[time.getDay()]);
    }   
}

簡簡單單,pfan!出來混的,一切都是要還的。

以上就是本文關鍵jQuery和js常用知識點的匯總小結了,希望大家能夠喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91亚洲精品一区二区| 国产成人鲁鲁免费视频a| 久久久久久久久91| 国产在线高清精品| 亚洲天堂精品在线| 91av在线网站| 在线观看欧美www| 日韩欧美中文免费| 欧美在线视频在线播放完整版免费观看| 91成人精品网站| 国产日本欧美在线观看| 综合国产在线观看| 亚洲图片欧美日产| 欧美二区在线播放| 国产精品成人一区| 亚洲欧美一区二区精品久久久| 欧美电影免费观看网站| 奇米一区二区三区四区久久| 亚洲自拍偷拍色片视频| 亚洲国产另类 国产精品国产免费| 午夜精品一区二区三区视频免费看| 欧美大胆在线视频| 精品日本高清在线播放| 亚洲精品一区中文字幕乱码| 亚洲免费av电影| 亚洲美女av在线| 亚洲深夜福利网站| 日韩有码片在线观看| 激情久久av一区av二区av三区| 久久久久成人精品| 日韩中文字幕在线观看| 美日韩丰满少妇在线观看| 91久久久久久| 日韩欧美国产骚| 91精品久久久久久久久中文字幕| 日韩国产精品视频| 91黑丝在线观看| 国外成人免费在线播放| 国模叶桐国产精品一区| 午夜剧场成人观在线视频免费观看| 中文国产成人精品| 欧美大片大片在线播放| 亚洲中国色老太| 欧洲s码亚洲m码精品一区| 欧美成人h版在线观看| 成人福利在线观看| 国产97在线播放| 国产成人亚洲精品| 精品福利免费观看| 日韩美女福利视频| 日日骚久久av| 日韩女优人人人人射在线视频| 精品久久久久久电影| 国产欧美精品一区二区三区-老狼| 久久精品人人爽| 91在线|亚洲| 日韩电影在线观看中文字幕| 国产精品白丝jk喷水视频一区| 国产91对白在线播放| 国产精品丝袜久久久久久高清| 欧美精品一区三区| 在线视频欧美日韩| 日韩最新免费不卡| 日韩在线视频观看正片免费网站| 国产在线精品播放| 国产精品久久久久久久9999| 欧美激情图片区| 日韩有码在线观看| 欧美激情精品在线| 日产日韩在线亚洲欧美| 国产精品一区二区在线| 国产午夜精品一区理论片飘花| 日韩h在线观看| 亚洲亚裔videos黑人hd| 国产91在线播放九色快色| 综合国产在线观看| 亚洲欧美中文字幕| 国产精自产拍久久久久久蜜| 国产91精品黑色丝袜高跟鞋| 色噜噜狠狠狠综合曰曰曰| 国产免费一区二区三区在线观看| 狠狠久久五月精品中文字幕| 91精品国产高清久久久久久久久| 国产精品激情av在线播放| 亚洲国产精品字幕| 欧美国产中文字幕| 欧美日韩激情小视频| 亚洲毛片一区二区| 亚洲free性xxxx护士hd| 日韩在线中文字| 国产精品久久视频| 欧美色道久久88综合亚洲精品| 亚洲成年人影院在线| 国产精品成人免费视频| 亚洲xxx自由成熟| 亚洲已满18点击进入在线看片| 国产亚洲精品久久久久久777| 国产精品老女人精品视频| 久久综合亚洲社区| 91夜夜未满十八勿入爽爽影院| 激情亚洲一区二区三区四区| 欧美性猛交xxxx免费看| 欧美日韩中国免费专区在线看| 欧美激情久久久久| 亚洲欧洲午夜一线一品| 国产精品丝袜一区二区三区| 亚洲福利精品在线| 亚洲精品99久久久久中文字幕| 亚洲自拍偷拍一区| 欧美激情xxxxx| 久久99久国产精品黄毛片入口| 欧美日韩国产中文字幕| 久久久久日韩精品久久久男男| 亚洲国产精品一区二区久| 夜色77av精品影院| 在线播放国产一区中文字幕剧情欧美| 久久久久久国产精品美女| 欧美另类极品videosbest最新版本| 亚洲精品视频免费在线观看| 日韩高清av一区二区三区| 国产精品永久免费| 精品国产91久久久| 深夜福利91大全| 亚洲级视频在线观看免费1级| 成人网在线视频| 亚洲偷欧美偷国内偷| 欧美国产在线视频| 午夜精品久久久久久久99热浪潮| 国产91久久婷婷一区二区| 国产91精品青草社区| 欧美在线一区二区视频| 久久韩剧网电视剧| 亚洲精品资源美女情侣酒店| 久色乳综合思思在线视频| 欧美成在线视频| 国产精品视频公开费视频| 亚洲欧美自拍一区| 欧美性猛交xxxx免费看漫画| 久久久久久国产精品美女| 中文字幕日韩精品有码视频| 日韩欧美亚洲综合| 国产午夜精品视频免费不卡69堂| 欧美在线视频免费| 日韩极品精品视频免费观看| 亚洲人午夜色婷婷| 亚洲最大福利视频| 欧美www在线| 国模精品视频一区二区三区| 亚洲第一区中文字幕| 欧美老女人bb| 欧美极品在线播放| 国产在线观看不卡| 欧美成人国产va精品日本一级| 欧美成年人视频网站| 欧美精品aaa| 亚洲免费视频一区二区| 欧美老少配视频| 欧美区二区三区| 亚洲已满18点击进入在线看片| 精品高清一区二区三区| 欧美一级淫片aaaaaaa视频| 国产精品伦子伦免费视频| 综合欧美国产视频二区| 日韩欧美极品在线观看|