js
似梦飞花
这个作者很懒,什么都没留下…
展开
-
js二维数组转一维数组
面试的一道题,将二维数组转换为一维数组 { const arr=[[1,2,3],[3,4],[5]]; console.log([].concat.apply([],arr)); }原创 2016-12-31 16:26:46 · 12873 阅读 · 2 评论 -
获取对象多层级属性值
在开发中,我们常遇到获取对象的多层级属性值,例如a.b.c.d这种,则不免会遇到其中一层已经为undefined而导致后面取值报错。所以不得不做一次校验,类似 a.b&&a.b.c&&a.b.c.d这样,层级越多判断也越多。es未来提议以这种形式替换:a.b?.c?.d,但目前还没有得到浏览器的支持。所以很有必要做一个工具方法来简化书写,这里抛砖引玉一下functi...原创 2018-02-23 21:50:02 · 2449 阅读 · 0 评论 -
日期格式化
const defaultFormat='yyyy/MM/DD HH:mm:ss MS d'; const REGS={ year:/y{2,4}/, month:/M{1,2}(?!S)/, date:/D{1,2}/, hour:/H{1,2}/, minute:/m{1,2}/, seco...原创 2018-02-23 21:52:52 · 260 阅读 · 0 评论 -
如何让阻止别人调试js
非服务端js因为最终要下载到客户端/浏览器编译执行,所以不可避免的要把代码泄漏出去。虽然压缩混淆可以让代码难以识别,但字符串/全局对象都不能被压缩,可以根据这方面入手来找寻突破口,进而对代码进行调试。这里抛砖引玉的分享一个阻止别人在浏览器调试代码的方法。目前多数浏览器都支持debugger断点代码,只要打开devtools,代码执行到debugger位置时,就会断点。而如若没有打开devtools...原创 2018-03-10 08:28:07 · 10256 阅读 · 3 评论 -
setTimeout解决循环值的几种方法
for(var i=0;i<5;i++){ setTimeout(function(){ console.log(`错误 ${i}`); },0) } for(var i=0;i<5;i++){ (function(i){ setTimeout(function(){...原创 2018-03-03 08:00:04 · 1625 阅读 · 0 评论 -
数组扁平化
var arr=[1,2,[3,4,[5,6,{}]],7,8]; var toString=({}).toString; function plat(arr,_arr){ for(var i=0;i<arr.length;i++){ var item=arr[i]; if(toString.call(item)...原创 2018-03-03 18:20:20 · 337 阅读 · 0 评论 -
instanceof执行机制
js中的instanceof是判断依据是对象的__proto__是否等于方法/类的prototype,若否则沿着原型链向上寻找,直到为null时返回false,大体实现如下function checkIsInstanceOf(obj,Class){ let proto=Object.getPrototypeOf(obj); if(proto === Class...原创 2018-08-04 18:52:04 · 489 阅读 · 0 评论