const random = (arr)=>{
for(let i =1; i < arr.length; i++){
let random = ~~(Math.random()*(i+1));
[arr[i], arr[random]] = [arr[random], arr[i]];
}
return arr;
}
判断一个对象是否为空
// because Object.keys(new Date()).length === 0;
// we have to do some additional check
Object.keys(obj).length === 0 && obj.constructor === Object
实现一个sleep
function sleep(ms){
let template = new Promise((resolve)=>{
setTimeout(resolve,ms);
})
return template;
}
sleep(1000).then(()=>{
// do someting
})
HTML
display:none指的是元素完全不陈列出来,不占据空间,涉及到了DOM结构,故产生reflow与repaint visibility:hidden指的是元素不可见但存在,保留空间,不影响结构,故只产生repaint
标准的盒子模型:盒子总宽度 =margin + border + padding + content W3C中的width = content
IE盒模型:盒子总宽度 = margin+content IE中盒模型的Width = border+padding+content
关于onInput() getComputedStyle()
事件委托
CSS
CSS Sprites
屏幕分辨率
JavaScript
判断一个变量是不是对象非常简单。值类型的类型判断用typeof(Null除外),引用类型的类型判断用instanceof
var操作符
(function() { var a = b = 5; })(); console.log(b); console.log(a);
输出:5 a is not defined
关于js中的类型判断
数组:Array.isArray(arr) || Object.prototype.toString.call(arr) === '[object Array]' 对象:typeof obj === 'function' || typeof obj === 'obj' && !!obj;
严格模式的限制
JavaScript小技巧
使用~~向下取整 类似与Math.floor();
数组去重
数组中的最大值
数组中的最小值
判断IE
Check if user is using IE
正则处理千分位格式化数字(不能处理带小数的)
或者利用toLocaleString Number.prototype.toLocaleString.call(num);
乱序
判断一个对象是否为空
实现一个sleep
script defer vs async
defer不会阻塞HTML解析 HTML解析时并行下载JS文件,等到HTML解析完执行,defer会始终按照顺序执行 async可能阻塞HTML解析 HTML解析时并行下载JS文件,一旦下载完成立即执行,不一定按照顺序执行
NetWork
域名收敛
Browser
DOMContentLoaded与load