您的位置:首页 > Web前端 > JavaScript

常用JavaScript代码

2015-06-08 17:29 609 查看
一、取URL中的参数

    function getParameterByName(name) {

        var match = RegExp('[?&]' + name + '=([^&]*)')

                        .exec(window.location.search);

        return match && decodeURIComponent(match[1].replace(/\+/g, ' '));

    }

复制代码

二、正则分组

    var testStr="<div><img src='/a.jpg' alt='' /><span>test</span><img src='/b.jpg' alt='' /><span>TTest</span><img src='/c.png' alt='' /></div>";

    var reg=/<img\ssrc='(.*?)'\s+alt=''\s*\/>/g;

    var match=reg.exec(testStr),results=[];

    while(match != null){

        results.push(match[1]);

        match=reg.exec(testStr);

    }

    console.log(results);

    /*

    Array ["/a.jpg", "/b.jpg", "/c.png"]

    */

复制代码

三、为什么parseInt(1/0,19)的结果为18

  1/0的结果是Infinity,所以parseInt(1/0,19)等同于parseInt("Infinity",19),而在19进制中:

19进制       10进制
--------------------
   0            0
   1            1
   2            2
   3            3
   4            4
   5            5
   6            6
   7            7
   8            8
   9            9
   a            10
   b            11
   c            12
   d            13
   e            14
   f             15
   g            16
   h            17
   i             18
  i表示18,所以parseInt(1/0,19)的结果为18。

四、jQuery中获取设置checkbox选中状态

  由于在jQuery1.6以后.attr("checked")的返回结果是 checked,所以一般用下面两种方法获取选中状态:

    $("#checkboxID").is(":checked");

    //jQuery 1.6 +

    $("#checkboxID").prop("checked");

      选中checkbox:

    //jQuery 1.6+

    $("#checkboxID").prop("checked", true);

    $("#checkboxID").prop("checked", false);

    //jQuery 1.5 and below

    $('#checkboxID').attr('checked','checked')

    $('#checkboxID').removeAttr('checked')

复制代码

五、jQuery中判断一个元素是否存在

    if ($(selector).length)

复制代码

六、用JavaScript对URL进行编码

    var myUrl = "http://example.com/index.html?param=1&anotherParam=2";

    var myOtherUrl = "http://example.com/index.html?url=" + encodeURIComponent(myUrl);

复制代码

