午夜国产狂喷潮在线观看|国产AⅤ精品一区二区久久|中文字幕AV中文字幕|国产看片高清在线

    js+jquery常用知識(shí)點(diǎn)匯總
    來(lái)源:易賢網(wǎng) 閱讀:1538 次 日期:2015-03-06 10:40:19
    溫馨提示:易賢網(wǎng)小編為您整理了“js+jquery常用知識(shí)點(diǎn)匯總”,方便廣大網(wǎng)友查閱!

    本文主要介紹了jquery源碼中常見(jiàn)的知識(shí)點(diǎn)以及javascript中原型鏈常見(jiàn)的知識(shí)點(diǎn),非常的全面,這里推薦給小伙伴們。

    一、jquery源碼中常見(jiàn)的知識(shí)點(diǎn)

    1.string,number類型轉(zhuǎn)換的快捷方法

    代碼如下:

    // @param s為字符串,n為數(shù)字

    function fn(obj){

    //轉(zhuǎn)換為String類型

    var s = obj +"";

    //轉(zhuǎn)換為number類型

    var n = +obj;

    }

      分享一個(gè)面試?yán)樱?/P>

    //加會(huì)將其后面自動(dòng)轉(zhuǎn)換成字符串

    "64"+4="644"

    //減會(huì)將其自動(dòng)轉(zhuǎn)換成數(shù)字

    "64"-4=60

      2.bool類型轉(zhuǎn)換

      !!obj,將其強(qiáng)制轉(zhuǎn)換為bool類型

    代碼如下:

    alert(!!0) //結(jié)果為false

    alert(!!"33dd") //結(jié)果為true

      !obj,取相反的bool類型

    代碼如下:

    alert(!0) //結(jié)果為true

    alert(!"222333") //結(jié)果為false

      3.=== 與 ==區(qū)別

      === 是嚴(yán)格相等,不會(huì)進(jìn)行類型轉(zhuǎn)換,而 == 是不嚴(yán)格相等,會(huì)進(jìn)行類型轉(zhuǎn)換。有些js的書(shū)中,建議開(kāi)發(fā)人員永遠(yuǎn)不要用 == 或者 != 。

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

    代碼如下:

    //這里的判斷,將obj是null,obj是undefined都排除在外了

    if(obj != null){

    }

      4.檢測(cè)obj是否為window對(duì)象

    代碼如下:

    //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為{},因?yàn)閍a為5,不為0則為真

    this.name = bool && [] //如果bool為true,則值為[],反之則為bool

      經(jīng)典實(shí)例:

    代碼如下:

    ( window.foo || ( window.foo = "bar" ) );

    alert(window.foo); //彈出 bar

    // 為什么最后的結(jié)果是bar呢,其實(shí)可以看成是 undefined || bar 出來(lái)的結(jié)果肯定是bar

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

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

    代碼如下:

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

      結(jié)果:

      7.判斷是否為數(shù)值

    代碼如下:

    function isNumeric(obj){

    return !isNaN(parseFloat(obj)) && isFinite(obj);

    }

      8.判斷是否為空對(duì)象

    代碼如下:

    function isEmptyObject(){

    var name;

    //遍歷不是空對(duì)象返回

    for (name in obj) {

    return false;

    }

    return true;

    }

      9.檢測(cè)對(duì)象類型

      檢測(cè)obj對(duì)象類型,返回類型,通過(guò)Object.prototype.toString()來(lái)判斷類型,但是ie低版本兼容性有問(wèn)題,因此采用{}.toString來(lái)監(jiān)測(cè),返回為[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妙用

    代碼如下:

    //相當(dāng)于if (String.prototype.trim && “\uFEFF\xA0″.trim() !== “”)高級(jí)的瀏覽器已經(jīng)支持原生的String的trim方法,但是pFan還為了避免它沒(méi)法解析全角空白,所以加多了一個(gè)判斷:”\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); //這里按我的理解應(yīng)該為" ".trim.call(text),有點(diǎn)不明白轉(zhuǎn)換為"1.1.0".trim.call(text)

    } :

    // 高級(jí)的瀏覽器已經(jīng)支持原生的String的trim方法,如果瀏覽器不支持則采用

    function (text) {

    var whitespace = "[\\x20\\t\\r\\n\\f]",

    rtrim = new RegExp("^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g");

    return text == null ?

    "" :

    (text + "").replace(rtrim, "");

    },

    //nodeName函數(shù)是獲取dom節(jié)點(diǎn)的節(jié)點(diǎn)名字或者判斷其名字跟傳入?yún)?shù)是否匹配

    nodeName: function(elem,name){

    //IE下,DOM節(jié)點(diǎn)的nodeName是大寫(xiě)的,例如DIV

    return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();

    }

    }

      11.jquery中檢測(cè)數(shù)組或者類數(shù)組中是否含存在傳入的值

    代碼如下:

    /**

    檢查數(shù)組中是否存在傳入的值,如果存在就返回值所在的位置,如果不存在就返回-1。

    *elem 規(guī)定需檢索的值。

    *arr 數(shù)組

    *i 可選的整數(shù)參數(shù)。規(guī)定在數(shù)組中開(kāi)始檢索的位置。它的合法取值是 0 到 arr.length - 1。如省略該參數(shù),則將從數(shù)組首元素開(kāi)始檢索。

    */

    function inArray(elem, arr, i){

    var len;

    if (arr) {

    //如果瀏覽器支持Array擁有indexOf方法

    if ([].indexOf) {

    return [].indexOf.call(arr, elem, i);

    }

    len = arr.length;

    //當(dāng)i為負(fù)數(shù)的時(shí)候,從數(shù)組后邊len+i的位置開(kāi)始索引

    //理解這個(gè)分成兩個(gè)部分i = i ? (i < 0 ? Math.max(0, len + i) : i) : 0;,i=i為true,執(zhí)行(i < 0 ? Math.max(0, len + i) : i),反正執(zhí)行i=0

    i = i ? i < 0 ? Math.max(0, len + i) : i : 0;

    for (; i < len; i++) {

    // 雙重檢測(cè)防止類似這樣的數(shù)組 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中原型鏈常見(jiàn)的知識(shí)點(diǎn)

      1.hasOwnProperty()方法

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

    代碼如下:

    function Person(){

    this.age=25;

    this.job="web";

    }

    Person.prototype={

    name:'pingfan',

    sayName:function(){

    alert(this.name);

    }

    }

    var person1=new Person();

    //來(lái)自構(gòu)造函數(shù),檢測(cè)屬性,也返回true

    alert(person1.hasOwnProperty("age"));

    //來(lái)自原型屬性,返回false

    alert(person1.hasOwnProperty("name"));

    person1.name='ping';

    //來(lái)自實(shí)例屬性,返回true

    alert(person1.hasOwnProperty("name"));

      2.通過(guò)instanceOf保證只實(shí)例一次

    代碼如下:

    function shiCha(opt){

    //只實(shí)例一次

    if( !(this instanceof shiCha)){

    return new shiCha(opt);

    }

    }

    var shicha = shiCha();

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

      我們通??吹紸rray.prototype.slice.call(arguments,1)或者Array.prototype.slice.call(arguments),都有點(diǎn)摸不著頭腦,其實(shí)我們就是借助Array.prototype中slice()將arguments變成一個(gè)數(shù)組,并且使用該數(shù)組工作更方便,第二個(gè)參數(shù)是從索引值,開(kāi)始將其變成數(shù)組,例Array.prototype.call("22223",2)和Array.prototype.call([1,2,3,4],2),從字符串第二個(gè)開(kāi)始。

    代碼如下:

    function sliArray(array){

    //輸出為從索引1到索引3

    return Array.prototype.slice.call(array,1,3);

    }

    alert(sliArray([1,2,3,4,5,6])) //結(jié)果為2,3

      4. 利用空對(duì)象F,實(shí)現(xiàn)對(duì)象繼承,效率最高

    代碼如下:

    //利用空對(duì)象做媒介,進(jìn)行繼承效果最佳

    function inhert(C,P){

    var F=function(){};

    F.protototype = P.prototype;

    C.prototype = new F();

    C.prototype.constructor = C;

    }

    三、javascript中常用方法集

    1. 常見(jiàn)的數(shù)組操作方法

      數(shù)組去重:

    代碼如下:

    //數(shù)組去重原型

    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();

    }

      取數(shù)組中最大值:

    代碼如下:

    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;

    }

    //數(shù)組中通過(guò)sort取最大值

    Array.prototype.arrMax=function(){

    var arr=this;

    arr.sort(function(a,b){

    return a-b;

    })

    return arr[arr.length-1];

    }

    //利用Math.max取數(shù)組最大值

    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());

      取數(shù)組中最小值:

    代碼如下:

    //數(shù)組中最的小值

    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;

    }

    //數(shù)組中通過(guò)sort取最的小值

    Array.prototype.arrSortMin=function(){

    var arr=this;

    arr.sort(function(a,b){

    return a-b;

    })

    return arr[0];

    }

    //利用Math.max取數(shù)組最大值

    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());

      復(fù)制數(shù)組:

    代碼如下:

    Array.prototype.copy =

    function() {

    return [].concat(this);

    };

      去除數(shù)組中只指定元素,只能去除一個(gè),如果想多個(gè),之前先用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的方法集(這里借用了園友總結(jié)的相關(guān)方法)

    代碼如下:

    pFan.url = { //#URL

    //參數(shù):變量名,url為空則表從當(dāng)前頁(yè)面的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.常用的正則表達(dá)式

    代碼如下:

    pFan.regExp = { //# 字符串匹配

    //是否為 數(shù)字!整數(shù),浮點(diǎn)數(shù)

    isNum: function (num) { //# 是否為數(shù)組

    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) { //# 是否為 手機(jī)

    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進(jìn)制顏色

    return /#([\da-f]{3}){1,2}$/i.test(color);

    }

    //@id : 身份證 ,

    // @now : 當(dāng)前時(shí)間 如:new Date('2013/12/12') , '2013/12/12'

    // @age : 允許的年齡

    , isAdult: function (id, allowAge, now) { //# 是否年齡是否成年

    var age = 0 // 用戶 年月日

    , nowDate = 0 //當(dāng)前年月日

    ;

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

    }

    // 類型轉(zhuǎn)換 整型

    age = ~~age;

    nowDate = ~~(Tydic.date.format('YYYYMMDD', now));

    //比較年齡

    if (nowDate - age < allowAge * 1e4) {

    return false;

    }

    return true;

    }

    //浮點(diǎn)數(shù)

    , isFloat: function (num) { //# 是否為 浮點(diǎn)數(shù)

    return /^(([1-9]\d*)|(\d+\.\d+)|0)$/.test(num);

    }

    //正整數(shù)

    , isInt: function (num) { //# 是否為 正整數(shù)

    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('());

    },

    addClass:function(){

    if (!hasClass(ele,cls)) ele.className += " "+cls;

    },

    removeClass:function(){

    if (hasClass(ele,cls)) {

    var reg = new RegExp('();

    ele.className=ele.className.replace(reg,' ');

    }

    }

    }

      5.操作字符串方法

    代碼如下:

    pFan.string = { //# 字符串

    codeHtml: function (content) { //# 轉(zhuǎn)義 HTML 字符

    return this.replace(content, {

    '&': "&"

    , '"': """

    , "'": '''

    , '<': "<"

    , '>': ">"

    , ' ': " "

    , '\t': " "

    , '(': "("

    , ')': ")"

    , '*': "*"

    , '+': "+"

    , ',': ","

    , '-': "-"

    , '.': "."

    , '/': "/"

    , '?': "?"

    , '\\': "\"

    , '\n': "<br>"

    });

    }

    //重復(fù)字符串

    , repeat: function (word, length, end) { //# 重復(fù)字符串

    end = end || ''; //加在末位

    length = ~~length;

    return new Array(length * 1 + 1).join(word) + '' + end;

    }

    //增加前綴

    , addPre: function (pre, word, size) { //# 補(bǔ)齊。如給數(shù)字前 加 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*| *)$/, "");

    }

    //返回腳本內(nèi)容

    ,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;

    }

    //清除腳本內(nèi)容

    ,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 轉(zhuǎn)義

    //空過(guò)濾

    if (!str) {

    return str === 0 ? "0" : "";

    }

    switch (type) {

    case "html": //過(guò)濾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": //過(guò)濾DOM節(jié)點(diǎn)屬性中的XSS

    return str.replace(/[&'"<>\/\\\-\x00-\x1f\x80-\xff]/g, function (r) {

    return "&#" + r.charCodeAt(0) + ";"

    });

    break;

    case "url": //過(guò)濾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, ", ", ", "");

    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 , 過(guò)濾敏感詞

    //@text : 要過(guò)濾的文本 , 類型 :字符串

    //@words : 敏感詞 ,類型,數(shù)組, 如 : ['你妹', '我丟' ,'我靠']

    // 如果 用 正則匹配, text 長(zhǎng)度 100萬(wàn),words 100萬(wàn),需要 4秒!

    , badWord: function (text, words) { //# 敏感詞過(guò)濾

    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

    *

    */

    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 = {

    //返回時(shí)間戳

    getTimeStamp:function(){

    var timestamp=new Date().getTime();

    return timestamp.toString();

    },

    //時(shí)間戳轉(zhuǎn)為日期格式

    //@nS為時(shí)間戳

    getLocalTime: function(nS) {

    return new Date(parseInt(nS) * 1000).toLocaleString().substr(0,17);

    },

    //@time , 時(shí)間 , 如 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) { //格式化輸出時(shí)間

    var pre = '0',

    formatType = formatType || 'YYYY-MM-DD',

    weeks = weeks || '日一二三四五六',

    time = time || new Date();

    //格式化時(shí)間

    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()]);

    }

    }

    簡(jiǎn)簡(jiǎn)單單,pfan!出來(lái)混的,一切都是要還的。

    以上就是本文關(guān)鍵jQuery和js常用知識(shí)點(diǎn)的匯總小結(jié)了,希望大家能夠喜歡。

    更多信息請(qǐng)查看IT技術(shù)專欄

    更多信息請(qǐng)查看腳本欄目
    易賢網(wǎng)手機(jī)網(wǎng)站地址:js+jquery常用知識(shí)點(diǎn)匯總
    由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

    2025國(guó)考·省考課程試聽(tīng)報(bào)名

    • 報(bào)班類型
    • 姓名
    • 手機(jī)號(hào)
    • 驗(yàn)證碼
    關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 新媒體/短視頻平臺(tái) | 手機(jī)站點(diǎn) | 投訴建議
    工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
    云南網(wǎng)警備案專用圖標(biāo)
    聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
    咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
    云南網(wǎng)警報(bào)警專用圖標(biāo)