Home  >  Article  >  Web Front-end  >  Summary of common knowledge points of js jquery_javascript skills

Summary of common knowledge points of js jquery_javascript skills

WBOY
WBOYOriginal
2016-05-16 16:11:311187browse

1. Common knowledge points in jquery source code

 1.string, a shortcut method for number type conversion

Copy code The code is as follows:

// @param s is a string, n is a number
function fn(obj){
//Convert to String type
var s = obj "";
//Convert to number type
var n = obj;
}

Share an interview example:

//Add will automatically convert the following into a string
"64" 4="644"
//Subtraction will automatically convert it into a number
"64"-4=60

 2.bool type conversion

!!obj, cast it to bool type

Copy code The code is as follows:

alert(!!0) //The result is false
alert(!!"33dd") //The result is true

!obj, take the opposite bool type

Copy code The code is as follows:

alert(!0) //The result is true
alert(!"222333") //The result is false

 3. The difference between === and ==

=== is strict equality and will not perform type conversion, while == is not strict equality and will perform type conversion. Some js books recommend that developers never use == or !=.

But in the jquery source code, there are situations where "==" or "!=" is used - when judging undefined and null.

Copy code The code is as follows:

//The judgment here excludes obj being null and obj being undefined
if(obj != null){
}

 4. Check whether obj is a window object

Copy code The code is as follows:

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

 5.|| and && usage tips

Copy code The code is as follows:

//Example var aa=5; name = aa || {} ; alert(name) then name is 55
this.name = name || {} //If the name value exists, the value is name, otherwise it is {}
//Example var aa=5; name = aa && {}; alert(name) then name is {}, because aa is 5, it is true if it is not 0
this.name = bool && [] //If bool is true, the value is [], otherwise it is bool

Classic example:

Copy code The code is as follows:

( window.foo || ( window.foo = "bar" ) );
alert(window.foo); //pop up bar
// Why is the final result bar? In fact, it can be seen as undefined || bar The result must be bar

 6. The difference between setTimeout(fn,0) and setTimeout(fn)

SetTimeout(fn,0) and setTimeout(fn) are both delayed executions, but setTimeout(fn) has a longer delay than setTimeout(fn,0), for example

Copy code The code is as follows:

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

Result:

7. Determine whether it is a numerical value

Copy code The code is as follows:

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

8. Determine whether it is an empty object

Copy code The code is as follows:

function isEmptyObject(){
var name;
//Traverse if the object is not empty and return
for (name in obj) {
         return false;
}
Return true;
}

 9. Detection object type

Detect the obj object type and return type. Use Object.prototype.toString() to determine the type. However, there is a compatibility problem with lower versions of IE, so {}.toString is used to monitor, and the return is [object Array],[object Object],[object Function]

Copy code The code is as follows:

//Type judgment
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. The magic trick of trim to remove spaces in jquery

Copy code The code is as follows:

