0%

取值

font-weight可取值:100~900和normal、bold、bolder、lighter。

字体所拥有的字重的数量实际上很少存在满足有9个字重刚好跟100~900的CSS字重一一对应的情况,通常字体拥有的字重数量为4至6个。

不必担心,起码400和700对应的字重至少是每种字体必备的,譬如常见的 Arial、Helvetica、Georgia等等,只有400(normal)和700(bold)。

normal、bold

400 等同于 normal,而 700 等同于 bold。

bolder、lighter

bolder、lighter表示其字重值是基于从其父元素继承而来的字重计算所得的,与normal、bold所代表的字重并无关系。

参考
作者:人不中二枉少年
链接:https://www.jianshu.com/p/f9c6f9729fbb
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

问题

为什么 forEach 不行,而 普通 for 循环 和 for…of 却正常呢?

我们得先从 forEach 的源码 看起:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
// Production steps of ECMA-262, Edition 5, 15.4.4.18
// Reference: http://es5.github.io/#x15.4.4.18
if (!Array.prototype.forEach) {

Array.prototype.forEach = function(callback/*, thisArg*/) {

var T, k;

if (this == null) {
throw new TypeError('this is null or not defined');
}

// 1. Let O be the result of calling toObject() passing the
// |this| value as the argument.
var O = Object(this);

// 2. Let lenValue be the result of calling the Get() internal
// method of O with the argument "length".
// 3. Let len be toUint32(lenValue).
var len = O.length >>> 0;

// 4. If isCallable(callback) is false, throw a TypeError exception.
// See: http://es5.github.com/#x9.11
if (typeof callback !== 'function') {
throw new TypeError(callback + ' is not a function');
}

// 5. If thisArg was supplied, let T be thisArg; else let
// T be undefined.
if (arguments.length > 1) {
T = arguments[1];
}

// 6. Let k be 0.
k = 0;

// 7. Repeat while k < len.
while (k < len) {

var kValue;

// a. Let Pk be ToString(k).
// This is implicit for LHS operands of the in operator.
// b. Let kPresent be the result of calling the HasProperty
// internal method of O with argument Pk.
// This step can be combined with c.
// c. If kPresent is true, then
if (k in O) {

// i. Let kValue be the result of calling the Get internal
// method of O with argument Pk.
kValue = O[k];

// ii. Call the Call internal method of callback with T as
// the this value and argument list containing kValue, k, and O.
callback.call(T, kValue, k, O);
}
// d. Increase k by 1.
k++;
}
// 8. return undefined.
};
}

摘抄最重要的部分:

1
2
3
4
5
6
7
8
9
10
11
12
13
/* 
O 为传入数组
len 为传入数组长度
callback 为传入回调函数
*/
while (k < len) {
var kValue;
if (k in O) {
kValue = O[k];
callback.call(T, kValue, k, O);
}
k++;
}

可以看到 callback.call(T, kValue, k, O); 这一句,callback 其实是我们传入的一个被 async 封装的 promise 对象,而 Array.prototype.forEach 内部并未对这个 promise 对象做任何处理,只是忽略它。

解决方案

如果我们尝试把 Array.prototype.forEach 改造一下,让它不要忽视,就可以达到效果了,如下:

1
2
3
4
5
Array.prototype.forEach = async function(callback/*, thisArg*/) {
// ………
await callback.call(T, kValue, k, O);
// ………
};

你总不能去侵入式的改造Array.prototype.forEach吧!所以最简单的办法就是抛弃 forEach,使用 for…of 或者 for 循环!

参考

Emoji Raw Emoji Code Description
🎉 :tada: Initial Commit
✨ :sparkles: when introducing New Features
🐎 :racehorse: when improving performance
⚡ :zap: when introducing Backward-InCompatible Features, maybe with @CHANGED Comment Tag
🚀 :rocket: Anything related to Deployments/DevOps
📚 :books: when writing docs
🎨 :art: when improving the format/structure of the code
📝 :memo: Add or update documentation.
📝 :pencil: when performing minor changes/fixing the code or language
🐛 :bug: when reporting a bug, with @FIXMEComment Tag
🔨 :hammer: when refactoring code
🔧 :wrench: Add or update configuration files.
💄 :lipstick: when improving UI/Cosmetic
💅 :nail_care: style
🍻 :beers: Write code drunkenly.
📰 :newspaper: when creating a new file
🚑 :ambulance: when fixing a bug
🐧 :penguin: when fixing something on Linux
🍎 :apple: when fixing something on Mac OS
🏁 :checkered_flag: when fixing something on Windows
🔥 :fire: when removing code or files, maybe with @CHANGED Comment Tag
🚜 :tractor: when change file structure. Usually together with 🎨
☔ :umbrella: when adding tests
🔬 :microscope: when adding code coverage
💚 :green_heart: when fixing the CI build
🔒 :lock: when dealing with security
⬆️ :arrow_up: when upgrading dependencies
⬇️ :arrow_down: when downgrading dependencies
⏩ :fast_forward: when forward-porting features from an older version/branch
⏪ :rewind: when backporting features from a newer version/branch
👕 :shirt: when removing linter/strict/deprecation warnings
♿ :wheelchair: when improving accessibility
🌐 :globe_with_meridians: when dealing with globalization/internationalization/i18n/g11n
🚧 :construction: WIP(Work In Progress) Commits, maybe with @REVIEW Comment Tag
💎 :gem: New Release
🥚 :egg: New Release with Python egg
🎡 :ferris_wheel: New Release with Python wheel package
🔖 :bookmark: Version Tags
🔈 :speaker: when Adding Logging
🔇 :mute: when Reducing Logging
💡 :bulb: New Idea, with @IDEA Comment Tag
❄️ :snowflake: changing Configuration, Usually together with 🐧 or 🎀 or 🚀
🎀 :ribbon: Customer requested application Customization, with @HACK Comment Tag
🐘 :elephant: PostgreSQL Database specific (Migrations, Scripts, Extensions, …)
🐬 :dolphin: MySQL Database specific (Migrations, Scripts, Extensions, …)
🍃 :leaves: MongoDB Database specific (Migrations, Scripts, Extensions, …)
🏦 :bank: Generic Database specific (Migrations, Scripts, Extensions, …)
🐳 :whale: Docker Configuration
🤝 :handshake: when Merge files
🍒 :cherries: when Commit Arise from one or more Cherry-Pick Commit(s)

