精彩 JavaScript 代码片段
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'],'&').replace(patrn['left'],'<').replace(patrn['right'],'>').replace(patrn['quot'],'"').replace(patrn['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 代码片段的更多相关文章
- 精心收集的 48 个 JavaScript 代码片段,仅需 30 秒就可理解!
原文:https://github.com/Chalarangelo/30-seconds-of-code#anagrams-of-string-with-duplicates 作者:Chalaran ...
- 精心收集的 48 个 JavaScript 代码片段,仅需 30 秒就可理解
原文:Chalarangelo 译文:IT168 https://github.com/Chalarangelo/30-seconds-of-code#anagrams-of-string-with ...
- 精心收集的48个JavaScript代码片段,仅需30秒就可理解
源文链接 :https://github.com/Chalarangelo/30-seconds-of-code#anagrams-of-string-with-duplicates 该项目来自于 G ...
- 超实用的 JavaScript 代码片段( ES6+ 编写)
Array 数组 Array concatenation (数组拼接) 使用 Array.concat() ,通过在 args 中附加任何数组 和/或 值来拼接一个数组. const ArrayCon ...
- 一些非常有用的html,css,javascript代码片段(持久更新)
1.判断设备是否联网 if (navigator.onLine) { //some code }else{ //others code } 2.获取url的指定参数 function getStrin ...
- JavaScript 代码片段
1.无题 if (i && i.charAt(i.length - 1) == "/") { i = i.substr(0, i.length - 1) } 2.无 ...
- 常用javascript代码片段集锦
常用方法的封装 根据类名获取DOM元素 var $$ = function (className, element) { if (document.getElementsByClassName) { ...
- javascript代码片段
DOMReady函数,只要DOM结构加载完成即可,不必等待所有资源加载完成,节约时间,"DOMContentLoaded"在H5中被标准化 var DOMReady=functio ...
- 实用Javascript代码片段
清除select下拉选项,添加并选择特点选项 $('#mySelect') .find('option') .remove() .end() .append('<option value=&qu ...
随机推荐
- Spring之旅(2)
Spring简化Java的下一个理念:基于切面的声明式编程 3.应用切面 依赖注入的目的是让相互协作的组件保持松散耦合:而AOP编程允许你把遍布应用各处的功能分离出来形成可重用的组件. AOP面向切面 ...
- [.NET] 利用 async & await 进行异步 IO 操作
利用 async & await 进行异步 IO 操作 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/6082673.html 序 上次,博主 ...
- .Net Core上用于代替System.Drawing的类库
目前.Net Core上没有System.Drawing这个类库,想要在.Net Core上处理图片得另辟蹊径. 微软给出了将来取代System.Drawing的方案,偏向于使用一个单独的服务端进行各 ...
- peer not authenticated的终极解决方案
一.前述 使用httpclient发起https请求时,可能会遇到如下异常: javax.net.ssl.SSLPeerUnverifiedException: peer not authentica ...
- 【C#公共帮助类】 ToolsHelper帮助类
这个帮助类,目前我们只用到了两个,我就先更新这两个,后面有用到的,我会继续更新这个Helper帮助类 在Tools.cs中 有很多方法 跟Utils里是重复的,而且Utils里的方法更加新一点,大家可 ...
- H3 BPM:为石化企业提供一个不一样的全停大修平台
H3 BPM大型炼化企业装置全停检修管理平台(简称"全停大修")结合国际化的流程管理理念.成熟的系统技术架构.优秀的行业解决方案,为石油化工行业全停大修提供了卓越的信息化管理方案, ...
- 参数探测(Parameter Sniffing)影响存储过程执行效率解决方案
如果SQL query中有参数,SQL Server 会创建一个参数嗅探进程以提高执行性能.该计划通常是最好的并被保存以重复利用.只是偶尔,不会选择最优的执行计划而影响执行效率. SQL Server ...
- MongoDB学习笔记二—Shell操作
数据类型 MongoDB在保留JSON基本键/值对特性的基础上,添加了其他一些数据类型. null null用于表示空值或者不存在的字段:{“x”:null} 布尔型 布尔类型有两个值true和fal ...
- Linux监控工具介绍系列——vmstat
说来惭愧,玩Linux这么久了,居然没有玩转vmstat这个命令,对很多指标的具体意义都有点模糊不清,花了点时间好好学习.整理一下这个命令的相关资料.因为这个命令确实比较重要,而且频繁用到. 命令 ...
- 写个Fragment方便的抽象基类 BaseFragment
package com.zb.zhihuianyang.base; import android.app.Activity; import android.os.Bundle; import andr ...