七、jQuery中event.preventDefault() 与 return false 的区别

    //Demo1 event.preventDefault()

    $('a').click(function (e) {

        // custom handling here

        e.preventDefault();

    });

    //Demo2 return false

    $('a').click(function () {

        // custom handling here

        return false;

    };

      jQuery中return false相当于同时调用e.preventDefault 和 e.stopPropagation。

复制代码

  要注意的是,在原生js中,return false仅仅相当于调用了e.preventDefault。

八、JavaScript检查一个字符串是否为空最简单的方法

   if (strValue) {

        //do something

    }

复制代码

九、用JavaScript添加和删除class

    //Add Class

    document.getElementById("MyElement").className += " MyClass";

    //Remove Class

    document.getElementById("MyElement").className = document.getElementById("MyElement").className.replace(/(?:^|\s)MyClass(?!\S)/,'');

复制代码

十、在jQuery中取消一个ajax请求

    var xhr = $.ajax({

        type: "POST",

        url: "test.php",

        data: "name=test",

        success: function(msg){

           alert( msg );

        }

    });

    //取消请求

    xhr.abort()

复制代码

  要注意的是,在ajax请求未响应之前可以用xhr.abort()取消,但如果请求已经到达了服务器端,这样做的结果仅仅是让浏览器不再监听这个请求的响应,但服务器端仍然会进行处理。

十一、JavaScript删除数组中的项 delete vs splice

    var myArray=["a","b","c"];

    delete myArray[0];

    for(var i=0,j=myArray.length;i<j;i++){

        console.log(myArray<i>);

        /*

        undefined

        b

        c

        */

    }

    var myArray2=["a","b","c"];

    myArray2.splice(0,1);

    for(var i=0,j=myArray2.length;i<j;i++){

        console.log(myArray2<i>);

        /*

        b

        c

        */

    }</i></i>

复制代码

  上面的代码已经说明区别了,一个是设置为undefined,一个是真正的删除了。

十二、JavaScript中16进制与10进制相互转换

    var sHex=(255).toString(16);//ff

    var iNum=parseInt("ff",16);//255

复制代码

十三、JavaScript多行字符串

  如何在JavaScript中方便地写一个多行字符串呢,有三种方案,你自己选吧:

    //one

    var testHtml="a"+

    "b"+

    "c";

    //two

    var testHtml2="a\

    b\

    c";

    //three

    var testHtml3=["a",

    "b",

    "c"].join("");

复制代码

十四、JavaScript中!!操作符是什么

    console.log(!!10);//true

    console.log(!!0);//false

    console.log(!!"abc");//true

    console.log(!!"");//false

复制代码

  简单地说就是把右侧的值转为bool值

十五、JavaScript实现endsWith

    String.prototype.endsWith = function(suffix) {

        return this.indexOf(suffix, this.length - suffix.length) !== -1;

    };

    //or

    function endsWith(str, suffix) {

        return str.indexOf(suffix, str.length - suffix.length) !== -1;

    }

复制代码

十六、JavaScript中克隆对象

    function clone(obj) {

        // Handle the 3 simple types, and null or undefined

        if (null == obj || "object" != typeof obj) return obj;

        // Handle Date

        if (obj instanceof Date) {

            var copy = new Date();

            copy.setTime(obj.getTime());

            return copy;

        }

        // Handle Array

        if (obj instanceof Array) {

            var copy = [];

            for (var i = 0, var len = obj.length; i < len; ++i) {

                copy<i> = clone(obj<i>);

            }

            return copy;

        }

        // Handle Object

        if (obj instanceof Object) {

            var copy = {};

            for (var attr in obj) {

                if (obj.hasOwnProperty(attr)) copy[attr] = clone(obj[attr]);

            }

            return copy;

        }

        throw new Error("Unable to copy obj! Its type isn't supported.");

    }

</i></i>

复制代码

十七、JavaScript字符与ASCII码间的转换

    console.log("\n".charCodeAt(0));//10

    console.log(String.fromCharCode(65));//A

复制代码

十八、JavaScript中浮点数的相等判断不能用 ==

    console.log(0.1+0.2 == 0.3);//false

    console.log(Math.abs(0.1+0.2 - 0.3) < 0.000001);//true

复制代码

  如上所示,浮点数相等判断要用差的绝对值小于某一个数来判断。至于原因可以参考这里:http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

十九、JavaScript中base64编码

    var Base64 = {

    // private property

    _keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",

    // public method for encoding

    encode : function (input) {

        var output = "";

        var chr1, chr2, chr3, enc1, enc2, enc3, enc4;

        var i = 0;

        input = Base64._utf8_encode(input);

        while (i < input.length) {

            chr1 = input.charCodeAt(i++);

            chr2 = input.charCodeAt(i++);

            chr3 = input.charCodeAt(i++);

            enc1 = chr1 >> 2;

            enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);

            enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);

            enc4 = chr3 & 63;

            if (isNaN(chr2)) {

                enc3 = enc4 = 64;

            } else if (isNaN(chr3)) {

                enc4 = 64;

            }

            output = output +

            this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +

            this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);

        }

        return output;

    },

    // public method for decoding

    decode : function (input) {

        var output = "";

        var chr1, chr2, chr3;

        var enc1, enc2, enc3, enc4;

        var i = 0;

        input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");

        while (i < input.length) {

            enc1 = this._keyStr.indexOf(input.charAt(i++));

            enc2 = this._keyStr.indexOf(input.charAt(i++));

            enc3 = this._keyStr.indexOf(input.charAt(i++));

            enc4 = this._keyStr.indexOf(input.charAt(i++));

            chr1 = (enc1 << 2) | (enc2 >> 4);

            chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);

            chr3 = ((enc3 & 3) << 6) | enc4;

            output = output + String.fromCharCode(chr1);

            if (enc3 != 64) {

                output = output + String.fromCharCode(chr2);

            }

            if (enc4 != 64) {

                output = output + String.fromCharCode(chr3);

            }

        }

        output = Base64._utf8_decode(output);

        return output;

    },

    // private method for UTF-8 encoding

    _utf8_encode : function (string) {

        string = string.replace(/\r\n/g,"\n");

        var utftext = "";

        for (var n = 0; n < string.length; n++) {

            var c = string.charCodeAt(n);

            if (c < 128) {

                utftext += String.fromCharCode(c);

            }

            else if((c > 127) && (c < 2048)) {

                utftext += String.fromCharCode((c >> 6) | 192);

                utftext += String.fromCharCode((c & 63) | 128);

            }

            else {

                utftext += String.fromCharCode((c >> 12) | 224);

                utftext += String.fromCharCode(((c >> 6) & 63) | 128);

                utftext += String.fromCharCode((c & 63) | 128);

            }

        }

        return utftext;

    },

    // private method for UTF-8 decoding

    _utf8_decode : function (utftext) {

        var string = "";

        var i = 0;

        var c = c1 = c2 = 0;

        while ( i < utftext.length ) {

            c = utftext.charCodeAt(i);

            if (c < 128) {

                string += String.fromCharCode(c);

                i++;

            }

            else if((c > 191) && (c < 224)) {

                c2 = utftext.charCodeAt(i+1);

                string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));

                i += 2;

            }

            else {

                c2 = utftext.charCodeAt(i+1);

                c3 = utftext.charCodeAt(i+2);

                string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));

                i += 3;

            }

        }

        return string;

    }

    }

    //encode

    Base64.encode("Test"); //VGVzdA==

    //decode

    Base64.decode("VGVzdA=="); // Test

复制代码

二十、jQuery中each跟map的区别

  each跟map都可以用来遍历Array或Object,区别是each不改变原来的Array或Object,map是操作给定的Array或Object返回一个新Array或Object。Demo:

    var items = [1,2,3,4];

    $.each(items, function() {

      alert('this is ' + this);//alert 1,2,3,4

    });

    var newItems = $.map(items, function(i) {

      return i + 1;

    });

    // newItems is [2,3,4,5]

复制代码

  map会占用更多的内存,所以如果只是遍历建议用each。

二十一、判断一个对象是否为数组

    function isArray(obj){

        return Object.prototype.toString.call(obj) == "[object Array]";

    }

复制代码

  不能用instanceof 和 constructor来判断,原因参考:http://perfectionkills.com/instanceof-considered-harmful-or-how-to-write-a-robust-isarray/

二十二、通过原型继承创建一个新对象

    function inherit(p){

        if(!p){

            throw TypeError("p is not an object or null");

        }

        if(Object.create){

            return Object.create(p);

        }

        var t=typeof p;

        if(t !== "object" && t !== "function"){

            throw TypeError("p is not an object or null");

        }

        function f(){};

        f.prototype=p;

        return new f();

    }

复制代码
非原创

原文见:http://www.w3cfuns.com/blog-5455438-5406240.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  javascript