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

  ——《JavaScript 王者归来》

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

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

  ——《精通 JavaScript · 第二章》

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

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

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

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

 function getCookie(name){

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

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

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

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

 (~~(Math.random()*(1<<24))).toString(16)
// ~~ 通过位运算来取整。
// << 左移位。将1的二进制数左移24位。而1<<24 == 2^24(RGB模式下最多可表示的色彩数量)
// 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属性

  · 支持索引来读取内容。

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

9.尝试执行异常的代码

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

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

 // 判断滚动到指定元素的位置

 function getPos(obj){
var t = 0;
while(obj){
t += obj.offsetTop;
obj = obj.offsetParent;
}
return t;
} window.onscroll = function(){
var position = document.documentElement.clientHeight,
visible = document.documentElement.clientHeight + (document.documentElement.scrollTop || document.body.scrollTop); // 滚动到指定位置
if(position > getPos(obj)){}
// 滚动时指定内容显示出来
if(visible > getPos(obj)){} }

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

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

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

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

13. HTML字符编码

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

14. 创建样式表

 function createStyleSheet(url){
try{
document.createStyleSheet(url);
}catch(e){ var _link = document.createElement('link'),
_head = document.getElementsByTagName('head')[0];
_link.rel="stylesheet";
_link.href=url;
_head.appendChild(_link);
}
}

15. 防止脚本注入

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

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

 // 时间戳的方式
var mark = 0;
$(document).mousewheel(function(e){
var timer = new Date().getTime();
if(timer - mark > 1e3){
alert('ok');
mark = timer;
}
}); //定时器的方式
var flag = true;
$(document).mousewheel(function(e){
if(flag){
alert('ok');
flag = false;
setTimeout(function(){
flag = true;
},1000);
}
});

17. 时间格式化

 function dateFormat(t){        // t 是以秒为单位的值。

     var h = ~~(t/3600),        // t除以3600,取整,得到的就是小时。
m = ~~(t%3600/60), // t求余3600,取模,得到的就是去除小时剩下的秒数(分钟 + 秒),再除以60,取整,得到的就是分钟。
s = ~~(t%3600%60); // t求余3600,再求余60,剩下的自然就是“秒数”。 return h+'小时'+m+'分'+s+'秒';
}

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

 var oDiv = document.getElementsByTagName('div');

 // 获取DOM对象的索引方式一

 for (var i = , l = oDiv.length; i < l; i++) {

     oDiv[i].index = i; // 在DOM对象上附加属性的方式。
oDiv[i].onclick = function() {
alert(this.index);
}
} // 获取DOM对象的索引方式二 for (var i = , l = oDiv.length; i < l; i++) { (function(n) { // 每一次执行外层函数(自执行函数)都会创建一个独立的闭包,每个独立闭包的i值是不同的。
oDiv[n].onclick = function() {
alert(n);
}
}(i)); }

19. replace用法新发现

//之前我们普通的用法
'String'.replace(/[a-z]/,function(a,b,c){//...}) //现在,我们可以采用更简洁的方法
'images/logo.png'.replace(/(.*)(\.\w+)/,'$1@2x$2')

精彩 JavaScript 代码片段的更多相关文章

  1. 精心收集的 48 个 JavaScript 代码片段,仅需 30 秒就可理解!

    原文:https://github.com/Chalarangelo/30-seconds-of-code#anagrams-of-string-with-duplicates 作者:Chalaran ...

  2. 精心收集的 48 个 JavaScript 代码片段,仅需 30 秒就可理解

    原文:Chalarangelo  译文:IT168 https://github.com/Chalarangelo/30-seconds-of-code#anagrams-of-string-with ...

  3. 精心收集的48个JavaScript代码片段,仅需30秒就可理解

    源文链接 :https://github.com/Chalarangelo/30-seconds-of-code#anagrams-of-string-with-duplicates 该项目来自于 G ...

  4. 超实用的 JavaScript 代码片段( ES6+ 编写)

    Array 数组 Array concatenation (数组拼接) 使用 Array.concat() ,通过在 args 中附加任何数组 和/或 值来拼接一个数组. const ArrayCon ...

  5. 一些非常有用的html,css,javascript代码片段(持久更新)

    1.判断设备是否联网 if (navigator.onLine) { //some code }else{ //others code } 2.获取url的指定参数 function getStrin ...

  6. JavaScript 代码片段

    1.无题 if (i && i.charAt(i.length - 1) == "/") { i = i.substr(0, i.length - 1) } 2.无 ...

  7. 常用javascript代码片段集锦

    常用方法的封装 根据类名获取DOM元素 var $$ = function (className, element) { if (document.getElementsByClassName) { ...

  8. javascript代码片段

    DOMReady函数,只要DOM结构加载完成即可,不必等待所有资源加载完成,节约时间,"DOMContentLoaded"在H5中被标准化 var DOMReady=functio ...

  9. 实用Javascript代码片段

    清除select下拉选项,添加并选择特点选项 $('#mySelect') .find('option') .remove() .end() .append('<option value=&qu ...

随机推荐

  1. OpenCASCADE BRep Projection

    OpenCASCADE BRep Projection eryar@163.com 一网友发邮件问我下图所示的效果如何在OpenCASCADE中实现,我的想法是先构造出螺旋线,再将螺旋线投影到面上. ...

  2. 客户端的验证插件validator

    简单,智能,令人愉悦的表单验证~~~ 官方文档:http://www.niceue.com/validator/ <!DOCTYPE html> <html> <head ...

  3. C#异步编程(二)

    async和await结构 序 前篇博客异步编程系列(一) 已经介绍了何谓异步编程,这篇主要介绍怎么实现异步编程,主要通过C#5.0引入的async/await来实现. BeginInvoke和End ...

  4. 在Windows上编译和调试CoreCLR

    生成CoreCLR - Windows篇 本文的唯一目的就是让你运行Hello World 运行环境 Window 7+ Visual studio 2015 确保C++ 工具已经被安装,默认是不安装 ...

  5. ubuntu 下安装scrapy

    1.把Scrapy签名的GPG密钥添加到APT的钥匙环中: sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 6272 ...

  6. 极光推送和友盟推送,ios端和安卓端的后端调试设置

    我是最后端的,这两天搞了一个app项目,前端安卓使用友盟很方便,调试比较顺利,然后ios就遇到各种问题了,证书.发送成功推送不成功,测试时用的TestMode(),ios上架之后就必须用product ...

  7. iOS从零开始学习直播之2.采集

      直播的采集由采集的设备(摄像头.话筒)不同分为视频采集和音频采集,本篇文章会分别介绍. 1.采集步骤   1.创建捕捉会话(AVCaptureSession),iOS调用相机和话筒之前都需要创建捕 ...

  8. ionic第一坑——ion-slide-box坑(ion-slide分两页的坑)

    ionic.views.Slider = ionic.views.View.inherit({ initialize: function (options) { . . . function setu ...

  9. 命名sql数据集

    所谓的命名sql其实也就是数据库里的sql语句,普元EOS里做了一定的封装,以方便在程序中的使用. 命名SQL的基本元素包括: 1. <parameterMap> parameterMap ...

  10. git &github 快速入门

    本节内容 github介绍 安装 仓库创建& 提交代码 代码回滚 工作区和暂存区 撤销修改 删除操作 远程仓库 分支管理 多人协作 github使用 忽略特殊文件.gitignore 1.gi ...