//Equivalent to if (String.prototype.trim && “uFEFFxA0″.trim() !== “”) Advanced browsers already support the native String trim method, but pFan also cannot parse full-width blanks in order to avoid it. So an additional judgment is added: "uFEFFxA0".trim() !== ""
vart core_version = "1.0",core_trim = core_version.trim; function trim(){
Core_trim && !core_trim.call("uFEFFxA0") ?
function (text) {
                                      return text == null ?
"" :
Core_trim.Call (text); // Here, according to my understanding, it should be "" ".trim.call (text). It is a bit not understood to convert it to" 1.1.0 ".trim.ct (text)
>                                                                                                                                       
                                                       // Advanced browsers already support the native String trim method. If the browser does not support it, use
function (text) {
Var Whitespace = "[\ x20 \ t \ r \ n \ n \ f]",
                       rtrim = new RegExp("^" whitespace " |((?:^|[^\\])(?:\\.)*)" whitespace " $", "g");
                                      return text == null ?
"" :
(text "").replace(rtrim, "");
                    },
                            //nodeName function is to get the node name of the dom node or to determine whether its name matches the incoming parameters
nodeName: function(elem,name){
//Under IE, the nodeName of the DOM node is in uppercase letters, such as DIV
                                  return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
                }
}


 

11. Detect whether an array or array-like contains an incoming value in jquery

Copy code The code is as follows:

/**
Check whether the passed value exists in the array, if it exists, return the position of the value, if not, return -1.
*elem specifies the value to be retrieved.
*arr array
*i Optional integer parameter. Specifies the position in the array to start searching. Its legal values ​​are 0 to arr.length - 1. If this parameter is omitted, the search will start from the first element of the array.
​*/
function inArray(elem, arr, i){
var len;
If (arr) {
//If the browser supports Array, it has the indexOf method
If ([].indexOf) {
                return [].indexOf.call(arr, elem, i);
}
        len = arr.length;
//When i is a negative number, start indexing from the position of len i at the end of the array
//Understand this is divided into two parts i = i ? (i < 0 ? Math.max(0, len i) : i) : 0;, i=i is true, execute (i < 0 ? Math.max (0, len i) : i), anyway execute i=0
i = i ? i < 0 ? Math.max(0, len i) : i : 0;
for (; i < len; i ) {
// Double checking prevents arrays like this ar = [];ar[1]=1;ar[0] = undefined; 0 in ar =false;a[0]===undefined;
                                                                                                                                                                                            If (i in arr && arr[i] === elem) {
                    return i;
            }
}
}
Return -1;
}

2. Common knowledge points about prototype chain in JavaScript

 1.hasOwnProperty() method

Use the hasOwnProperty() method to detect whether a property exists in an instance or in a prototype. This method inherits from Object and will only return true if the given property exists in the object instance.

Copy code The code is as follows:
Function Person(){
This.age=25;
This.job="web";
}
Person.prototype={
          name:'pingfan',
          sayName:function(){
alert(this.name);
                }
}
var person1=new Person();
//From the constructor, detect attributes and return true
alert(person1.hasOwnProperty("age"));
//From the prototype attribute, return false
alert(person1.hasOwnProperty("name"));
Person1.name='ping';
//From instance attributes, return true
alert(person1.hasOwnProperty("name"));

2. Ensure only one instance through instanceOf

Copy code The code is as follows:
function shiCha(opt){
//Instance only once
If( !(this instanceof shiCha)){
          return new shiCha(opt);
                                                                         }
var shicha = shiCha();

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

We usually see Array.prototype.slice.call(arguments,1) or Array.prototype.slice.call(arguments), and are a little confused. In fact, we just use slice() in Array.prototype to convert arguments Turn it into an array, and it is more convenient to work with this array. The second parameter is the index value, starting from the index value, and turning it into an array, for example Array.prototype.call("22223",2) and Array.prototype.call([ 1,2,3,4],2), starting from the second string.

Copy code The code is as follows:

function sliArray(array){
//The output is from index 1 to index 3
                 return Array.prototype.slice.call(array,1,3);
}
alert(sliArray([1,2,3,4,5,6])) //The result is 2,3

 4. Use empty object F to achieve object inheritance, which is the most efficient

Copy code The code is as follows:

//Use empty objects as media for the best inheritance effect
function inhert(C,P){
         var F=function(){};
          F.protototype = P.prototype;
C.prototype = new F();
C.prototype.constructor = C;
}

3. Set of commonly used methods in javascript
1. Common array operation methods

Array deduplication:

Copy code The code is as follows:

//Array deduplication prototype
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];                                                                                                                                                       }
return newArr.reverse();
}



Get the maximum value in the array:

Copy code The code is as follows: Array.prototype.arrMax=function(){
            var arr=this, len=this.length,max=arr[0];
for(var i=1;i If(max                                                                                                                                                                                                                                                    }                 }
        return max;
}
//Get the maximum value in the array through sort
​Array.prototype.arrMax=function(){
  var arr=this;
arr.sort(function(a,b){
   return a-b;
  })
Return arr[arr.length-1];
}
//Use Math.max to get the maximum value of the array
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());

