# 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

# 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

# 2020.11.6

# some 位运算

求除以 2 的余数可以用位与运算符:n & 1,如下所示:

0101
    &
0001
0001  5 & 1 = 1
1
2
3
4
0110
    &
0001
0000  6 & 1 = 0
1
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] 是唯一一个有 01 的数。
[1,2,4,8] 都有 11[3,5,6]21[7]31 。
按照 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
/**
 * @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

# 看到的字符串 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 引擎会搜集所有的变量声明,并且提前让声明生效。至于剩下的语句,则需要等到执行阶段、等到执行到具体的某一句的时候才会生效。这就是变量提升背后的机制。