本周学习总结(原生)
toLocaleString
在特定的环境语言环境下的表示字符串
let numbers=3500
number.toLocaleString() //3,500
console.log(numbers.toLocaleString('en-US')) //3,500
RGBToHex
const RGBToHex=(r,g,b)=>((r<<16)+(g<<8)+b).toString(16).padStart(6,'0')
console.log(RGBToHex(255, 165, 1)) //ffa501
地图切换数据,遇到清除不了原数据的问题
myChart.dispose();
//删除dom实例,然后重新绑定dom,然后再赋值新数据
myChart = echarts4.init(document.getElementById('yl-echarts'));
myChart.setOption(vm.option);
谷歌浏览器不能自动播放的问题
打开 chrome://flags/#touch-events-api 设置为 auto
位运算
判断一个整数 x 的奇偶性:x & 1 = 1 (奇数) , x & 1 = 0 (偶数)
求一个浮点数 x 的整数部分:~~x,对于正数相当于 floor(x) 对于负数相当于 ceil(-x)
计算 2 ^ n:1 << n 相当于 pow(2, n)
计算一个数 x 除以 2 的 n 倍:x >> n 相当于 ~~(x / pow(2, n))
判断一个数 x 是 2 的整数幂(即 x = 2 ^ n): x & (x - 1) = 0
多个函数执行
const pipeAsync = (...args) => arg => args.reduce((acc, val) => {
return acc.then(val)
}, Promise.resolve(arg))
const sum = pipeAsync(
x => x + 1,
x => new Promise(resolve => setTimeout(() => resolve(x + 2), 1000)),
x => x + 3,
async x => (await x) + 4
);
(async ()=>{
console.log(await sum(5))
})()
模板字符串
const a = n => [...`${n}`]
const b = n => [...String(n)];
console.log(a('abc'))
console.log(b('abc'))
判断是不是undefined和null
可以用来判断不等于undefined null
const isNil = x => x == null;
console.log(isNil(undefined)) //true
console.log(isNil(null)) //true
console.log(isNil(0)) //false
console.log(isNil([])) //false
动画开始停止
animation-play-state:
paused //关
running //开
padStart
'8'.padStart(2,'0') //
//08
const addLeadingZeros = (number, targetLength) => {
let start = number < 0 ? '-' : '';
return start + Math.abs(number).toString()
.padStart( targetLength,'0')
}
Date 时间
new Date()
// 年 月 日 时 分 秒 毫秒
new Date(2019,9,6,12,0,0,0) //2019-10-06T04:00:00.000Z
//总毫秒数
new Date(1570334400000) //2019-10-06T04:00:00.000Z
时间排序
var result = [
new Date(1995, 6, 2),
new Date(1987, 1, 11),
new Date(1989, 6, 10)
];
result.sort((a,b)=>a.getTime()-b.getTime())
console.log(result)
递归优化
动态规划是用已知项去更好的求解未知项
将原问题拆解若干子问题,同时保存子问题的答案,使得每个子问题只求解一次,最终获得原问题的答案
f(n)=f(n-1)+f(n-2)
记忆化搜索递归(自顶向下)
原来的递归 let num = 0; // 用来记录fib函数执行次数,执行一次加一 function fib(n) { num ++; if(n === 0) { return 0; } if(n === 1) { return 1; } return fib(n-1) + fib(n-2); } console.log(fib(7)) console.log(num)// 42 let memory = Array.from({length: 100}, v => -1) const fib = n => { if (n == 0) { return 0 } if (n == 1) { return 1 } if (memory[n] == -1) { memory[n] = fib(n - 1) + fib(n - 2) } return memory[n] } console.log(fib(7)) //13 这个只有13次
迭代法(自下向上)
f(2)=f(1)+f(0), f(3)=f(2)+f(1)
const fib = n => { let memory = new Array(n) memory[0] = 0 memory[1] = 1 let i = 2 while (i <= n) { memory[i] = memory[i - 1] + memory[i - 2] i++ } return memory[n] } console.log(fib(7)) //13
CSS 技巧
选择器
nth-child odd even n+6 从6开始后面的
https://juejin.im/post/5d4d0ec651882549594e7293
Date()
console.log(new Date().toISOString().split('T')[0])
// 2019-09-08
console.log(new Date().toTimeString().slice(0,8))
// 14:05:36
reduce 解构
console.log([{n: 4}, {n: 2}, {n: 8}, {n: 6}].reduce((acc, {n}) => acc + n, 0))
// 20
传入多个函数
const compose=(...args)=>args.reduce((acc,val)=>arg=>acc(val(arg)))
//从右到左
let a=compose(
val=>val+5,
val=>val*4,
val=>val+10
)
console.log(a(5))
const composeRight=(...args)=>args.reduce((acc,val)=>arg=>val(acc(arg)))
//从左到右
let b=composeRight(
val=>val+5,
val=>val*4,
val=>val+10
)
console.log(b(10))
决定自己的高度的是你的态度,而不是你的才能
记得我们是终身初学者和学习者
总有一天我也能成为大佬