参考
链接:https://www.jianshu.com/p/0bfdf5c41696
https://gitmoji.dev/
https://github.com/slashsBin/styleguide-git-commit-message

1
2
3
4
5
6
7
8
9
root = true

[*]
charset = utf-8
end_of_line = lf
indent_size = 2
indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true

第一级 – 存活

  • i → Insert 模式,按 ESC 回到 Normal 模式.
  • x → 删当前光标所在的一个字符。
  • :wq → 存盘 + 退出 (:w 存盘, :q 退出) (陈皓注::w 后可以跟文件名)
  • dd → 删除当前行,并把删除的行存到剪贴板里
  • p → 粘贴剪贴板

推荐:

  • hjkl (强例推荐使用其移动光标,但不必需) →你也可以使用光标键 (←↓↑→).
    注: j 就像下箭头。
  • :help → 显示相关命令的帮助。你也可以就输入 :help 而不跟命令。(陈皓注:退出帮助需要输入:q)

第二级 – 感觉良好

参考:
https://coolshell.cn/articles/5426.html

在日常使用 zsh 的过程中,如果需要打很多命令,会很麻烦,除了可以使用ctrl+r 的方式来查询历史命令,还可以通过插件的方式来自动匹配命令,提高效率。

语法高亮也是帮助我们不要打错命令的好帮手。

第一步,进入 zsh 插件目录,并 clone 项目到此目录中:
cd “$ZSH_CUSTOM/plugins”
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git
git clone https://github.com/zsh-users/zsh-autosuggestions.git
第二步,配置 .zshrc 文件
… 上面省略
plugins = (git zsh-autosuggestions zsh-syntax-highlighting)
… 下面省略
最后一步,让配置生效
zsh
完成!👍

作者:万有引力万有
链接:https://www.jianshu.com/p/d70f9c4cb47c
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

调试 npm script 命令

注意:此为 configurations 中的一条配置,具体看下一条

1
2
3
4
5
6
7
8
9
10
{
"name": "Launch via NPM",
"type": "node",
"request": "launch",
"runtimeExecutable": "npm", //runtimeExecutable表示要使用的运行时,默认为node,这里我们配置成了npm
"runtimeArgs": [
"run-script", "dev" //这里的dev就对应package.json中的scripts中的dev
],
"port": 9229 //这个端口是调试的端口,不是项目启动的端口
},

调试指定 js 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "pwa-node",
"request": "launch",
"name": "Launch Program",
"skipFiles": [
"<node_internals>/**"
],
"program": "${workspaceFolder}/test/filelist.js"
}
]
}

使用 nodemon 调试

参考:
https://www.cnblogs.com/little-ab/p/11796952.html

~/.zshrc 文件里添加如下代码

1
2
alias setproxy="export ALL_PROXY=http://127.0.0.1:15236"
alias unsetproxy="unset ALL_PROXY"
1
2
3
4
# 设置代理
setproxy
# 取消代理
unsetproxy

参考

下面列举一些经常使用的快捷键:

Ctrl + L 用于清理终端的内容,就是清屏的作用。其实 clear 命令也有同样效果,但是你不觉得 Ctrl + L 的按键比输入 clear 这五个字母更快速吗?
Ctrl + D 给终端传递 EOF (End Of File,文件结束符),在运行程序时很有用。有些程序我们需要在接收到 EOF 输入时结束,那么这个快捷键就可以派上用场了。比如我们之前演示过,退出 root 用户身份,就可以用 Ctrl + D。如果你在命令行提示符后什么也不输入的情况下直接按下这组快捷键,那么就会关闭当前的终端;
Shift + PgUp 用于向上滚屏,与鼠标的滚轮向上滚屏是一个效果;
Shift + PgDn 用于向下滚屏,与鼠标的滚轮向下滚屏是一个效果。
下面的快捷键在你编辑一条比较长的命令时很有用:

Ctrl + A 光标跳到一行命令的开头。一般来说,Home 键有相同的效果;
Ctrl + E 光标跳到一行命令的结尾。一般来说,End 键有相同的效果;。
Ctrl + U 删除所有在光标左侧的命令字符;
Ctrl + K 删除所有在光标右侧的命令字符;
Ctrl + W 删除光标左侧的一个“单词”,这里的“单词”指的是用空格隔开的一个字符串。例如 -a 就是一个“单词”;
Ctrl + Y 粘贴用 Ctrl + U、 Ctrl + K 或 Ctrl + W “删除”的字符串,有点像“剪切-粘贴”。

参考:
https://www.imooc.com/read/39/article/463