常用JavaScript代码

一、取URL中的参数
  1.     function getParameterByName(name) {
  2.         var match = RegExp('[?&]' + name + '=([^&]*)')
  3.                         .exec(window.location.search);
  4.         return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
  5.     }
复制代码

二、正则分组

  1.     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>";
  2.     var reg=/<img\ssrc='(.*?)'\s+alt=''\s*\/>/g;
  3.     var match=reg.exec(testStr),results=[];
  4.     while(match != null){
  5.         results.push(match[1]);
  6.         match=reg.exec(testStr);
  7.     }
  8.     console.log(results);
  9.     /*
  10.     Array ["/a.jpg", "/b.jpg", "/c.png"]
  11.     */
复制代码


三、为什么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,所以一般用下面两种方法获取选中状态:

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

  2.     //jQuery 1.6 +
  3.     $("#checkboxID").prop("checked");
  4.       选中checkbox:

  5.     //jQuery 1.6+
  6.     $("#checkboxID").prop("checked", true);
  7.     $("#checkboxID").prop("checked", false);

  8.     //jQuery 1.5 and below
  9.     $('#checkboxID').attr('checked','checked')
  10.     $('#checkboxID').removeAttr('checked')
复制代码


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

  1.     if ($(selector).length)
复制代码


六、用JavaScript对URL进行编码

  1.     var myUrl = "http://example.com/index.html?param=1&anotherParam=2";
  2.     var myOtherUrl = "http://example.com/index.html?url=" + encodeURIComponent(myUrl);
