随手记一个漂亮的code
代码
从前有个代码长这样
if (a) {
if (b) {
c
}
} else {
if (d) {
c
}
}
后来长这样
if (a && b || !a && d) {
c
}
再后来长这样。
if (a? b : d) {
c
}
every 解决foreach中的return
有时候,我们需要从数组中筛选一些东西,filter当然可以,但是有些定制化的东西就很难,而且,在foreach中不能return。every 解决foreach中的return
array.every( item => {
if (...){
// some code
return false
} else {
return true
}
})
用!~代替 === -1
不过可能不容易看懂
!~ -1 // true
!~[1].indexof(1) // false
常用code utils
函数节流
2次执行间隔为x ms
var tr = function (time, fn) {
this.fn = fn;
this.time = time
this.buffer = [];
this._lastTriggerTime = 0;
}
tr.prototype._flushIfNeeded = function() {
var start = Date.now();
if ( this.buffer.length <=0 || start - this._lastTriggerTime <= this.time) {
return;
}
this.fn(this.buffer.pop());
this.buffer = [];
this._lastTriggerTime = Date.now();
setTimeout(this._flushIfNeeded.bind(this), this.time);
}
tr.prototype.trigger =function (arr) {
this.buffer.push(arr);
this._flushIfNeeded();
}
var nf = new tr(1000, function(arr){
console.log(arr);
});
nf.trigger('hallo');
nf.trigger('hallo');
nf.trigger('hallo');
deepClone
function deepClone(obj){
var res=Array.isArray(obj)?[]:{};
for(var key in obj){
if (typeof obj[key]=="object") {
res[key]=deepClone(obj[key]);
}else{
res[key]=obj[key];
}
}
return res;
}
Function.prototype.bind shim
function bind (context) {
var target = this
var bindArgs = Array.prototype.slice.call(arguments, 1)
function bound () {
var callArgs = Array.prototype.slice.call(arguments)
if (this instanceof bound) { // 判断bind后的函数是不是通过new来调用的。如果是就指向自己,不然就指向context
return target.apply(this, callArgs.concat(bindArgs))
} else {
return target.apply(context, callArgs.concat(bindArgs))
}
}
// 实现继承,让bound函数生成的实例通过原型链能追溯到target函数
// 即 实例可以获取/调用target.prototype上的属性/方法
var Empty = function () {}
Empty.prototype = target.prototype
bound.prototype = new Empty() // 这里如果不加入Empty,直接bound.prototype = target.prototype的话.改变bound.prototype则会影响到target.prototype,原型继承基本都会加入这么一个中间对象做屏障
bound.prototype.constructor = bound; // constructor修正,防止调用constructor函数出错
return bound
}
用fixup 和autosquash让git commit 更清楚
某个正常的提交
git add .
git commit -m "feature A"
git log --graph --pretty=oneline --abbrev-commit
如果我的feature A有bug可以这样操作:
git add .
git commit --fixup 8831bd1 -> feature A的id
然后用autosquash合并两个commit
git rebase -i --autosquash 4dd17ad -> feature A的前一个id
git会自动帮你找出fixup的提交,和正常提交合并,你只需要在vim里面直接保存就可以了。
随手记一个漂亮的code的更多相关文章
- 一个漂亮的php验证码类
一个漂亮的php验证码类(分享) 作者: 字体:[增加 减小] 类型:转载 下面小编就为大家分享一个漂亮的php验证码类.需要的朋友可以过来参考下 直接上代码: 复制代码 代码如下: //验证 ...
- 一个漂亮的js表单验证页面+验证码
一个漂亮的js表单验证页面 见图知其意, 主要特性 带密码安全系数的判断 其他的就没有啥啦 嘿嘿嘿 当然,其代码也在Github上 我也准备了一套可以直接Ctrl + v; Ctrl + c 运行的代 ...
- PHP入门培训教程 一个漂亮的PHP验证码
如何写一个漂亮的PHP验证码?兄弟连PHP培训 小编分享一段代码给大家: <?php class Imagecode{ private $width ; private $height; pri ...
- ctex moderncv版本更新--用latex写一个漂亮的简历
我的电脑是win7系统32位,ctex版本是v2.9.2.164 full(http://www.ctex.org/CTeXDownload) 一直不太清楚moderncv里面类似\cventry这种 ...
- PS网页设计教程XXIV——从头设计一个漂亮的网站
作为编码者,美工基础是偏弱的.我们可以参考一些成熟的网页PS教程,提高自身的设计能力.套用一句话,“熟读唐诗三百首,不会作诗也会吟”. 本系列的教程来源于网上的PS教程,都是国外的,全英文的.本人尝试 ...
- 分享一个漂亮的ProgressBar控件
codeprject上看到的一个漂亮的ProgressBar控件.是用vb.net开发的. C#直接在工具箱中引用即可. 地址:http://www.codeproject.com/Articles/ ...
- 小强的HTML5移动开发之路(5)——制作一个漂亮的视频播放器
来自:http://blog.csdn.net/dawanganban/article/details/17679069 在前面几篇文章中介绍了HTML5的特点和需要掌握的基础知识,下面我们开始真正的 ...
- 给Ajax一个漂亮的嫁衣——Ajax系列之五(下)之序列化和反序列化
给Ajax一个漂亮的嫁衣——Ajax系列之五(下)之序列化和反序列化 标签: ajaxdictionaryjsonobject服务器function 2012-07-25 18:41 2242人阅读 ...
- 一个漂亮而强大的自定义view
代码地址如下:http://www.demodashi.com/demo/13502.html 简介 主要提供一个漂亮而强大的自定义SeekBar,进度变化由提示牌 (sign)展示,具有强大的属性设 ...
随机推荐
- Android为TV端助力 进制互相转换
byte转换为16进制 public static String GetByte2Str(byte b) { byte[] buff = new byte[2]; buff[0] = mHex[(b ...
- TCP/IP、UDP、HTTP、SOCKET详解
文章大纲 网络OSI七层及各层作用 TCP与UDP基本介绍 TCP连接过程详解 SOCKET原理与连接详解 一.网络OSI七层及各层作用 应用层:文件传输,电子邮件,文件服务,虚拟终端 T ...
- geth搭建私有网络
geth --rpc --unlock "3ae88fe370c39384fc16da2c9e768cf5d2495b48,81063419f13cab5ac090cd8329d8fff9f ...
- js实现表格无缝滚动效果
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- win10 iis注册.net framework 此操作系统版本不支持此选项。
利用dism工具 执行下面命令才成功 dism /online /enable-feature /featurename:IIS-ISAPIFilter dism /online /enable-fe ...
- Codechef Bear and Clique Distances
题目:Bear and Clique Distances 描述:共有N个点,前1—K个点任意两点之间有一条无向边,边的权值为X,再任意给M条边(u,v,w)(不重复),求任意一点到其余各点的最短路. ...
- centosFTP服务搭建及权限配置
引用一个其他大佬对vsftpd的描述: vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点. vsftpd 是一个 UNIX 类操作系统上运行的服务器的 ...
- 记录基于VMware虚拟机, Linux7.2下外部主机访问配置
systemctl stop firewalld.service #停止firewall systemctl disable firewalld.service #禁止firewall开机启动
- linux ssh免密登陆远程服务器
10.170.1.18服务器免密登录到10.170.1.16服务器 首先登入一台linux服务器(10.170.1.18),此台做为母机(即登入其他linux系统用这台做为入口):执行一行命令生成ke ...
- netstat Recv-Q和Send-Q
通过netstat -anp可以查看机器的当前连接状态: Active Internet connections (servers and established) Proto Recv-Q Se ...