Get the minimum value in the array:

Copy code The code is as follows:

//The smallest value in the array
Array.prototype.arrMin=function(){
            var arr=this, len=this.length,min=arr[0];
for(var i=1;i If(min>arr[i]){
Min=arr[i];
                                                                                                       }                 }
        return min;
}
//Get the smallest value in the array through sort
Array.prototype.arrSortMin=function(){
  var arr=this;
arr.sort(function(a,b){
   return a-b;
  })
Return arr[0];
}
//Use Math.max to get the maximum value of the array
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());

Copy array:

Copy code The code is as follows:
Array.prototype.copy =
function() {
Return [].concat(this);
};

To remove only specified elements from the array, you can only remove one. If you want to remove more than one, use unique processing first:

Copy code The code is as follows:
Array.prototype.remove = function(value){
for(var i=0,len=this.length;i {
If(this[i]==value){
This.splice(i, 1);
             break;
}
}
 
Return this;
}

2. Method set for operating document.loaction (relevant methods summarized by garden friends are borrowed here)

Copy code The code is as follows:

pFan.url = { //#URL
//Parameters: variable name, if url is empty, the table will be taken from the url of the current page
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) { //# Get hash value
        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) { //# Parse 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. Commonly used regular expressions

Copy code The code is as follows:

pFan.regExp = { //# String matching
//Is it a number? Integer, floating point number
isNum: function (num) { //# Is it an array
         return !isNaN(num);
}
, isEmail: function (mail) {//# Is it an email address
return /^([a-z0-9] [_-.]?)*[a-z0-9] @([a-z0-9] [_-.]?)*[a-z0-9] .[a-z]{2,5}$/i.test(mail);
}
, isIdCard: function (card) { //# Is it an ID card
          return /^(d{14}|d{17})(d|[xX])$/.test(card);
}
, isMobile: function (mobile) { //# Is it a mobile phone
          return /^0*1d{10}$/.test(mobile);
}
, isQQ: function (qq) { //# Is it QQ
           return /^[1-9]d{4,10}$/.test(qq);
}
, isTel: function (tel) { //# Is it a phone number
           return /^d{3,4}-d{7,8}(-d{1,6})?$/.text(tel);
}
, isUrl: function (url) { //# Is it URL
          return /https?://[a-z0-9.-]{1,255}.[0-9a-z-]{1,255}/i.test(url);
}
, isColor: function (color) { //# Is it a hexadecimal color
          return /#([da-f]{3}){1,2}$/i.test(color);
}
//@id: ID card,
// @now: current time such as: new Date('2013/12/12'), '2013/12/12'
// @age: Allowed age
, isAdult: function (id, allowAge, now) { //# Whether the age is adult
        var age = 0 // User year, month and day
, , nowDate = 0 //Current year, month and day
;
​​​​​ allowAge = parseFloat(allowAge) || 18;
now = typeof now == 'string' ? new Date(now) : (now || new Date());

if (!this.isIdCard(id)) {
              return false;
}
//15-digit ID card
If (15 == id.length) {
Age = '19' id.slice(6, 6);
         } else {
Age = id.slice(6, 14);
}
//Type conversion Integer
Age = ~~age;
nowDate = ~~(Tydic.date.format('YYYYMMDD', now));
​​​​ //Compare ages
If (nowDate - age < allowAge * 1e4) {
              return false;
}
        return true;
}
//Floating point number
, isFloat: function (num) { //# Is it a floating point number
           return /^(([1-9]d*)|(d .d )|0)$/.test(num);
}
//Positive integer
, isInt: function (num) { //# Is it a positive integer
          return /^[1-9]d*$/.test(num);
}
//Whether they are all Chinese characters
, isChinese: function (str) { //# Is all Chinese characters
          return /^([u4E00-u9FA5]|[uFE30-uFFA0]) $/gi.test(str);
}
};

 4. Method set for operating className

Copy code The code is as follows:

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. String manipulation methods

Copy code The code is as follows:

pFan.string = { //# string
codeHtml: function (content) { //# Escape HTML characters
          return this.replace(content, {
             '&': "&"
        , '"': """
        , "'": '''
, , '<': "<"
, , '>': ">"
        , ' ': " "
        , 't': " "
        , '(': "("
, , ')': ")"
, , '*': "*"
        , ' ': "+"
        , ',': ","
, , '-': "-"
, , '.': "."
, , '/': "/"
        , '?': "?"
, , '\': "\"
, , 'n': "
"
        });
}
//Repeat string
, repeat: function (word, length, end) { //# Repeat string
          end = end || ''; //Add to the end
         length = ~~length;
            return new Array(length * 1 1).join(word) '' end;
}
//Add prefix
, addPre: function (pre, word, size) { //# Complete. For example, add 0
before a number Pre = pre || '0';
size = parseInt(size) || 0;
           word = String(word || '');
      var length = Math.max(0, size - word.length);
          return this.repeat(pre, length, word);
}
//Remove spaces on both sides
, trim: function (text) { //# Remove spaces on both sides
           return (text || '').replace(/^s |s$/, '');
}
//Remove left space
,ltrim:function(){
           return s.replace( /^(s*|*)/, "");
}
//Remove the space on the right
,rtrim:function(){
           return s.replace( /(s*|*)$/, "");
}
//Return to script content
,evalscript:function(s) {
If(s.indexOf('           var p = /]*?>([^x00]*?)/ig;
var arr = [];
​​​​while(arr = p.exec(s)) {
var p1 = /]*?src="([^>]*?)"[^>]*?(reload="1")?(?:charset="([ w-] ?)")?>/i;
            var arr1 = [];
             arr1 = p1.exec(arr[0]);
                if(arr1) {
                   appendscript(arr1[1], '', arr1[2], arr1[3]);
              } else {
p1 = /([^x00] ?)/i;
                 arr1 = p1.exec(arr[0]);
                 appendscript('', arr1[2], arr1[1].indexOf('reload=') != -1);
            }
}
        return s;
}
//Clear script content
,stripscript:function(){
           return s.replace(/.*?/ig, '');
}
//String replacement
, replace: function (str, re) { //# String replacement
          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 escape
//Empty filter
If (!str) {
               return str === 0 ? "0" : "";
}
switch (type) {
               case "html": //Filter XSS in html string
Return str.replace(/[&'"<>/\-x00-x09x0b-x0cx1fx80-xff]/g, function (r) {
                         return "" r.charCodeAt(0) ";"
}).replace(/ /g, " ").replace(/rn/g, "
").replace(/n/g, "
").replace(/ r/g, "
");
                 break;
​​​​​​​ case "htmlEp": //Filter XSS in DOM node attributes
                      return str.replace(/[&'"<>/\-x00-x1fx80-xff]/g, function (r) {
                         return "" r.charCodeAt(0) ";"
                });
                 break;
              case "url": //Filter url
Return escape(str).replace(/ /g, "+");
                 break;
            case "miniUrl":
                     return str.replace(/%/g, "%");
                 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-x09x0b-x0cx1fx80-xff]/g, function (r) {
                        return "" r.charCodeAt(0) ";"
}).replace(/ /g, " ").replace(/rn/g, "
").replace(/n/g, "
").replace(/ r/g, "
");
                 break;
}
}
// badword, filter sensitive words
//@text: the text to be filtered, type: string
//@words: Sensitive words, type, array, such as: ['your sister', 'I lost', 'holy shit']
// If you use regular matching, the length of text is 1 million, the length of words is 1 million, and it takes 4 seconds!
, badWord: function (text, words) { //# Sensitive word filtering
         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. Encryption method set

Copy code The code is as follows:

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 = for
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn