# 2020.9.1
# webpack 中的 HappyPack
- 由于运行在 Node.js 之上的 Webpack 是单线程模型的,所以 Webpack 需要处理的事情需要一件一件的做,不能多件事一起做。 我们需要 Webpack 能同一时间处理多个任务,发挥多核 CPU 电脑的威力,HappyPack 就能让 Webpack 做到这点,它把任务分解给多个子进程去并发的执行,子进程处理完后再把结果发送给主进程。
# 图片转 base64 格式
- 一般小于 8kb 是明显可以的
- 超过 16kb 一般是不建议的
- 超过 32kb 一般是明显不应该的
# 2020.10.22
# echarts 纵轴展示 0% ~100%
optionCopy.yAxis = [
{
type: 'value',
min: 0,
max: 100,
interval: 25,
axisLabel: {
fontSize: 10,
formatter: '{value} %',
},
},
];
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 2020.10.26
# a 标签上的 href 用来向后端传递参数时只能写死,不能用变量。
# 给 DOM 元素添加属性
this.linkAdom.setAttribute('href', `kim://thread?id=${this.groupId}&type=4`);
1
# 2020.11.02
# 监听浏览器切换 Tab 页的 API visibilitychange
document.addEventListener('visibilitychange', function() {
// 浏览器切换事件
if (document.visibilityState === 'hidden') {
// 离开当前tab标签
console.log('离开当前tab标签'); // 这里可以做一些我们想做的操作,比如说清除页面的轮刷定时器。
} else {
// 回到当前tab标签
console.log('回到当前tab标签'); // 这里可以做一些我们想做的操作,比如重新开启页面的轮刷定时器。
}
});
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 2020.11.6
# some 位运算
求除以 2 的余数可以用位与运算符:n & 1,如下所示:
0101
&
0001
0001 5 & 1 = 1
1
2
3
4
2
3
4
0110
&
0001
0000 6 & 1 = 0
1
2
3
4
2
3
4
# 上面位运算的应用
- LeetCode 1356. 根据数字二进制下 1 的数目排序
给你一个整数数组 arr 。请你将数组中的元素按照其二进制表示中数字 1 的数目升序排序。
如果存在多个数字二进制中 1 的数目相同,则必须将它们按照数值大小升序排列。
请你返回排序后的数组。
示例 1:
输入:arr = [0,1,2,3,4,5,6,7,8]
输出:[0,1,2,4,8,3,5,6,7]
解释:[0] 是唯一一个有 0 个 1 的数。
[1,2,4,8] 都有 1 个 1 。
[3,5,6] 有 2 个 1 。
[7] 有 3 个 1 。
按照 1 的个数排序得到的结果数组为 [0,1,2,4,8,3,5,6,7]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sort-integers-by-the-number-of-1-bits
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
* @param {number[]} arr
* @return {number[]}
*/
var sortByBits = function(arr) {
const sortJing = (n) => {
let count = 0;
while (n != 0) {
count += n & 1;
n = n >> 1;
}
return count;
};
return arr.sort((a, b) => {
return sortJing(a) - sortJing(b) || a - b;
});
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 看到的字符串 API
String.fromCharCode()
- 静态 String.fromCharCode() 方法返回由指定的 UTF-16 代码单元序列创建的字符串。
String.fromCharCode(97); // a
1
# JavaScript 中的字符集
为什么 JavaScript 不选择更高级的 UTF-16,而用了已经被淘汰的 UCS-2 呢?
答案很简单:非不想也,是不能也。因为在 JavaScript 语言出现的时候,还没有 UTF-16 编码。
1995 年 5 月,Brendan Eich 用了 10 天设计了 JavaScript 语言;10 月,第一个解释引擎问世;次年 11 月,Netscape 正式向 ECMA 提交语言标准。对比 UTF-16 的发布时间(1996 年 7 月),就会明白 Netscape 公司那时没有其他选择,只有 UCS-2 一种编码方法可用!
# JavaScript 字符函数的局限
- 由于 JavaScript 只能处理 UCS-2 编码,造成所有字符在这门语言中都是 2 个字节,如果是 4 个字节的字符,会当作两个双字节的字符处理。JavaScript 的字符函数都受到这一点的影响,无法返回正确结果。 现在 ES6 基本解决了这个问题。
来源 http://www.ruanyifeng.com/blog/2014/12/unicode.html
# JS 变量提升的本质
- 变量提升只是一种表象
- 透过表象背后隐藏的其实是 JavaScript 的一些重要特性
- JavaScript 是一种动态语言 它有 编译、执行两个阶段
- JS 和其他语言一样,都要经历编译和执行阶段。正是在这个短暂的编译阶段里,JS 引擎会搜集所有的变量声明,并且提前让声明生效。至于剩下的语句,则需要等到执行阶段、等到执行到具体的某一句的时候才会生效。这就是变量提升背后的机制。