黑科技JS代码整理 是不是很void 666
一行代码实现评级
1 | "★★★★★☆☆☆☆☆".slice(5 - rate, 10 - rate);定义一个变量rate是1到5的值 |
SB、NB、Hello World
1 | (!(~+[])+{})[--[~+""][+[]]*[~+[]] + ~~!+[]]+({}+[])[[~!+[]]*~+[]] |
错误处理的正确方法
1 | try { |
标记区域的范围
1 | [].forEach.call($$("*"),function(a){ |
获取随机字符串
1 | Math.random().toString(16).substring(2) // 0e7a48ca4bec3 |
1 | function generateRandomAlphaNum(len) { |
这样的判断你能做对吗
1 | (10)["toString"]() === "10" // true |
匿名函数自执行方法
1 | ( function() {}() ); |
终于到 void 666
1 | // 以下都是undefined |
金额格式化
1 | // api |
逗号运算符
1 | var a = 0; |
交换两个数的值
1 | // 加减运算 缺点也很明显,整型数据溢出,对于32位字符最大表示数字是2147483647,如果是2147483645和2147483646交换就失败了。 |
JSON数据的深拷贝
1 | var a = { |
局限性:
- 会忽略 undefined
- 不能序列化函数,会被忽略
- 不能解决循环引用的对象
长度为6值为8的数组
1 | Array(6).fill(8) |
脚本永不报错
1 | window.onerror = function(m, f, l){ return true } |
生活常识
36.3℃~37.2℃(口腔)、36.1℃~37℃(腋窝)
60~100次/分
1500ml
2500大卡
90mmHg<收缩压<140mmHg、60mmHg<舒张压<90mmHg
使用Boolean过滤数组中的假值
双否运算符(~~)
1
2const compact = arr => arr.filter(Boolean)
compact([0, 1, false, 2, '', 3, 'a', 'e' * 23, NaN, 's', 34]) // // [ 1, 2, 3, 'a', 's', 34 ]
惰性载入函数
1 | jsfunction foo(){ |
那么第一次运行之后就会覆写这个方法,下一次再运行的时候就不会执行判断了。当然现在只有一个判断,如果判断很多,分支比较复杂,那么节约的资源还是可观的。
字符串比较时间大小
1 | var a = "2014-08-08"; |
字符串比较大小是按照字符串从左到右每个字符的charCode来的,但所以特别要注意时间形式注意补0
1 | // 方法1 |
数字补0操作
1 | const addZero1 = (num, len = 2) => (`0${num}`).slice(-len) |
es6的八进制表示
1 | 035 // 8进制29 原来的方式 |
Math.round实现的精确保留指定位数的函数(toFixed不完善)
1 | const round = (n, decimals = 0) => Number(`${Math.round(`${n}e${decimals}`)}e-${decimals}`) |
统计相同项(reduce)
1 | var str = a.split('').reduce((p,k)=>(p[k]++||(p[k]=1),p),{}) |
1 | // 数组相同项的次数 |
两个数值的交换
1 | var temp = a; a = b; b = temp |
多判断
1 | if ( foo === 'bar' || foo === 'foobar' || foo === 'foo' ) |
shell压缩解压
1 | tar -zcvf newfilename.tar.gz filename |
banana
1 | ('b'+'a'+ +'a'+'a').toLowerCase() |