复制代码


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

  1.     //Demo1 event.preventDefault()
  2.     $('a').click(function (e) {
  3.         // custom handling here

  4.         e.preventDefault();
  5.     });

  6.     //Demo2 return false
  7.     $('a').click(function () {
  8.         // custom handling here

  9.         return false;
  10.     };
  11.       jQuery中return false相当于同时调用e.preventDefault 和 e.stopPropagation。
复制代码


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

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

  1.    if (strValue) {
  2.         //do something
  3.     }
复制代码


九、用JavaScript添加和删除class

  1.     //Add Class
  2.     document.getElementById("MyElement").className += " MyClass";

  3.     //Remove Class
  4.     document.getElementById("MyElement").className = document.getElementById("MyElement").className.replace(/(?:^|\s)MyClass(?!\S)/,'');
复制代码


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

  1.     var xhr = $.ajax({
  2.         type: "POST",
  3.         url: "test.php",
  4.         data: "name=test",
  5.         success: function(msg){
  6.            alert( msg );
  7.         }
  8.     });
  9.     //取消请求
  10.     xhr.abort()
复制代码

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

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

  1.     var myArray=["a","b","c"];
  2.     delete myArray[0];
  3.     for(var i=0,j=myArray.length;i<j;i++){
  4.         console.log(myArray<i>);
  5.         /*
  6.         undefined
  7.         b
  8.         c
  9.         */
  10.     }

  11.     var myArray2=["a","b","c"];
  12.     myArray2.splice(0,1);
  13.     for(var i=0,j=myArray2.length;i<j;i++){
  14.         console.log(myArray2<i>);
  15.         /*
  16.         b
  17.         c
  18.         */
  19.     }</i></i>
复制代码



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

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

  1.     var sHex=(255).toString(16);//ff
  2.     var iNum=parseInt("ff",16);//255
复制代码


十三、JavaScript多行字符串

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

  1.     //one
  2.     var testHtml="a"+
  3.     "b"+
  4.     "c";

  5.     //two
  6.     var testHtml2="a\
  7.     b\
  8.     c";

  9.     //three
  10.     var testHtml3=["a",
  11.     "b",
  12.     "c"].join("");
复制代码


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

  1.     console.log(!!10);//true
  2.     console.log(!!0);//false
  3.     console.log(!!"abc");//true
  4.     console.log(!!"");//false
复制代码


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

十五、JavaScript实现endsWith

  1.     String.prototype.endsWith = function(suffix) {
  2.         return this.indexOf(suffix, this.length - suffix.length) !== -1;
  3.     };

  4.     //or
  5.     function endsWith(str, suffix) {
  6.         return str.indexOf(suffix, str.length - suffix.length) !== -1;
  7.     }
复制代码


十六、JavaScript中克隆对象

  1.     function clone(obj) {
  2.         // Handle the 3 simple types, and null or undefined
  3.         if (null == obj || "object" != typeof obj) return obj;

  4.         // Handle Date
  5.         if (obj instanceof Date) {
  6.             var copy = new Date();
  7.             copy.setTime(obj.getTime());
  8.             return copy;
  9.         }

  10.         // Handle Array
  11.         if (obj instanceof Array) {
  12.             var copy = [];
  13.             for (var i = 0, var len = obj.length; i < len; ++i) {
  14.                 copy<i> = clone(obj<i>);
  15.             }
  16.             return copy;
  17.         }

  18.         // Handle Object
  19.         if (obj instanceof Object) {
  20.             var copy = {};
  21.             for (var attr in obj) {
  22.                 if (obj.hasOwnProperty(attr)) copy[attr] = clone(obj[attr]);
  23.             }
  24.             return copy;
  25.         }

  26.         throw new Error("Unable to copy obj! Its type isn't supported.");
  27.     }
  28. </i></i>
复制代码



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

  1.     console.log("\n".charCodeAt(0));//10
  2.     console.log(String.fromCharCode(65));//A
复制代码


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

  1.     console.log(0.1+0.2 == 0.3);//false
  2.     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编码

  1.     var Base64 = {

  2.     // private property
  3.     _keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",

  4.     // public method for encoding
  5.     encode : function (input) {
  6.         var output = "";
  7.         var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
  8.         var i = 0;

  9.         input = Base64._utf8_encode(input);

  10.         while (i < input.length) {

  11.             chr1 = input.charCodeAt(i++);
  12.             chr2 = input.charCodeAt(i++);
  13.             chr3 = input.charCodeAt(i++);

  14.             enc1 = chr1 >> 2;
  15.             enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
  16.             enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
  17.             enc4 = chr3 & 63;

  18.             if (isNaN(chr2)) {
  19.                 enc3 = enc4 = 64;
  20.             } else if (isNaN(chr3)) {
  21.                 enc4 = 64;
  22.             }

  23.             output = output +
  24.             this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
  25.             this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);

  26.         }

  27.         return output;
  28.     },

  29.     // public method for decoding
  30.     decode : function (input) {
  31.         var output = "";
  32.         var chr1, chr2, chr3;
  33.         var enc1, enc2, enc3, enc4;
  34.         var i = 0;

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

  36.         while (i < input.length) {

  37.             enc1 = this._keyStr.indexOf(input.charAt(i++));
  38.             enc2 = this._keyStr.indexOf(input.charAt(i++));
  39.             enc3 = this._keyStr.indexOf(input.charAt(i++));
  40.             enc4 = this._keyStr.indexOf(input.charAt(i++));

  41.             chr1 = (enc1 << 2) | (enc2 >> 4);
  42.             chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
  43.             chr3 = ((enc3 & 3) << 6) | enc4;

  44.             output = output + String.fromCharCode(chr1);

  45.             if (enc3 != 64) {
  46.                 output = output + String.fromCharCode(chr2);
  47.             }
  48.             if (enc4 != 64) {
  49.                 output = output + String.fromCharCode(chr3);
  50.             }

  51.         }

  52.         output = Base64._utf8_decode(output);

  53.         return output;

  54.     },

  55.     // private method for UTF-8 encoding
  56.     _utf8_encode : function (string) {
  57.         string = string.replace(/\r\n/g,"\n");
  58.         var utftext = "";

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

  60.             var c = string.charCodeAt(n);

  61.             if (c < 128) {
  62.                 utftext += String.fromCharCode(c);
  63.             }
  64.             else if((c > 127) && (c < 2048)) {
  65.                 utftext += String.fromCharCode((c >> 6) | 192);
  66.                 utftext += String.fromCharCode((c & 63) | 128);
  67.             }
  68.             else {
  69.                 utftext += String.fromCharCode((c >> 12) | 224);
  70.                 utftext += String.fromCharCode(((c >> 6) & 63) | 128);
  71.                 utftext += String.fromCharCode((c & 63) | 128);
  72.             }

  73.         }

  74.         return utftext;
  75.     },

  76.     // private method for UTF-8 decoding
  77.     _utf8_decode : function (utftext) {
  78.         var string = "";
  79.         var i = 0;
  80.         var c = c1 = c2 = 0;

  81.         while ( i < utftext.length ) {

  82.             c = utftext.charCodeAt(i);

  83.             if (c < 128) {
  84.                 string += String.fromCharCode(c);
  85.                 i++;
  86.             }
  87.             else if((c > 191) && (c < 224)) {
  88.                 c2 = utftext.charCodeAt(i+1);
  89.                 string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
  90.                 i += 2;
  91.             }
  92.             else {
  93.                 c2 = utftext.charCodeAt(i+1);
  94.                 c3 = utftext.charCodeAt(i+2);
  95.                 string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
  96.                 i += 3;
  97.             }

  98.         }

  99.         return string;
  100.     }
  101.     }

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

  104.     //decode
  105.     Base64.decode("VGVzdA=="); // Test
复制代码


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

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

  2.     $.each(items, function() {
  3.       alert('this is ' + this);//alert 1,2,3,4
  4.     });

  5.     var newItems = $.map(items, function(i) {
  6.       return i + 1;
  7.     });
  8.     // newItems is [2,3,4,5]
复制代码


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

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

  1.     function isArray(obj){
  2.         return Object.prototype.toString.call(obj) == "[object Array]";
  3.     }
复制代码


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

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

  1.     function inherit(p){
  2.         if(!p){
  3.             throw TypeError("p is not an object or null");
  4.         }
  5.         if(Object.create){
  6.             return Object.create(p);
  7.         }
  8.         var t=typeof p;
  9.         if(t !== "object" && t !== "function"){
  10.             throw TypeError("p is not an object or null");
  11.         }
  12.         function f(){};
  13.         f.prototype=p;
  14.         return new f();
  15.     }
复制代码
非原创
原文见: http://www.w3cfuns.com/blog-5455438-5406240.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值