zoukankan      html  css  js  c++  java
  • 精彩 JavaScript 代码片段

    1. 根据给定的条件在原有的数组上,得到所需要的新数组。

         ——《JavaScript 王者归来》

     1     var a = [-1,-1,1,2,-2,-2,-3,-3,3,-3];
     2     function f(s,e)
     3     {
     4         var ret = [];
     5         for(var i in s){  // 根据原有的数组长度进行循环
     6             ret.push(e(s[i])); 
     7         }
     8         return ret;
     9     }
    10 
    11     f(a,function(n){return n>0?n:0}); // 传输一个匿名函数作为逻辑判断

    2. 比原生type 或 typeof 更详细的类型监测方法

         ——《精通 JavaScript · 第二章》

    1     function type(p){
    2         /function.(w*)()/.test(p.constructor); //通过其构造函数来获取对应的类型。
    3         return RegExp.$1;
    4     }

    3. 对象或数组的深拷贝,用于解决对象引用时值一改全改的问题。

    1 var copyObject = function(obj){
    2      var result = {};
    3         for(var x in obj){
    4           result[x] = typeof obj==="object" ? copyObject(obj[x]) : obj[x]
    5           //如果拷贝的值仍然是一个对象,那么重复执行当前方法。
    6         }
    7   return result;
    8 }

    4. 通过正则表达式来获取Cookie的值

    1 function getCookie(name){
    2     
    3     if(name && RegExp("(^| )" + name + "=([^;]*)(;|$)").exec(document.cookie)) return RegExp.$2;
    4         // (^| ) 不匹配第一个空格。
    5         // ([^;]*) 只匹配除了;号之外的所有字符。
    6         // (;|$) 匹配以;号或$为结尾的字符。
    7 }

    5. 通过移位运算来替代"parseInt"

    1 ~~3.14 => 3;
    // ~~ 取整。~取当前数值的反码,~~表示再次取反,也就是得到当前自身(说明,JS中的“位”运算会将数值自动转换为整数)

    6. 将数值转换为16进制的字符串(常用于表示色彩)

    1 (~~(Math.random()*(1<<24))).toString(16)
    2   // ~~ 通过位运算来取整。
    3   // << 左移位。将1的二进制数左移24位。而1<<24 == 2^24(RGB模式下最多可表示的色彩数量)
    4   // toString(16) 将数值转换为16进制的字符串输出。

    7. 对象方法的兼容性检查

    if('querySelector' in document){}

    8. NodeList || HTMLCollection || Object 转换为Array或具有Array的方法。

        NodeList: 是指通过集合方法获得到的DOM节点列表,例如:document.getElementsByTagNmae,document.forms... 等方法。

        HTMLCollection: HTML块,它与NodeList很像,但是NodeList只支持数字索引,而HTMLCollection可以支持名称作为索引。

       NodeList 与 HTMLCollection 都具有以下类似:

      · 具有数组的外观,但没有数组的方法

      · 具有.length属性

      · 支持索引来读取内容。

     1 function makeArray(obj){
     2     var rs=[],len=obj.length;
     3     try{
     4         rs = [].slice.call(obj,0); 
     5          /* 
     6              注意:这里的arguments是具有.length属性的对象
     7              slice:数组的截取方法,这中写法也涉及到slice内部实现的原理
     8          */
     9     }catch(e){//for IE
    10         for(var i=0;j=obj[i++];){
    11             rs.push(j);
    12         }                    
    13     }
    14     return rs;    
    15 }

    9.尝试执行异常的代码

     1     try{
     2             // 尝试运行
     3 
     4     }catch(msg){
     5 
     6         throw "Error name:" + msg.name; // throw会在控制台抛出异常信息,注意:throw会阻塞程序执行。建议使用console.log
     7         throw "Error message:" + msg.message  
     8 
     9         /*  Error.Name 的常见错误信息:
    10 
    11             1. EvalError:eval_r()的使用与定义不一致 
    12             2. RangeError:数值越界 
    13             3. ReferenceError:非法或不能识别的引用数值 
    14             4. SyntaxError:发生语法解析错误 
    15             5. TypeError:操作数类型错误 
    16             6. URIError:URI处理函数使用不当
    17 
    18         */
    19 
    20     }finally{
    21         // finally 最终不论是运行成功还是没有运行成功都会执行。
    22     }

    10.滚动条滚动时分别判断位置与内容的可见

     1 // 判断滚动到指定元素的位置
     2 
     3 function getPos(obj){
     4   var t = 0;
     5   while(obj){
     6     t += obj.offsetTop;
     7     obj = obj.offsetParent;   
     8   } 
     9    return t;       
    10 }
    11 
    12 window.onscroll = function(){
    13  var position = document.documentElement.clientHeight,
    14      visible =  document.documentElement.clientHeight + (document.documentElement.scrollTop || document.body.scrollTop);  
    15    
    16    // 滚动到指定位置 
    17    if(position > getPos(obj)){}
    18    // 滚动时指定内容显示出来
    19    if(visible > getPos(obj)){}
    20  
    21 }

    11. 在事件的注册处理程序中注销事件

    1 function handle(){
    2     alert(‘I,m here!');
    3     this.removeEventListener('click',handle,false);
    4 }
    5 obj.addEventListener('click',handle,false);

    12. 正则匹配清除两侧空格

    1 var trim = function(v){
    2     var patrn = /^s*(.*?)s+$/;
    3     return (patrn.test(v))? RegExp.$1 : 'null';
    4 }

    13. HTML字符编码

    1 var htmlEncode = function(str){
    2     var patrn = {};
    3         patrn['amp'] = /&/g;
    4         patrn['left'] = /</g;
    5         patrn['right'] = />/g;
    6         patrn['quot'] = /"/g;
    7         patrn['nbsp'] = /[u0020*|u3000*]/g; // u0020 匹配半角空格 u3000 匹配全角空格
    8     return str.replace(patrn['amp'],'&amp;').replace(patrn['left'],'&lt;').replace(patrn['right'],'&gt;').replace(patrn['quot'],'&quot;').replace(patrn['nbsp'],'&nbsp;');
    9 };

    14. 创建样式表

     1 function createStyleSheet(url){
     2     try{
     3         document.createStyleSheet(url);
     4         5     }catch(e){
     6         
     7         var _link = document.createElement('link'),
     8             _head = document.getElementsByTagName('head')[0];
     9             _link.rel="stylesheet";
    10             _link.href=url;
    11         _head.appendChild(_link);
    12       13     }
    14 }

    15. 防止脚本注入

    1 function stripscript(s) {
    2     return s.replace(/<script.*?>.*?</script>/ig, '');
    3 }

    16. 阻止mouseWhell事件连续触发的两种方式

     1 // 时间戳的方式
     2 var mark = 0;
     3 $(document).mousewheel(function(e){
     4     var timer = new Date().getTime();
     5     if(timer - mark > 1e3){
     6         alert('ok');
     7         mark = timer;
     8     }
     9 });
    10 
    11 //定时器的方式
    12 var flag = true;
    13 $(document).mousewheel(function(e){
    14     if(flag){
    15         alert('ok');
    16         flag = false;
    17         setTimeout(function(){
    18             flag = true;
    19         },1000);
    20     }
    21 });

    17. 时间格式化

    1 function dateFormat(t){        // t 是以秒为单位的值。
    2 
    3     var h = ~~(t/3600),        // t除以3600,取整,得到的就是小时。
    4         m = ~~(t%3600/60),    // t求余3600,取模,得到的就是去除小时剩下的秒数(分钟 + 秒),再除以60,取整,得到的就是分钟。
    5         s = ~~(t%3600%60);    // t求余3600,再求余60,剩下的自然就是“秒数”。
    6 
    7      return h+'小时'+m+'分'+s+'秒';
    8 }

    18. 获取DOM索引的两种方式

     1 var oDiv = document.getElementsByTagName('div');
     2 
     3 // 获取DOM对象的索引方式一
     4 
     5 for (var i = 0, l = oDiv.length; i < l; i++) {
     6 
     7     oDiv[i].index = i; // 在DOM对象上附加属性的方式。
     8     oDiv[i].onclick = function() {
     9         alert(this.index);
    10     }
    11 }
    12 
    13 
    14 // 获取DOM对象的索引方式二
    15 
    16 for (var i = 0, l = oDiv.length; i < l; i++) {
    17 
    18     (function(n) { // 每一次执行外层函数(自执行函数)都会创建一个独立的闭包,每个独立闭包的i值是不同的。
    19         oDiv[n].onclick = function() {
    20             alert(n);
    21         }
    22     }(i));
    23 
    24 }

    19. replace用法新发现

    //之前我们普通的用法
    'String'.replace(/[a-z]/,function(a,b,c){//...})
    
    //现在,我们可以采用更简洁的方法
    'images/logo.png'.replace(/(.*)(.w+)/,'$1@2x$2')
  • 相关阅读:
    deepin-wine-tim 字体发虚
    windows&linux双系统时间相差8小时
    Linux 禁用 ipv6
    双系统win10更新后无法进入linux
    Failed to receive SOCKS4 connect request ack 解决
    zsh 使用通配符功能
    vux修改css样式的2种办法
    Ubuntu 16.04 安装OpenSSH7.4
    Nginx开启http2访问和gzip网页压缩功能
    vue开发环境和生产环境里面解决跨域的几种方法
  • 原文地址:https://www.cnblogs.com/HCJJ/p/5084664.html
Copyright © 2011-2022 走看看