js+jquery常用知识点汇总


Posted in Javascript onMarch 03, 2015

一、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);

结果:

js+jquery常用知识点汇总

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 "\\" + 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 "\\" + 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常用知识点的汇总小结了,希望大家能够喜欢。

Javascript 相关文章推荐
FireFox与IE 下js兼容触发click事件的代码
Nov 20 Javascript
InnerHtml和InnerText的区别分析
Mar 13 Javascript
jQuery 1.5.1 发布,全面支持IE9 修复大量bug
Feb 26 Javascript
jQuery知识点整理
Jan 30 Javascript
JS实现常见的TAB、弹出层效果(TAB标签,斑马线,遮罩层等)
Oct 08 Javascript
jQuery取消特定的click事件
Feb 29 Javascript
BootStrap 智能表单实战系列(五) 表单依赖插件处理
Jun 13 Javascript
ES6中Proxy与Reflect实现重载(overload)的方法
Mar 30 Javascript
三分钟教你用Node做一个微信哄女友(基友)神器(面向小白)
Jun 21 Javascript
编写更好的JavaScript条件式和匹配条件的技巧(小结)
Jun 27 Javascript
Vue+Node实现的商城用户管理功能示例
Dec 23 Javascript
解决vue axios跨域 Request Method: OPTIONS问题(预检请求)
Aug 14 Javascript
js实现宇宙星空背景效果的方法
Mar 03 #Javascript
Angular中的Promise对象($q介绍)
Mar 03 #Javascript
Javascript设计模式之观察者模式的多个实现版本实例
Mar 03 #Javascript
Node.js 学习笔记之简介、安装及配置
Mar 03 #Javascript
JS+CSS模拟可以无刷新显示内容的留言板实例
Mar 03 #Javascript
JavaScript跨浏览器获取页面中相同class节点的方法
Mar 03 #Javascript
JS实现鼠标点击展开或隐藏表格行的方法
Mar 03 #Javascript
You might like
中国站长站 For Dede4.0 采集规则
2007/05/27 PHP
如何使用PHP实现javascript的escape和unescape函数
2013/06/29 PHP
php中的路径问题与set_include_path使用介绍
2014/02/11 PHP
Codeigniter出现错误提示Error with CACHE directory的解决方案
2014/06/12 PHP
php通过array_unshift函数添加多个变量到数组前端的方法
2015/03/18 PHP
Swoole4.4协程抢占式调度器详解
2019/05/23 PHP
利用javascript移动div层-javascript 拖动层
2009/03/22 Javascript
EasySlider 基于jQuery功能强大简单易用的滑动门插件
2010/06/11 Javascript
Google AJAX 搜索 API实现代码
2010/11/17 Javascript
javascript 兼容所有浏览器的DOM扩展功能
2012/08/01 Javascript
JS Replace()的高级使用方法介绍
2013/06/29 Javascript
AngularJS入门教程(零):引导程序
2014/12/06 Javascript
JavaScript中的toLocaleDateString()方法使用简介
2015/06/12 Javascript
jquery判断密码强度的验证代码
2020/04/22 Javascript
JS折半插入排序算法实例
2015/12/02 Javascript
干货分享:让你分分钟学会javascript闭包
2015/12/25 Javascript
Linux下为Node.js程序配置MySQL或Oracle数据库的方法
2016/03/19 Javascript
详解vue过滤器在v2.0版本用法
2017/06/01 Javascript
Webpack 服务器端代码打包的示例代码
2017/09/19 Javascript
JavaScript实现的仿新浪微博原生态输入字数即时检查功能【兼容IE6】
2017/09/26 Javascript
微信小程序倒计时功能实例代码
2018/07/17 Javascript
Vuex 使用及简单实例(计数器)
2018/08/29 Javascript
webpack4.0 入门实践教程
2018/10/08 Javascript
谈一谈vue请求数据放在created好还是mounted里好
2020/07/27 Javascript
Vue通过provide inject实现组件通信
2020/09/03 Javascript
不到20行实现Python代码即可制作精美证件照
2020/04/24 Python
Python如何对XML 解析
2020/06/28 Python
瑞典耳机品牌:URBANISTA
2019/12/03 全球购物
就业自荐信
2013/12/04 职场文书
运动会稿件200字
2014/02/07 职场文书
2014年开学第一课活动方案
2014/03/06 职场文书
教师自我鉴定范文
2014/03/20 职场文书
企业开业庆典答谢词
2015/01/20 职场文书
小学英语教师2015年度个人工作总结
2015/10/14 职场文书
2016入党积极分子党校培训心得体会
2016/01/06 职场文书
postgreSQL数据库基础知识介绍
2022/04/12 PostgreSQL