diff --git a/docs/awk.html b/docs/awk.html index a5112eef..972d518d 100644 --- a/docs/awk.html +++ b/docs/awk.html @@ -34,14 +34,14 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

+

Awk 备忘清单

这是 GNU awk 的单页快速参考备忘单,其中涵盖了常用的 awk 表达式和命令。

入门

-

入门

+

试试

该程序可用于选择文件中的特定记录并对其执行操作

$ awk -F: '{print $1, $NF}' /etc/passwd
 
@@ -87,21 +87,21 @@
---
-F:冒号作为分隔符
{...}awk 程序
print打印当前记录
$1第一个字段
$NF最后一个字段
/etc/passwd输入数据文件
-

Awk 程序

+

Awk 程序

BEGIN          {<初始化>} 
    <pattern 1> {<计划动作>} 
    <pattern 2> {<计划动作>} 
    ...
 END            {< 最后的动作 >}
 
-

示例

+

示例

awk '
     BEGIN { print "\n>>>Start" }
     !/(login|shutdown)/ { print NR, $0 }
     END { print "<<<END\n" }
 ' /etc/passwd
 
-

变量

+

变量

          $1      $2/$(NF-1)    $3/$NF
            ▼          ▼           ▼ 
@@ -124,7 +124,7 @@
 awk -F: '{print $1 "=" $6}' /etc/passwd
 

查看: Awk 变量

-

awk 程序示例

+

awk 程序示例

awk 'BEGIN {print "hello world"}'        # 打印 "hello world"
 awk -F: '{print $1}' /etc/passwd         # -F: 指定字段分隔符
@@ -135,11 +135,11 @@
 # END 块在最后执行一次
 awk -F: '{print $1} END { print "-done-"}' /etc/passwd
 
-

条件

+

条件

awk -F: '$3>30 {print $1}' /etc/passwd
 

查看: Conditions 条件

-

生成 1000 个空格

+

生成 1000 个空格

awk 'BEGIN{
     while (a++ < 1000)
         s=s " ";
@@ -147,7 +147,7 @@
 }'
 

查看: Loops

-

数组 Arrays

+

数组 Arrays

awk 'BEGIN {
    fruits["mango"] = "yellow";
    fruits["orange"] = "orange"
@@ -157,7 +157,7 @@
 }'
 

查看: Awk 数组

-

函数 Functions

+

函数 Functions

# => 5
 awk 'BEGIN{print length("hello")}'
 # => HELLO
@@ -166,8 +166,8 @@
 awk 'BEGIN{print substr("hello", 1, 3)}'
 

查看: Functions

-

Awk 变量

-

内置变量

+

Awk 变量

+

内置变量

@@ -214,7 +214,7 @@
:-:-
$0全线
$1, $2...$NF第一个,第二个……最后一个字段
NR记录总数(Number of Records)
NFN个字段(Nnumber of Fields)
OFSOutput Field Separator
输出字段分隔符 (default " ")
FSinput Field Separator
输入字段分隔符 (default " ")
ORSOutput Record Separator
输出记录分隔符 (default "\n")
RSinput Record Separator
输入记录分隔符 (default "\n")
FILENAME文件名
-

表达式

+

表达式

@@ -285,7 +285,7 @@
:-:-
$1 == "root"第一个字段等于根
{print $(NF-1)}倒数第二个字段
NR!=1{print $0}从第 2 条记录开始
NR > 3从第 4 条记录开始
NR == 1第一次记录
END{print NR}总记录
BEGIN{print OFMT}输出格式
{print NR, $0}行号
{print NR " " $0}行号(选项卡)
{$1 = NR; print}用行号替换第一个字段
$NF > 4最后一个字段 > 4
NR % 2 == 0甚至记录
NR==10, NR==20记录 10 到 20
BEGIN{print ARGC}arguments
ORS=NR%5?",":"\n"连接记录
-

示例

+

示例

打印总和和平均值

awk -F: '{sum += $3}
      END { print sum, sum/NR }
@@ -310,7 +310,7 @@
     if (match("One Two Three", "re"))
         print RLENGTH }'
 
-

环境变量

+

环境变量

@@ -353,7 +353,7 @@
:-:-
ARGC数字或参数
ARGV参数数组
FNR文件记录数(File Number of Records)
OFMT数字格式 (default "%.6g")
RSTART字符串中的位置
RLENGTH比赛时长
SUBSEP多维数组分隔符 (default "\034")
ARGIND参数索引
-

仅限 GNU awk

+

仅限 GNU awk

@@ -384,17 +384,17 @@
:-:-
ENVIRON环境变量
IGNORECASE忽略大小写
CONVFMT转换格式
ERRNO系统错误
FIELDWIDTHS固定宽度字段
-

定义变量

+

定义变量

awk -v var1="Hello" -v var2="Wold" '
     END {print var1, var2}
 ' </dev/null
 
-

使用 shell 变量

+

使用 shell 变量

awk -v varName="$PWD" '
     END {print varName}' </dev/null
 
-

Awk 运算符

-

运算符

+

Awk 运算符

+

运算符

@@ -421,7 +421,7 @@
:-:-
{print $1}第一个字段
$2 == "foo"等于
$2 != "foo"不等于
"foo" in array在数组中
-

正则表达式

+

正则表达式

@@ -448,7 +448,7 @@
:-:-
/regex/行匹配
!/regex/行不匹配
$1 ~ /regex/字段匹配
$1 !~ /regex/字段不匹配
-

更多条件

+

更多条件

@@ -467,8 +467,8 @@
:-:-
($2 <= 4 || $3 < 20)或者
($1 == 4 && $3 < 20)
-

运算符

-

算术运算

+

运算符

+

算术运算

  • +
  • -
  • @@ -479,7 +479,7 @@
  • --
-

速记作业

+

速记作业

  • +=
  • -=
  • @@ -488,7 +488,7 @@
  • %=
-

比较运算符

+

比较运算符

  • ==
  • !=
  • @@ -498,19 +498,19 @@
  • >=
-

示例

+

示例

awk 'BEGIN {
     if ("foo" ~ "^fo+$")
         print "Fooey!";
 }'
 
-

不匹配

+

不匹配

awk 'BEGIN {
     if ("boo" !~ "^fo+$")
         print "Boo!";
 }'
 
-

如果在数组中

+

如果在数组中

awk 'BEGIN {
     assoc["foo"] = "bar";
     assoc["bar"] = "baz";
@@ -518,8 +518,8 @@
         print "Fooey!";
 }'
 
-

Awk 函数

-

常用功能

+

Awk 函数

+

常用功能

@@ -587,7 +587,7 @@
函数描述
index(s,t)字符串 s 中出现字符串 t 的位置,如果未找到则为 0
length(s)字符串 s 的长度(如果没有 arg,则为 $0)
rand01 之间的随机数
substr(s,index,len)返回从索引开始的 slen-char 子字符串(从 1 开始计数)
srandrand 设置种子并返回之前的种子
int(x)x 截断为整数值
split(s,a,fs)将字符串 s 拆分为数组 afs 拆分,返回 a 的长度
match(s,r)字符串 s 中出现正则表达式 r 的位置,如果未找到,则为 0
sub(r,t,s)t 替换为字符串 s 中第一次出现的正则表达式 r(如果未给出 s,则替换为 $0)
gsub(r,t,s)t 替换字符串 s 中所有出现的正则表达式 r
system(cmd)执行cmd并返回退出状态
tolower(s)字符串 s 转小写
toupper(s)字符串 s 转大写
getline$0 设置为当前输入文件中的下一个输入记录
-

用户定义函数

+

用户定义函数

awk '
     # 返回最小数量
     function find_min(num1, num2){
@@ -615,8 +615,8 @@
     }
 '
 
-

Awk 数组

-

带索引的数组

+

Awk 数组

+

带索引的数组

awk 'BEGIN {
     arr[0] = "foo";
     arr[1] = "bar";
@@ -625,7 +625,7 @@
     print(arr[0]); # => ""
 }'
 
-

带键的数组

+

带键的数组

awk 'BEGIN {
     assoc["foo"] = "bar";
     assoc["bar"] = "baz";
@@ -633,14 +633,14 @@
     print("foo" in assoc); # => 1
 }'
 
-

带拆分的数组

+

带拆分的数组

awk 'BEGIN {
     split("foo:bar:baz", arr, ":");
     for (key in arr)
         print arr[key];
 }'
 
-

带有排序的数组

+

带有排序的数组

awk 'BEGIN {
     arr[0] = 3
     arr[1] = 2
@@ -650,7 +650,7 @@
         print(arr[i])
 }'
 
-

多维

+

多维

awk 'BEGIN {
     multidim[0,0] = "foo";
     multidim[0,1] = "bar";
@@ -658,7 +658,7 @@
     multidim[1,1] = "boo";
 }'
 
-

多维迭代

+

多维迭代

awk 'BEGIN {
     array[1,2]=3;
     array[2,3]=5;
@@ -669,8 +669,8 @@
     }
 }'
 
-

Awk 条件

-

if-else 语句

+

Awk 条件

+

if-else 语句

awk -v count=2 'BEGIN {
     if (count == 1)
         print "Yes";
@@ -678,12 +678,12 @@
         print "Huh?";
 }'
 
-

三元运算符

+

三元运算符

awk -v count=2 'BEGIN {
     print (count==1) ? "Yes" : "Huh?";
 }'
 
-

存在

+

存在

awk 'BEGIN {
     assoc["foo"] = "bar";
     assoc["bar"] = "baz";
@@ -691,7 +691,7 @@
         print "Fooey!";
 }'
 
-

不存在

+

不存在

awk 'BEGIN {
     assoc["foo"] = "bar";
     assoc["bar"] = "baz";
@@ -699,7 +699,7 @@
         print "Huh!";
 }'
 
-

switch

+

switch

awk -F: '{
     switch (NR * 2 + 1) {
         case 3:
@@ -715,20 +715,20 @@
     }
 }' /etc/passwd
 
-

Awk 循环

-

for...i

+

Awk 循环

+

for...i

awk 'BEGIN {
     for (i = 0; i < 10; i++)
         print "i=" i;
 }'
 
-

1 到 100 之间的 2 的幂

+

1 到 100 之间的 2 的幂

awk 'BEGIN {
     for (i = 1; i <= 100; i *= 2)
         print i
 }'
 
-

for...in

+

for...in

awk 'BEGIN {
     assoc["key1"] = "val1"
     assoc["key2"] = "val2"
@@ -736,15 +736,15 @@
         print assoc[key];
 }'
 
-

Arguments

+

Arguments

awk 'BEGIN {
     for (argnum in ARGV)
         print ARGV[argnum];
 }' a b c
 
-

示例

+

示例

-

反向记录

+

反向记录

awk -F: '{ x[NR] = $0 }
     END {
         for (i = NR; i > 0; i--)
@@ -752,14 +752,14 @@
     }
 ' /etc/passwd
 
-

反向字段

+

反向字段

awk -F: '{
     for (i = NF; i > 0; i--)
         printf("%s ",$i);
     print ""
 }' /etc/passwd
 
-

按记录求和

+

按记录求和

awk -F: '{
     s=0;
     for (i = 1; i <= NF; i++)
@@ -767,7 +767,7 @@
     print s
 }' /etc/passwd
 
-

总结整个文件

+

总结整个文件

awk -F: '
     {for (i = 1; i <= NF; i++)
         s += $i;
@@ -775,7 +775,7 @@
     END{print s}
 ' /etc/passwd
 
-

while

+

while

awk 'BEGIN {
     while (a < 10) {
@@ -784,7 +784,7 @@
     }
 }'
 
-

do...while

+

do...while

awk '{
     i = 1
     do {
@@ -793,7 +793,7 @@
     } while (i <= 5)
 }' /etc/passwd
 
-

Break

+

Break

awk 'BEGIN {
     break_num = 5
     for (i = 0; i < 10; i++) {
@@ -803,7 +803,7 @@
     }
 }'
 
-

Continue

+

Continue

awk 'BEGIN {
     for (x = 0; x <= 10; x++) {
         if (x == 5 || x == 6)
@@ -813,17 +813,17 @@
     print ""
 }'
 
-

Awk 格式化打印

-

用法

-

右对齐

+

Awk 格式化打印

+

用法

+

右对齐

awk 'BEGIN{printf "|%10s|\n", "hello"}'
 # |     hello|
 
-

左对齐

+

左对齐

awk 'BEGIN{printf "|%-10s|\n", "hello"}'
 # |hello     |
 
-

通用说明符

+

通用说明符

@@ -858,7 +858,7 @@
特征符描述
cASCII 字符
d十进制整数
e, E, f浮点格式
o无符号八进制值
s细绳
%文字百分比
-

Space 空间

+

Space 空间

awk -F: '{
     printf "%-10s %s\n", $1, $(NF-1)
 }' /etc/passwd | head -n 3
@@ -868,7 +868,7 @@
 bin        /bin
 daemon     /sbin
 
-

Header 标题头

+

Header 标题头

awk -F: 'BEGIN {
     printf "%-10s %s\n", "User", "Home"
     printf "%-10s %s\n", "----","----"}
@@ -882,8 +882,8 @@
 bin        /bin
 daemon     /sbin
 
-

各种各样的

-

正则表达式元字符

+

各种各样的

+

正则表达式元字符

  • \
  • ^
  • @@ -899,7 +899,7 @@
  • ?
-

转义序列

+

转义序列

@@ -934,7 +934,7 @@
:-:-
\b退格
\f换页
\n换行(换行)
\r回车
\t水平选项卡
\v垂直选项卡
-

运行脚本

+

运行脚本

$ cat demo.awk
 #!/usr/bin/awk -f
 BEGIN { x = 23 }
@@ -943,7 +943,7 @@
 $ awk -f demo.awk /etc/passwd
 69
 
-

另见

+

另见

  • GNU awk 用户指南 (www-zeuthen.desy.de)
  • AWK cheatsheet (gist.github.com)
  • @@ -961,8 +961,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -973,7 +971,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/bash.html b/docs/bash.html index 52233f5b..7cb15db5 100644 --- a/docs/bash.html +++ b/docs/bash.html @@ -34,15 +34,15 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

+

Bash 备忘清单

这是开始使用 linux bash shell 脚本的快速参考备忘单。

入门

-

入门

+

hello.sh

#!/bin/bash
 VAR="world"
 echo "Hello $VAR!" # => Hello world!
@@ -50,7 +50,7 @@
 

执行脚本

$ bash hello.sh
 
-

变量

+

变量

NAME="John"
 echo ${NAME}    # => John (变量)
 echo $NAME      # => John (变量)
@@ -59,7 +59,7 @@
 echo "${NAME}!" # => John! (变量)
 NAME = "John"   # => Error (关于空间)
 
-

注释

+

注释

# 这是一个内联 Bash 注释。
 
 : '
@@ -69,7 +69,7 @@
 '
 

多行注释使用 :' 打开和 ' 关闭

-

参数

+

参数

@@ -122,14 +122,14 @@
表示描述
$1$9参数 1 ... 9
$0脚本本身的名称
$1第一个论点
${10}位置参数 10
$#参数数量
$$shell 的进程 id
$*所有论据
$@所有参数,从第一个开始
$-当前选项
$_上一个命令的最后一个参数

见:特殊参数

-

函数

+

函数

get_name() {
     echo "John"
 }
 echo "You are $(get_name)"
 

见:函数

-

条件句

+

条件句

if [[ -z "$string" ]]; then
     echo "String is empty"
 elif [[ -n "$string" ]]; then
@@ -137,7 +137,7 @@
 fi
 

见:条件句

-

大括号扩展

+

大括号扩展

echo {A,B}.js
 

@@ -164,15 +164,15 @@
表示描述
{A,B}A B 相同
{A,B}.jsA.js B.js 相同
{1..5}1 2 3 4 5 相同

见:大括号扩展

-

Shell 执行

+

Shell 执行

# => I'm in /当前/的/路径
 echo "I'm in $(PWD)"
 # Same as:
 echo "I'm in `pwd`"
 

见:命令替换

-

Bash 参数扩展

-

语法

+

Bash 参数扩展

+

语法

@@ -216,7 +216,7 @@
代码描述
${FOO%suffix}删除后缀
${FOO#prefix}删除前缀
${FOO%%suffix}去掉长后缀
${FOO##prefix}删除长前缀
${FOO/from/to}替换第一个匹配项
${FOO//from/to}全部替换
${FOO/%from/to}替换后缀
${FOO/#from/to}替换前缀
-

子字符串

+

子字符串

@@ -235,7 +235,7 @@
表示描述
${FOO:0:3}子串 (位置,长度)
${FOO:(-3):3}从右边开始的子串
-

Length

+

Length

@@ -250,7 +250,7 @@
表示描述
${#FOO}$FOO 的长度
-

默认值

+

默认值

@@ -277,7 +277,7 @@
表示描述
${FOO:-val}$FOO,如果未设置,则为 val
${FOO:=val}如果未设置,则将 $FOO 设置为 val
${FOO:+val}val 如果设置了$FOO
${FOO:?message}如果 $FOO 未设置,则显示消息并退出
-

替代 Substitution

+

替代 Substitution

echo ${food:-Cake}  #=> $food or "Cake"
 
STR="/path/to/foo.cpp"
@@ -290,7 +290,7 @@
 echo ${STR##*/}     # foo.cpp
 echo ${STR/foo/bar} # /path/to/bar.cpp
 
-

切片 Slicing

+

切片 Slicing

name="John"
 echo ${name}           # => John
 echo ${name:0:2}       # => Jo
@@ -304,7 +304,7 @@
 echo ${name:0:length}  # => Jo
 

见:参数扩展

-

基本路径和目录路径

+

基本路径和目录路径

SRC="/path/to/foo.cpp"
 
BASEPATH=${SRC##*/}   
@@ -313,7 +313,7 @@
 DIRPATH=${SRC%$BASEPATH}
 echo $DIRPATH   # => "/path/to/"
 
-

Transform

+

Transform

STR="HELLO WORLD!"
 echo ${STR,}      # => hELLO WORLD!
 echo ${STR,,}     # => hello world!
@@ -326,8 +326,8 @@
 echo "${ARR[@],}" # => hello world
 echo "${ARR[@]^}" # => Hello World
 
-

Bash 数组

-

定义数组

+

Bash 数组

+

定义数组

Fruits=('Apple' 'Banana' 'Orange')
 
 Fruits[0]="Apple"
@@ -344,7 +344,7 @@
 declare -a Numbers=(1 2 3)
 Numbers+=(4 5) # 附加 => 1 2 3 4 5
 
-

索引

+

索引

@@ -391,18 +391,18 @@
:--
${Fruits[0]}第一个元素
${Fruits[-1]}最后一个元素
${Fruits[*]}所有元素
${Fruits[@]}所有元素
${#Fruits[@]}总数
${#Fruits}第一节长度
${#Fruits[3]}第n个长度
${Fruits[@]:3:2}范围
${!Fruits[@]}所有 Key
-

迭代 Iteration

+

迭代 Iteration

Fruits=('Apple' 'Banana' 'Orange')
 for e in "${Fruits[@]}"; do
     echo $e
 done
 
-

With index

+

With index

for i in "${!Fruits[@]}"; do
   printf "%s\t%s\n" "$i" "${Fruits[$i]}"
 done
 
-

操作

+

操作

Fruits=("${Fruits[@]}" "Watermelon")         # 推
 Fruits+=('Watermelon')                       # 也推
@@ -412,7 +412,7 @@
 Fruits=("${Fruits[@]}" "${Veggies[@]}")      # 连接
 lines=(`cat "logfile"`)                      # 从文件中读取
 
-

数组作为参数

+

数组作为参数

function extract()
 {
   local -n myarray=$1
@@ -422,8 +422,8 @@
 Fruits=('Apple' 'Banana' 'Orange')
 extract Fruits 2     # => Orangle
 
-

Bash 字典

-

定义

+

Bash 字典

+

定义

declare -A sounds
 
sounds[dog]="bark"
@@ -431,14 +431,14 @@
 sounds[bird]="tweet"
 sounds[wolf]="howl"
 
-

使用字典

+

使用字典

echo ${sounds[dog]} # Dog's sound
 echo ${sounds[@]}   # All values
 echo ${!sounds[@]}  # All keys
 echo ${#sounds[@]}  # Number of elements
 unset sounds[dog]   # Delete dog
 
-

迭代

+

迭代

for val in "${sounds[@]}"; do
     echo $val
 done
@@ -448,8 +448,8 @@
     echo $key
 done
 
-

Bash 条件句

-

整数条件

+

Bash 条件句

+

整数条件

@@ -500,7 +500,7 @@
条件描述
[[ NUM -eq NUM ]]等于 Equal
[[ NUM -ne NUM ]]不等于 Not equal
[[ NUM -lt NUM ]]少于 Less than
[[ NUM -le NUM ]]小于或等于 Less than or equal
[[ NUM -gt NUM ]]大于 Greater than
[[ NUM -ge NUM ]]大于或等于 Greater than or equal
(( NUM < NUM ))少于
(( NUM <= NUM ))小于或等于
(( NUM > NUM ))比...更棒
(( NUM >= NUM ))大于或等于
-

字符串条件

+

字符串条件

@@ -543,9 +543,9 @@
条件描述
[[ -z STR ]]空字符串
[[ -n STR ]]空字符串
[[ STR == STR ]]平等的
[[ STR = STR ]]相等(同上)
[[ STR < STR ]]小于 (ASCII)
[[ STR > STR ]]大于 (ASCII)
[[ STR != STR ]]不相等
[[ STR =~ STR ]]正则表达式
-

例子

+

例子

-

字符串

+

字符串

if [[ -z "$string" ]]; then
     echo "String is empty"
 elif [[ -n "$string" ]]; then
@@ -554,32 +554,32 @@
     echo "This never happens"
 fi
 
-

组合

+

组合

if [[ X && Y ]]; then
     ...
 fi
 
-

相等

+

相等

if [[ "$A" == "$B" ]]; then
     ...
 fi
 
-

正则表达式

+

正则表达式

if [[ '1. abc' =~ ([a-z]+) ]]; then
     echo ${BASH_REMATCH[1]}
 fi
 
-

更小

+

更小

if (( $a < $b )); then
    echo "$a is smaller than $b"
 fi
 
-

存在

+

存在

if [[ -e "file.txt" ]]; then
     echo "file exists"
 fi
 
-

文件条件

+

文件条件

@@ -635,7 +635,7 @@
条件描述
[[ -e FILE ]]存在
[[ -d FILE ]]目录
[[ -f FILE ]]文件
[[ -h FILE ]]符号链接
[[ -s FILE ]]大小 > 0 字节
[[ -r FILE ]]可读
[[ -w FILE ]]可写
[[ -x FILE ]]可执行文件
[[ f1 -nt f2 ]]f1 比 f2 新
[[ f1 -ot f2 ]]f2 早于 f1
[[ f1 -ef f2 ]]相同的文件
-

更多条件

+

更多条件

@@ -662,7 +662,7 @@
条件描述
[[ -o noclobber ]]如果启用 OPTION
[[ ! EXPR ]]不是 Not
[[ X && Y ]]和 And
[[ X || Y ]]或者 Or
-

逻辑和,或

+

逻辑和,或

if [ "$1" = 'y' -a $2 -gt 0 ]; then
     echo "yes"
 fi
@@ -670,43 +670,43 @@
     echo "no"
 fi
 
-

Bash 循环

-

基本 for 循环

+

Bash 循环

+

基本 for 循环

for i in /etc/rc.*; do
     echo $i
 done
 
-

类似 C 的 for 循环

+

类似 C 的 for 循环

for ((i = 0 ; i < 100 ; i++)); do
     echo $i
 done
 
-

范围

+

范围

for i in {1..5}; do
     echo "Welcome $i"
 done
 
-

具有步长

+

具有步长

for i in {5..50..5}; do
     echo "Welcome $i"
 done
 
-

自动递增

+

自动递增

i=1
 while [[ $i -lt 4 ]]; do
     echo "Number: $i"
     ((i++))
 done
 
-

自动递增

+

自动递增

i=3
 while [[ $i -gt 0 ]]; do
     echo "Number: $i"
     ((i--))
 done
 
-

Continue

+

Continue

for number in $(seq 1 3); do
     if [[ $number == 2 ]]; then
         continue;
@@ -714,7 +714,7 @@
     echo "$number"
 done
 
-

Break

+

Break

for number in $(seq 1 3); do
     if [[ $number == 2 ]]; then
         # Skip entire rest of loop.
@@ -724,30 +724,30 @@
     echo "$number"
 done
 
-

Until

+

Until

count=0
 until [ $count -gt 10 ]; do
     echo "$count"
     ((count++))
 done
 
-

永远

+

永远

while true; do
     # here is some code.
 done
 
-

永远(简写)

+

永远(简写)

while :; do
     # here is some code.
 done
 
-

正在读取行

+

正在读取行

cat file.txt | while read line; do
     echo $line
 done
 
-

Bash 函数

-

定义函数

+

Bash 函数

+

定义函数

myfunc() {
   echo "hello $1"
 }
@@ -759,7 +759,7 @@
 
myfunc "John"
 
-

返回值

+

返回值

myfunc() {
     local myresult='some value'
     echo $myresult
@@ -767,7 +767,7 @@
 
result="$(myfunc)"
 
-

正在引发错误

+

正在引发错误

myfunc() {
     return 1
 }
@@ -778,9 +778,9 @@
     echo "failure"
 fi
 
-

Bash 选项

+

Bash 选项

-

选项

+

选项

# 避免覆盖文件
 # (echo "hi" > foo)
 set -o noclobber
@@ -795,7 +795,7 @@
 # 公开未设置的变量
 set -o nounset
 
-

全局选项

+

全局选项

# 不匹配的 glob 被删除
 # ('*.foo' => '')
 shopt -s nullglob   
@@ -814,9 +814,9 @@
 # ('lib/**/*.rb' => 'lib/a/b/c.rb')
 shopt -s globstar   
 
-

Bash 历史

+

Bash 历史

-

命令

+

命令

@@ -839,7 +839,7 @@
命令描述
history显示历史
sudo !!使用 sudo 运行上一个命令
shopt -s histverify不要立即执行扩展结果
-

表达式

+

表达式

@@ -870,7 +870,7 @@
表达式描述
!$展开最新命令的最后一个参数
!*展开最新命令的所有参数
!-n展开第 n 个最近的命令
!n展开历史中的第 n 个命令
!<command>展开最近调用的命令 <command>
-

操作

+

操作

@@ -902,7 +902,7 @@
代码描述
!!再次执行最后一条命令
!!:s/<FROM>/<TO>/在最近的命令中将第一次出现的 <FROM> 替换为 <TO>
!!:gs/<FROM>/<TO>/在最近的命令中将所有出现的 <FROM> 替换为 <TO>
!$:t仅从最近命令的最后一个参数扩展基本名称
!$:h仅从最近命令的最后一个参数展开目录

!!!$ 可以替换为任何有效的扩展。

-

切片 Slices

+

切片 Slices

@@ -934,21 +934,21 @@
代码描述
!!:n仅扩展最近命令中的第 n 个标记(命令为 0;第一个参数为 1
!^从最近的命令展开第一个参数
!$从最近的命令中展开最后一个标记
!!:n-m从最近的命令扩展令牌范围
!!:n-$从最近的命令中将第 n 个标记展开到最后

!! 可以替换为任何有效的扩展,即 !cat!-2!42 等。

-

各种各样的

-

数值计算

+

各种各样的

+

数值计算

$((a + 200))      # Add 200 to $a
 
$(($RANDOM%200))  # Random number 0..199
 
-

子 shell

+

子 shell

(cd somedir; echo "I'm now in $PWD")
 pwd # still in first directory
 
-

检查命令

+

检查命令

command -V cd
 #=> "cd is a function/alias/whatever"
 
-

重定向

+

重定向

python hello.py > output.txt   # 标准输出到(文件)
 python hello.py >> output.txt  # 标准输出到(文件),追加
@@ -959,13 +959,13 @@
 
python hello.py < foo.txt      # 将 foo.txt 提供给 python 的标准输入
 
-

来源相对

+

来源相对

source "${0%/*}/../share/foo.sh"
 
-

脚本目录

+

脚本目录

DIR="${0%/*}"
 
-

Case/switch

+

Case/switch

case "$1" in
     start | up)
     vagrant up
@@ -975,7 +975,7 @@
     ;;
 esac
 
-

陷阱错误

+

陷阱错误

trap 'echo Error at about $LINENO' ERR
 
@@ -986,7 +986,7 @@ set -o errtrace trap traperr ERR
-

printf

+

printf

printf "Hello %s, I'm %s" Sven Olga
 #=> "Hello Sven, I'm Olga
 
@@ -996,7 +996,7 @@
 printf "Print a float: %f" 2
 #=> "Print a float: 2.000000"
 
-

获取选项

+

获取选项

while [[ "$1" =~ ^- && ! "$1" == "--" ]]; do case $1 in
     -V | --version )
@@ -1012,13 +1012,13 @@
 esac; shift; done
 if [[ "$1" == '--' ]]; then shift; fi
 
-

检查命令的结果

+

检查命令的结果

if ping -c 1 google.com; then
     echo "看来您的互联网连接正常"
 fi
 
-

特殊变量

+

特殊变量

@@ -1047,13 +1047,13 @@
表达式描述
$?最后一个任务的退出状态
$!最后一个后台任务的 PID
$$shell PID
$0shell 脚本的文件名

特殊参数

-

grep 检查

+

grep 检查

if grep -q 'foo' ~/.bash_history; then
     echo "您过去似乎输入过“foo”"
 fi
 
-

反斜杠转义

+

反斜杠转义

  •  
  • @@ -1082,42 +1082,42 @@

使用 \ 转义这些特殊字符

-

Heredoc

+

Heredoc

cat <<END
 hello world
 END
 
-

转到上一个目录

+

转到上一个目录

pwd # /home/user/foo
 cd bar/
 pwd # /home/user/foo/bar
 cd -
 pwd # /home/user/foo
 
-

读取输入

+

读取输入

echo -n "Proceed? [y/n]: "
 read ans
 echo $ans
 
read -n 1 ans    # 只有一个字符
 
-

条件执行

+

条件执行

git commit && git push
 git commit || echo "Commit failed"
 
-

严格模式

+

严格模式

set -euo pipefail
 IFS=$'\n\t'
 

参见:非官方 bash 严格模式

-

可选参数

+

可选参数

args=("$@")
 args+=(foo)
 args+=(bar)
 echo "${args[@]}"
 

将参数放入数组中,然后追加

-

另见

+

另见

  • Shell 教程 (jaywcjlove.github.io)
  • Devhints (devhints.io)
  • @@ -1141,8 +1141,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -1153,7 +1151,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/c.html b/docs/c.html index e4a1bd5f..cde324e9 100644 --- a/docs/c.html +++ b/docs/c.html @@ -34,14 +34,14 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

+

C 备忘清单

提供基本语法和方法的 C 快速参考备忘单。

入门

-

入门

+

hello.c

#include <stdio.h>
 
@@ -57,7 +57,7 @@
 
$ ./hello
 # 输出 => Hello World
 
-

变量

+

变量

int myNum = 15;
 
@@ -76,20 +76,20 @@
 // 声明多个变量
 int x = 5, y = 6, z = 50;
 
-

常量 Constants

+

常量 Constants

const int minutesPerHour = 60;
 const float PI = 3.14;
 

最佳实践

const int BIRTHYEAR = 1980;
 
-

注释

+

注释

// 这是一个注释
 printf("Hello World!"); // 这是一个注释
 /* 多行注释,上面的代码将打印出 Hello World!
 到屏幕上,真是太棒了 */
 
-

打印文本

+

打印文本

printf("I am learning C.");
 int testInteger = 5;
 printf("Number = %d", testInteger);
@@ -117,7 +117,7 @@
 printf("a=%hX, b=%X, c=%lX\n", a, b, c);
 // 输出 => a=56, b=5CB, c=1DAB83
 
-

控制空格数

+

控制空格数

int a1=20, a2=345, a3=700;
 int b1=56720, b2=9999, b3=20098;
 int c1=233, c2=205, c3=1;
@@ -135,7 +135,7 @@
 34        0         23   
 

%-9d 中,d 表示以 10 进制输出,9 表示最少占 9 个字符的宽度,宽度不足以空格补齐,- 表示左对齐

-

字符串 Strings

+

字符串 Strings

char greetings[] = "Hello World!";
 printf("%s", greetings);
 
@@ -157,7 +157,7 @@ // 输出 "Hell!"

C 没有 String 类型,使用 char 类型并创建一个字符 array

-

条件判断

+

条件判断

int time = 20;
 if (time < 18) {
@@ -176,12 +176,12 @@
 }
 // 输出 -> "晚上好!"
 
-

三元运算符

+

三元运算符

int time = 20;
 (time < 18) ? printf("再会!") : printf("晚上好!");
 
-

Switch

+

Switch

int day = 4;
 
 switch (day) {
@@ -192,7 +192,7 @@
 }
 // 输出 -> "周四" (day 4)
 
-

While 循环

+

While 循环

int i = 0;
 
 while (i < 5) {
@@ -201,7 +201,7 @@
 }
 

注意:不要忘记增加条件中使用的变量,否则循环永远不会结束,成为“死循环”!

-

Do/While 循环

+

Do/While 循环

int i = 0;
 
 do {
@@ -209,14 +209,14 @@
   i++;
 } while (i < 5);
 
-

For 循环

+

For 循环

int i;
 
 for (i = 0; i < 5; i++) {
   printf("%d\n", i);
 }
 
-

跳出循环 Break/Continue

+

跳出循环 Break/Continue

int i;
 
@@ -238,7 +238,7 @@
 }
 

示例跳过 4 的值

-

While Break 示例

+

While Break 示例

int i = 0;
 
 while (i < 10) {
@@ -249,7 +249,7 @@
   i++;
 }
 
-

While continue 示例

+

While continue 示例

int i = 0;
 
 while (i < 10) {
@@ -260,7 +260,7 @@
   printf("%d\n", i);
 }
 
-

数组 Arrays

+

数组 Arrays

int myNumbers[] = {25, 50, 75, 100};
 printf("%d", myNumbers[0]);
@@ -289,7 +289,7 @@
 myNumbers[2] = 75;
 myNumbers[3] = 100;
 
-

枚举 Enum

+

枚举 Enum

enum week { Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun };
 
@@ -304,7 +304,7 @@ // 或者 enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun } a = Mon, b = Wed, c = Sat; -

枚举示例应用

+

枚举示例应用

enum week {Mon = 1, Tues, Wed, Thurs} day;
 
 scanf("%d", &day);
@@ -317,7 +317,7 @@
   default:    puts("Error!");
 }
 
-

用户输入

+

用户输入

// 创建一个整数变量来存储我们从用户那里得到的数字
 int myNum;
 
@@ -330,7 +330,7 @@
 // 输出用户输入的数字
 printf("您输入的数字: %d", myNum);
 
-

用户输入字符串

+

用户输入字符串

// 创建一个字符串
 char firstName[30];
 // 要求用户输入一些文本
@@ -340,7 +340,7 @@
 // 输出文本
 printf("Hello %s.", firstName);
 
-

内存地址

+

内存地址

创建变量时,会为该变量分配一个内存地址

int myAge = 43;
 
@@ -348,14 +348,14 @@
 // 输出:0x7ffe5367e044
 

要访问它,请使用引用运算符 (&)

-

创建指针

+

创建指针

int myAge = 43;      // 一个 int 变量
 printf("%d", myAge); // 输出 myAge(43)的值
 
 // 输出 myAge 的内存地址(0x7ffe5367e044)
 printf("%p", &myAge);
 
-

指针变量

+

指针变量

int myAge = 43;            // 一个 int 变量
 int* ptr = &myAge;         // 名为 ptr 的指针变量,用于存储 myAge 的地址
@@ -366,7 +366,7 @@
 
 printf("%p\n", ptr);       // 用指针(0x7ffe5367e044)输出myAge的内存地址
 
-

取消引用

+

取消引用

int myAge = 43;     // 变量声明
 int* ptr = &myAge;  // 指针声明
 
@@ -376,8 +376,8 @@
 // 取消引用:用指针输出 myAge 的值 (43)
 printf("%d\n", *ptr);
 
-

运算符

-

算术运算符

+

运算符

+

算术运算符

int myNum = 100 + 50;
 int sum1 = 100 + 50;    // 150 (100 + 50)
 int sum2 = sum1 + 250;  // 400 (150 + 250)
@@ -438,7 +438,7 @@
 
 
 
OperatorNameDescriptionExample
+将两个值相加x + y
-从另一个值中减去一个值x - y
*将两个值相乘x * y
/将一个值除以另一个x / y
%取模返回除法余数x % y
++增量将变量的值增加 1++
--乘量将变量的值减 1--x
-

赋值运算符

+

赋值运算符

@@ -505,7 +505,7 @@
符号示例如同
=x = 5x = 5
+=x += 3x = x + 3
-=x -= 3x = x - 3
*=x *= 3x = x * 3
/=x /= 3x = x / 3
%=x %= 3x = x % 3
&=x &= 3x = x & 3
|=x |= 3x = x | 3
^=x ^= 3x = x ^ 3
>>=x >>= 3x = x >> 3
<<=x <<= 3x = x << 3
-

比较运算符

+

比较运算符

int x = 5;
 int y = 3;
 
@@ -555,7 +555,7 @@
 
 
符号名称示例
==等于x == y
!=不等于x != y
>大于x > y
<小于x < y
>=大于或等于x >= y
<=小于或等于x <= y

比较运算符用于比较两个值

-

逻辑运算符

+

逻辑运算符

@@ -587,7 +587,7 @@
符号名称说明示例
&&逻辑如果两个语句都为真,则返回真x < 5 && x < 10
||逻辑如果其中一个语句为真,则返回真x < 5 || x < 4
!逻辑反转结果,如果结果为真则返回假!(x < 5 && x < 10)
-

运算符示例

+

运算符示例

unsigned int a = 60; /* 60 = 0011 1100 */  
 unsigned int b = 13; /* 13 = 0000 1101 */
@@ -607,7 +607,7 @@
 c = a >> 2;     /* 15 = 0000 1111 */
 printf("Line 6 - c 的值是 %d\n", c );
 
-

位运算符

+

位运算符

@@ -650,8 +650,8 @@
运算符描述实例
&按位与操作,按二进制位进行"与"运算(A & B) 将得到 12 即为 0000 1100
|按位或运算符,按二进制位进行"或"运算(A | B) 将得到 61 即为 0011 1101
^异或运算符,按二进制位进行"异或"运算(A ^ B) 将得到 49 即为 0011 0001
~取反运算符,按二进制位进行"取反"运算(~A) 将得到 -61 即为 1100 0011
<<二进制左移运算符A << 2 将得到 240 即为 1111 0000
>>二进制右移运算符A >> 2 将得到 15 即为 0000 1111
-

数据类型 Data Types

-

基本数据类型

+

数据类型 Data Types

+

基本数据类型

@@ -755,7 +755,7 @@
数据类型大小 Size范围 Range描述 Description
char1 字节−128 ~ 127单个字符/字母/数字/ASCII
signed char1 字节−128 ~ 127-
unsigned char1 字节0 ~ 255-
int24 字节−32,768 ~ 32,767存储整数
signed int2 字节−32,768 ~ 32,767
unsigned int2 字节0 ~ 65,535
short int2 字节−32,768 ~ 32,767
signed short int2 字节−32,768 ~ 32,767
unsigned short int2 字节0 ~ 65,535
long int4 字节-2,147,483,648 ~ 2,147,483,647
signed long int4 字节-2,147,483,648 ~ 2,147,483,647
unsigned long int4 字节0 ~ 4,294,967,295
float4 字节
double8 字节
long double10 字节
-

数据类型

+

数据类型

// 创建变量
 int myNum = 5;             // 整数
 float myFloatNum = 5.99;   // 浮点数
@@ -807,7 +807,7 @@
 
 
 
数据类型说 明
char字符型
short短整型
int整型
long长整型
float单精度浮点型
double双精度浮点型
void无类型
-

基本格式说明符

+

基本格式说明符

@@ -838,7 +838,7 @@
格式说明符数据类型
%d%iint 整数
%ffloat 单精度的十进制类型
%lfdouble 高精度浮点数据或数字
%cchar 字符
%s用于 strings 字符串
-

基本格式说明符

+

基本格式说明符

@@ -869,7 +869,7 @@
shortintlong
8 进制%ho%o%lo
10 进制%hd%d%ld
16 进制%hx / %hX%x / %X%lx / %lX
-

数据格式示例

+

数据格式示例

int myNum = 5;
 float myFloatNum = 5.99; // 浮点数
 char myLetter = 'D';     // 字符串
@@ -878,8 +878,8 @@
 printf("%f\n", myFloatNum);
 printf("%c\n", myLetter);
 
-

预处理器

-

预处理器指令

+

预处理器

+

预处理器指令

@@ -944,7 +944,7 @@ #undef FILE_SIZE #define FILE_SIZE 42 // 取消已定义并定义为 42 -

预定义宏

+

预定义宏

@@ -978,7 +978,7 @@
描述
__DATE__当前日期,一个以 "MMM DD YYYY" 格式表示的字符常量
__TIME__当前时间,一个以 "HH:MM:SS" 格式表示的字符常量
__FILE__这会包含当前文件名,一个字符串常量
__LINE__这会包含当前行号,一个十进制常量
__STDC__当编译器以 ANSI 标准编译时,则定义为 1

ANSI C 定义了许多宏,您可以使用这些宏,但是不能直接修改这些预定义的宏

-

预定义宏示例

+

预定义宏示例

#include <stdio.h>
 
 int main() {
@@ -989,13 +989,13 @@
   printf("ANSI :%d\n", __STDC__);
 }
 
-

宏延续运算符(\)

+

宏延续运算符(\)

一个宏通常写在一个单行上。

#define  message_for(a, b)  \
     printf(#a " 和 " #b ": 我们爱你!\n")
 

如果宏太长,一个单行容纳不下,则使用宏延续运算符 \

-

字符串常量化运算符(#)

+

字符串常量化运算符(#)

#include <stdio.h>
 
 #define  message_for(a, b)  \
@@ -1010,7 +1010,7 @@
 
Carole 和 Debra: 我们爱你!
 

需要把一个宏的参数转换为字符串常量时,使用字符串常量化运算符 #

-

标记粘贴运算符(##)

+

标记粘贴运算符(##)

#include <stdio.h>
 
 #define tokenpaster(n) printf ("token" #n " = %d", token##n)
@@ -1021,7 +1021,7 @@
   return 0;
 }
 
-

defined() 运算符

+

defined() 运算符

#include <stdio.h>
 
 #if !defined (MESSAGE)
@@ -1033,7 +1033,7 @@
   return 0;
 }
 
-

参数化的宏

+

参数化的宏

int square(int x) {
    return x * x;
 }
@@ -1050,8 +1050,8 @@
    return 0;
 }
 
-

函数

-

函数声明和定义

+

函数

+

函数声明和定义

int main() {
   printf("Hello World!");
@@ -1080,7 +1080,7 @@
   printf("晚上好!");
 }
 
-

调用函数

+

调用函数

// 创建函数
 void myFunction() {
   printf("晚上好!");
@@ -1093,7 +1093,7 @@
 // 输出 -> "晚上好!"
 // 输出 -> "晚上好!"
 
-

函数参数

+

函数参数

void myFunction(char name[]) {
   printf("Hello %s\n", name);
 }
@@ -1105,7 +1105,7 @@
 // Hello Liam
 // Hello Jenny
 
-

多个参数

+

多个参数

void myFunction(char name[], int age) {
   printf("你好 %s 你 %d 岁了。\n",name,age);
 }
@@ -1117,7 +1117,7 @@
 // 你好 Liam 你 3 岁了。
 // 你好 Jenny 你 14 岁了。
 
-

返回值

+

返回值

int myFunction(int x) {
   return 5 + x;
@@ -1144,7 +1144,7 @@
 // 结果: 8 (5 + 3)
 // 结果 = 8 (5 + 3)
 
-

递归示例

+

递归示例

int sum(int k);
 int main() {
   int result = sum(10);
@@ -1160,7 +1160,7 @@
   }
 }
 
-

数学函数

+

数学函数

#include <math.h>
 printf("%f", sqrt(16));   // 平方根
 printf("%f", ceil(1.4));  // 四舍五入 (入)
@@ -1180,8 +1180,8 @@
 
  • tan(x) 角度的正切
  • -

    Structures 结构

    -

    创建结构

    +

    Structures 结构

    +

    创建结构

    struct MyStructure {  // 结构声明
       int myNum;     // 成员(int 变量)
       char myLetter; // 成员(char 变量)
    @@ -1198,7 +1198,7 @@
       return 0;
     }
     
    -

    结构中的字符串

    +

    结构中的字符串

    struct myStructure {
       int myNum;
       char myLetter;
    @@ -1214,7 +1214,7 @@
     }
     

    使用 strcpy 函数为字符串赋值

    -

    访问结构成员

    +

    访问结构成员

    // 创建一个名为 myStructure 的结构
     struct myStructure {
    @@ -1248,7 +1248,7 @@
     s2.myNum = 20;
     s2.myLetter = 'C';
     
    -

    复制结构

    +

    复制结构

    struct myStructure s1 = {
       13, 'B', "Some text"
     };
    @@ -1257,7 +1257,7 @@
     s2 = s1;
     

    示例中,将 s1 的值复制到 s2

    -

    修改值

    +

    修改值

    // 创建一个结构变量并为其赋值
     struct myStructure s1 = {
       13, 'B'
    @@ -1270,8 +1270,8 @@
         s1.myNum,
         s1.myLetter);
     
    -

    文件处理

    -

    文件处理函数

    +

    文件处理

    +

    文件处理函数

    @@ -1327,7 +1327,7 @@
    函数描述 Description
    fopen()打开新文件或现有文件
    fprintf()将数据写入文件
    fscanf()从文件中读取数据
    fputc()将一个字符写入文件
    fgetc()从文件中读取一个字符
    fclose()关闭文件
    fseek()将文件指针设置到给定位置
    fputw()将整数写入文件
    fgetw()从文件中读取一个整数
    ftell()返回当前位置
    rewind()将文件指针设置为文件的开头

    C 库中有许多函数可以打开/读取/写入/搜索关闭文件

    -

    打开模式参数

    +

    打开模式参数

    @@ -1386,7 +1386,7 @@
    模式 Mode描述 Description
    r读取模式打开一个文本文件,允许读取文件
    w模式打开一个文本文件,允许写入文件
    a追加模式打开一个文本文件
    如果文件不存在,则会创建一个新文件
    r+读写模式打开一个文本文件,允许读写文件
    w+读写模式打开一个文本文件,允许读写文件
    a+读写模式打开一个文本文件,允许读写文件
    rb读取模式打开二进制文件
    wb写入模式打开二进制文件
    ab追加模式打开二进制文件
    rb+读写模式打开二进制文件
    wb+读写模式打开二进制文件
    ab+读写模式打开二进制文件
    -

    打开文件:fopen()

    +

    打开文件:fopen()

    #include<stdio.h>
     
     void main( ) {
    @@ -1404,7 +1404,7 @@
     }
     

    对文件执行所有操作后,必须关闭 fclose() 该文件

    -

    写入文件:fprintf()

    +

    写入文件:fprintf()

    #include <stdio.h>
     
     main() {
    @@ -1415,7 +1415,7 @@
       fclose(fp); // 关闭文件  
     }  
     
    -

    读取文件:fscanf()

    +

    读取文件:fscanf()

    #include <stdio.h>  
     main(){
       FILE *fp;
    @@ -1427,7 +1427,7 @@
       fclose(fp);
     }
     
    -

    写入文件:fputc()

    +

    写入文件:fputc()

    #include <stdio.h>
     
     main(){
    @@ -1437,7 +1437,7 @@
       fclose(fp);    // 关闭文件
     }
     
    -

    读取文件:fgetc()

    +

    读取文件:fgetc()

    #include<stdio.h>
     #include<conio.h>
     void main() {
    @@ -1452,7 +1452,7 @@
       getch();
     }
     
    -

    写入文件:fputs()

    +

    写入文件:fputs()

    #include<stdio.h>
     #include<conio.h>
     
    @@ -1465,7 +1465,7 @@
       getch();
     }
     
    -

    读取文件:fgets()

    +

    读取文件:fgets()

    #include<stdio.h>
     #include<conio.h>
     
    @@ -1480,7 +1480,7 @@
       getch();
     }
     
    -

    fseek()

    +

    fseek()

    #include <stdio.h>
     void main(){
       FILE *fp;
    @@ -1494,7 +1494,7 @@
     }
     

    将文件指针设置到给定位置

    -

    rewind()

    +

    rewind()

    #include<stdio.h>
     #include<conio.h>
     void main(){
    @@ -1515,7 +1515,7 @@
     // 输出
     // Hello World!Hello World!
     
    -

    ftell()

    +

    ftell()

    #include <stdio.h>
     #include <conio.h>
     
    @@ -1535,8 +1535,8 @@
     // 输出
     // 文件大小: 18 bytes
     
    -

    杂项

    -

    Docker 运行环境

    +

    杂项

    +

    Docker 运行环境

    • 安装 Docker
    • @@ -1561,7 +1561,7 @@
    -

    另见

    +

    另见

    @@ -1578,8 +1578,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -1590,7 +1588,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/chmod.html b/docs/chmod.html index 6c5e9eb4..c05a0757 100644 --- a/docs/chmod.html +++ b/docs/chmod.html @@ -34,25 +34,25 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    Chmod 备忘清单

    +

    Chmod 备忘清单

    这份快速参考备忘单提供了文件权限的简要概述,以及 chmod 命令的操作

    入门

    -

    入门

    +

    语法

    $ chmod [options] <permissions> <file> 
     
    -

    示例

    +

    示例

    $ chmod 755 foo.txt
     $ chmod +x quickref.py
     $ chmod u-x quickref.py
     $ chmod u=rwx,g=rx,o= quickref.sh
     
    -

    递归更改文件和目录

    +

    递归更改文件和目录

    $ chmod -R 755 my_directory
     

    chmod 命令代表“更改模式”

    -

    Chmod 生成器

    +

    Chmod 生成器

    权限:
    @@ -90,7 +90,7 @@
     UserGroupOther
    (Read)
    (Write)
    执行 (Execute)

    Chmod 生成器允许您以数字和符号的形式快速、直观地生成权限。

    -

    通用权限

    +

    通用权限

    @@ -147,12 +147,12 @@
    命令s含义
    400r--------仅所有者可读
    500r-x------避免改变
    600rw-------可由用户更改
    644rw-r--r--由用户读取和更改
    660rw-rw----可由用户和组更改
    700rwx------只有用户具有完全访问权限
    755rwxr-xr-x只能由用户更改
    775rwxrwxr-x群组共享模式
    777rwxrwxrwx每个人都可以做任何事
    -

    解释

    +

    解释

    $ ls -l
     -rw-r--r--  1 root root 3 Jun 29 15:35 a.log
     drwxr-xr-x  2 root root 2 Jun 30 18:06 dir
     
    -

    dir 的权限分析

    +

    dir 的权限分析

    d  rwx  r-x  r-x
     ┬  ─┬─  ─┬─  ─┬─  
     ┆   ┆    ┆    ┆  
    @@ -161,7 +161,7 @@
     ┆   ╰─────────── 2. User |7 (4+2+1)
     ╰─────────────── 1. File Type | directory
     
    -

    权限模式

    +

    权限模式

    @@ -224,7 +224,7 @@
    权限描述八进制十进制
    ---没有权限0000 (0+0+0)
    --x执行0011 (0+0+1)
    -w-0102 (0+2+0)
    -wx执行和写入0113 (0+2+1)
    r--1004 (4+0+0)
    r-x读取和执行1015 (4+0+1)
    rw-读和写1106 (4+2+0)
    rwx读取、写入和执行1117 (4+2+1)
    -

    Objects

    +

    Objects

    @@ -252,7 +252,7 @@
    谁(缩写)含义
    u用户
    g
    o其它
    a全部,和 ugo 一样
    -

    权限

    +

    权限

    @@ -285,7 +285,7 @@
    缩写权限
    r4
    w2
    x执行1
    -没有权限0
    -

    文件类型

    +

    文件类型

    @@ -309,8 +309,8 @@
    缩写文件类型
    d目录
    -常规文件
    l符号链接
    -

    Chmod 示例

    -

    操作符

    +

    Chmod 示例

    +

    操作符

    @@ -333,22 +333,22 @@
    SymbolDescription
    +添加
    -删除
    =设置
    -

    chmod 600

    +

    chmod 600

    $ chmod 600 example.txt
     $ chmod u=rw,g=,o= example.txt
     $ chmod a+rwx,u-x,g-rwx,o-rwx example.txt
     
    -

    chmod 664

    +

    chmod 664

    $ chmod 664 example.txt
     $ chmod u=rw,g=rw,o=r example.txt
     $ chmod a+rwx,u-x,g-x,o-wx example.txt
     
    -

    chmod 777

    +

    chmod 777

    $ chmod 777 example.txt
     $ chmod u=rwx,g=rwx,o=rwx example.txt
     $ chmod a=rwx example.txt
     
    -

    符号模式

    +

    符号模式

    拒绝所有人的执行权限。

    $ chmod a-x chmodExampleFile.txt
    @@ -365,7 +365,7 @@
     

    允许每个人读取、写入和执行文件并打开设置的 group-ID。

    $ chmod =rwx,g+s chmodExampleScript.sh
     
    -

    删除权限

    +

    删除权限

    要删除赋予文件的读写权限,请使用以下语法:

    $ chmod o-rw example.txt
    @@ -379,37 +379,37 @@
     

    但是,如果你想删除组和其他人的所有权限,你可以使用 go= 来代替:

    $ chmod go= example.txt
     
    -

    可执行文件

    +

    可执行文件

    $ chmod +x ~/example.py
     $ chmod u+x ~/example.py
     $ chmod a+x ~/example.py
     
    -

    chmod 754

    +

    chmod 754

    $ chmod 754 foo.sh
     $ chmod u=rwx,g=rx,o=r foo.sh
     
    -

    Chmod 实践

    -

    SSH 权限

    +

    Chmod 实践

    +

    SSH 权限

    $ chmod 700 ~/.ssh
     $ chmod 600 ~/.ssh/authorized_keys
     $ chmod 600 ~/.ssh/id_rsa
     $ chmod 600 ~/.ssh/id_rsa.pub
     $ chmod 400 /path/to/access_key.pem
     
    -

    网络权限

    +

    网络权限

    $ chmod -R 644 /var/www/html/
     $ chmod 644 .htaccess
     $ chmod 644 robots.txt
     $ chmod 755 /var/www/uploads/
     $ find /var/www/html -type d -exec chmod 755 {} \;
     
    -

    批量更改

    +

    批量更改

    $ chmod -R 644 /your_path
     $ find /path -type d -exec chmod 755 {} \;
     $ find /path -type f -exec chmod 644 {} \;
     

    请参阅:命令替换

    -

    另见

    +

    另见

    @@ -650,8 +650,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -662,7 +660,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/colors-named.html b/docs/colors-named.html index f831d2c5..72151d1d 100644 --- a/docs/colors-named.html +++ b/docs/colors-named.html @@ -34,15 +34,15 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    Colors Named 备忘清单

    CSS 定义了一大组命名颜色,以便可以更轻松地编写和阅读常用颜色,这里列出了它的颜色名称/Hex rgb/十进制 rgb 数据

    Named Colors

    -

    Named Colors

    +
    @@ -945,9 +945,9 @@
    颜色颜色名称Hex RGB十进制 RGB
    aliceblue#f0f8ff240 248 255
    antiquewhite#faebd7250 235 215
    aqua#00ffff0 255 255
    aquamarine#7fffd4127 255 212
    azure#f0ffff240 255 255
    beige#f5f5dc245 245 220
    bisque#ffe4c4255 228 196
    black#0000000 0 0
    blanchedalmond#ffebcd255 235 205
    blue#0000ff0 0 255
    blueviolet#8a2be2138 43 226
    brown#a52a2a165 42 42
    burlywood#deb887222 184 135
    cadetblue#5f9ea095 158 160
    chartreuse#7fff00127 255 0
    chocolate#d2691e210 105 30
    coral#ff7f50255 127 80
    cornflowerblue#6495ed100 149 237
    cornsilk#fff8dc255 248 220
    crimson#dc143c220 20 60
    cyan#00ffff0 255 255
    darkblue#00008b0 0 139
    darkcyan#008b8b0 139 139
    darkgoldenrod#b8860b184 134 11
    darkgray#a9a9a9169 169 169
    darkgreen#0064000 100 0
    darkgrey#a9a9a9169 169 169
    darkkhaki#bdb76b189 183 107
    darkmagenta#8b008b139 0 139
    darkolivegreen#556b2f85 107 47
    darkorange#ff8c00255 140 0
    darkorchid#9932cc153 50 204
    darkred#8b0000139 0 0
    darksalmon#e9967a233 150 122
    darkseagreen#8fbc8f143 188 143
    darkslateblue#483d8b72 61 139
    darkslategray#2f4f4f47 79 79
    darkslategrey#2f4f4f47 79 79
    darkturquoise#00ced10 206 209
    darkviolet#9400d3148 0 211
    deeppink#ff1493255 20 147
    deepskyblue#00bfff0 191 255
    dimgray#696969105 105 105
    dimgrey#696969105 105 105
    dodgerblue#1e90ff30 144 255
    firebrick#b22222178 34 34
    floralwhite#fffaf0255 250 240
    forestgreen#228b2234 139 34
    fuchsia#ff00ff255 0 255
    gainsboro#dcdcdc220 220 220
    ghostwhite#f8f8ff248 248 255
    gold#ffd700255 215 0
    goldenrod#daa520218 165 32
    gray#808080128 128 128
    green#0080000 128 0
    greenyellow#adff2f173 255 47
    grey#808080128 128 128
    honeydew#f0fff0240 255 240
    hotpink#ff69b4255 105 180
    indianred#cd5c5c205 92 92
    indigo#4b008275 0 130
    ivory#fffff0255 255 240
    khaki#f0e68c240 230 140
    lavender#e6e6fa230 230 250
    lavenderblush#fff0f5255 240 245
    lawngreen#7cfc00124 252 0
    lemonchiffon#fffacd255 250 205
    lightblue#add8e6173 216 230
    lightcoral#f08080240 128 128
    lightcyan#e0ffff224 255 255
    lightgoldenrodyellow#fafad2250 250 210
    lightgray#d3d3d3211 211 211
    lightgreen#90ee90144 238 144
    lightgrey#d3d3d3211 211 211
    lightpink#ffb6c1255 182 193
    lightsalmon#ffa07a255 160 122
    lightseagreen#20b2aa32 178 170
    lightskyblue#87cefa135 206 250
    lightslategray#778899119 136 153
    lightslategrey#778899119 136 153
    lightsteelblue#b0c4de176 196 222
    lightyellow#ffffe0255 255 224
    lime#00ff000 255 0
    limegreen#32cd3250 205 50
    linen#faf0e6250 240 230
    magenta#ff00ff255 0 255
    maroon#800000128 0 0
    mediumaquamarine#66cdaa102 205 170
    mediumblue#0000cd0 0 205
    mediumorchid#ba55d3186 85 211
    mediumpurple#9370db147 112 219
    mediumseagreen#3cb37160 179 113
    mediumslateblue#7b68ee123 104 238
    mediumspringgreen#00fa9a0 250 154
    mediumturquoise#48d1cc72 209 204
    mediumvioletred#c71585199 21 133
    midnightblue#19197025 25 112
    mintcream#f5fffa245 255 250
    mistyrose#ffe4e1255 228 225
    moccasin#ffe4b5255 228 181
    navajowhite#ffdead255 222 173
    navy#0000800 0 128
    oldlace#fdf5e6253 245 230
    olive#808000128 128 0
    olivedrab#6b8e23107 142 35
    orange#ffa500255 165 0
    orangered#ff4500255 69 0
    orchid#da70d6218 112 214
    palegoldenrod#eee8aa238 232 170
    palegreen#98fb98152 251 152
    paleturquoise#afeeee175 238 238
    palevioletred#db7093219 112 147
    papayawhip#ffefd5255 239 213
    peachpuff#ffdab9255 218 185
    peru#cd853f205 133 63
    pink#ffc0cb255 192 203
    plum#dda0dd221 160 221
    powderblue#b0e0e6176 224 230
    purple#800080128 0 128
    rebeccapurple#663399102 51 153
    red#ff0000255 0 0
    rosybrown#bc8f8f188 143 143
    royalblue#4169e165 105 225
    saddlebrown#8b4513139 69 19
    salmon#fa8072250 128 114
    sandybrown#f4a460244 164 96
    seagreen#2e8b5746 139 87
    seashell#fff5ee255 245 238
    sienna#a0522d160 82 45
    silver#c0c0c0192 192 192
    skyblue#87ceeb135 206 235
    slateblue#6a5acd106 90 205
    slategray#708090112 128 144
    slategrey#708090112 128 144
    snow#fffafa255 250 250
    springgreen#00ff7f0 255 127
    steelblue#4682b470 130 180
    tan#d2b48c210 180 140
    teal#0080800 128 128
    thistle#d8bfd8216 191 216
    tomato#ff6347255 99 71
    turquoise#40e0d064 224 208
    violet#ee82ee238 130 238
    wheat#f5deb3245 222 179
    white#ffffff255 255 255
    whitesmoke#f5f5f5245 245 245
    yellow#ffff00255 255 0
    yellowgreen#9acd32154 205 50
    -

    HSL 颜色示例

    +

    HSL 颜色示例

    -

    0° Reds

    +

    0° Reds

    @@ -1064,7 +1064,7 @@
    -

    30° Reds-Yellows (=Oranges)

    +

    30° Reds-Yellows (=Oranges)

    @@ -1181,7 +1181,7 @@
    -

    60° Yellows

    +

    60° Yellows

    @@ -1298,7 +1298,7 @@
    -

    90° Yellow-Greens

    +

    90° Yellow-Greens

    @@ -1415,7 +1415,7 @@
    -

    120° Greens

    +

    120° Greens

    @@ -1532,7 +1532,7 @@
    -

    150° Green-Cyans

    +

    150° Green-Cyans

    @@ -1649,7 +1649,7 @@
    -

    180° Cyans

    +

    180° Cyans

    @@ -1766,7 +1766,7 @@
    -

    210° Cyan-Blues

    +

    210° Cyan-Blues

    @@ -1883,7 +1883,7 @@
    -

    240° blues

    +

    240° blues

    @@ -2000,7 +2000,7 @@
    -

    270° Blue-Magentas

    +

    270° Blue-Magentas

    @@ -2117,7 +2117,7 @@
    -

    300° Magentas

    +

    300° Magentas

    @@ -2234,7 +2234,7 @@
    -

    330° Magenta-Reds

    +

    330° Magenta-Reds

    @@ -2351,7 +2351,7 @@
    -

    另见

    +

    另见

    • CSS 备忘清单
    • Named Colors (w3.org)
    • @@ -2369,8 +2369,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -2381,7 +2379,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/cron.html b/docs/cron.html index 55ab6d45..e8072ffd 100644 --- a/docs/cron.html +++ b/docs/cron.html @@ -34,16 +34,16 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    Cron 备忘清单

    Cron 最适合安排重复性任务。 可以使用关联的 at 实用程序来完成一次性任务的调度。

    Crontab 格式

    -

    格式

    +

    格式

    Min  Hour Day  Mon  Weekday
     分钟  小时  天   月   周
     
    @@ -94,7 +94,7 @@
    字段范围特殊字符
    分钟 Minute0 - 59, - * /
    小时 Hour0 - 23, - * /
    月份中的某天1 - 31, - * ? / L W
    月 Month1 - 12, - * /
    星期几0 - 6, - * ? / L #
    -

    示例

    +

    示例

    @@ -153,7 +153,7 @@
    ExampleDescription
    */15 * * * *每 15 分钟
    0 * * * *每隔一小时
    0 */2 * * *每 2 小时
    15 2 * * *每天凌晨 2 点 15 分
    15 2 * * ?每天凌晨 2 点 15 分
    10 9 * * 5每周五上午 9:10
    0 0 * * 0每个星期日的午夜
    15 2 * * 1L每月最后一个星期一凌晨 2 点 15 分
    15 0 * * 4#2每个月的第二个星期四早上 00:15
    0 0 0 1 * *每个月的 1 日(每月)
    0 0 0 1 1 *每年 1 月 1 日(每年)
    @reboot每次重启 (非标准)
    -

    特殊字符串

    +

    特殊字符串

    @@ -197,7 +197,7 @@
    特殊字符串意义
    @reboot运行一次,在系统启动时 (非标准)
    @yearly每年运行一次,“0 0 1 1 *” (非标准)
    @annually(与@yearly 相同)(非标准)
    @monthly每月运行一次,“0 0 1 * *” (非标准)
    @weekly每周运行一次,“0 0 * * 0” (非标准)
    @daily每天运行一次,“0 0 * * *” (非标准)
    @midnight(与@daily 相同)(非标准)
    @hourly每小时运行一次,“0 * * * *” (非标准)
    -

    Crontab 命令

    +

    Crontab 命令

    @@ -228,7 +228,7 @@
    --
    crontab -e如果不存在,则编辑或创建一个 crontab 文件。
    crontab -l显示 crontab 文件。
    crontab -r删除 crontab 文件。
    crontab -v显示您上次编辑 crontab 文件的时间。 (非标准)
    `echo "@reboot echo hi"crontab`
    -

    特殊字符

    +

    特殊字符

    @@ -269,7 +269,7 @@
    特殊字符说明
    星号(*)匹配字段中的所有值或任何可能的值。
    横杆(-)用于定义范围。例如:第 5 个字段(星期几)中的 1-5 每个工作日,即星期一到星期五
    斜线 (/)第一个字段(分钟)/15 表示每十五分钟或范围的增量。
    逗号(,)用于分隔项目。例如:第二个字段(小时)中的 2、6、8 在凌晨 2 点、早上 6 点和早上 8 点执行
    L仅允许用于 月份中的某天星期几 字段,星期几 中的 2L 表示每个月的最后一个星期二
    井号 (#)仅允许用于 星期几 字段,后面必须在 1 到 5 的范围内。例如,4#1 表示给定月份的“第一个星期四”。
    问号(?)可以代替“*”并允许用于月份和星期几。使用仅限于 cron 表达式中的 月份中的某天星期几
    -

    Also see

    +

    Also see

    • Devhints (devhints.io)
    • Crontab Generator (crontab-generator.org)
    • @@ -288,8 +288,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -300,7 +298,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/css.html b/docs/css.html index 6245d399..e55d0a21 100644 --- a/docs/css.html +++ b/docs/css.html @@ -34,18 +34,18 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    CSS 备忘清单

    这是一份关于 CSS 优点的快速参考备忘单,列出了选择器语法、属性、单位和其他有用的信息

    入门

    -

    入门

    +

    介绍

    CSS 功能丰富,不仅仅是布局页面

    -

    外部样式表

    +

    外部样式表

    <link
       href="./path/to/stylesheet/style.css"
       rel="stylesheet"
    @@ -53,14 +53,14 @@
     >
     
    -

    内部样式表

    +

    内部样式表

    <style>
       body {
         background-color: linen;
       }
     </style>
     
    -

    内联样式

    +

    内联样式

    <h2 style="text-align: center;">
       居中文本
     </h2>
    @@ -69,38 +69,38 @@
     </p>
     
    -

    添加 class 类

    +

    添加 class 类

    <div class="classname"></div>
     <div class="class1 ... classn"></div>
     

    支持一个元素上的多个类

    -

    !important

    +

    !important

    .post-title {
         color: blue !important;
     }
     

    覆盖所有以前的样式规则

    -

    选择器

    +

    选择器

    h1 { } 
     #job-title { }
     div.hero { }
     div > p { }
     

    查看: CSS 选择器

    -

    文本颜色

    +

    文本颜色

    color: #2a2aff;
     color: green;
     color: rgb(34, 12, 64, 0.6);
     color: hsla(30 100% 50% / 0.6);
     

    查看: Colors

    -

    背景

    +

    背景

    background-color: blue;
     background-image: url("nyan-cat.gif");
     background-image: url("../image.png");
     

    查看: Backgrounds

    -

    字体

    +

    字体

    .page-title {
       font-weight: bold;
       font-size: 30px;
    @@ -108,7 +108,7 @@
     }
     

    查看: Fonts

    -

    定位

    +

    定位

    .box {
       position: relative;
       top: 20px;
    @@ -116,17 +116,17 @@
     }
     

    另见: Position

    -

    动画

    +

    动画

    animation: 300ms linear 0s infinite;
     animation: bounce 300ms linear infinite;
     

    查看: Animation

    -

    注释

    +

    注释

    /* 这是一行注释 */
     /* 这是
        多行注释 */
     
    -

    Flex 布局

    +

    Flex 布局

    div {
       display: flex;
       justify-content: center;
    @@ -137,7 +137,7 @@
     }
     

    查看: Flexbox | Flex Tricks

    -

    Grid 布局

    +

    Grid 布局

    #container {
       display: grid;
       grid: repeat(2, 60px) / auto-flow 80px;
    @@ -149,7 +149,7 @@
     }
     

    查看: Grid Layout

    -

    变量和计数器

    +

    变量和计数器

    counter-set: subsection;
     counter-increment: subsection;
     counter-reset: subsection 0;
    @@ -161,37 +161,37 @@
     }
     

    查看: 动态内容

    -

    CSS 选择器

    -

    示例

    +

    CSS 选择器

    +

    示例

    -

    组选择器

    +

    组选择器

    h1, h2 {
         color: red;
     }
     
    -

    链选择器

    +

    链选择器

    h3.section-heading {
         color: blue;
     }
     
    -

    属性选择器

    +

    属性选择器

    div[attribute="SomeValue"] {
         background-color: red;
     }
     
    -

    第一个子选择器

    +

    第一个子选择器

    p:first-child {
         font-weight: bold;
     }
     
    -

    无子选择器

    +

    无子选择器

    .box:empty {
       background: lime;
       height: 80px;
       width: 80px;
     }
     
    -

    基础

    +

    基础

    @@ -227,7 +227,7 @@
    选择器说明
    *所有元素
    div所有 div 标签
    .classname具有类的所有元素
    #idname带 ID 的元素
    div,p所有 div 和段落
    #idname *#idname 中的所有元素

    另见: 元素 / / ID / 通配 选择器

    -

    组合器

    +

    组合器

    @@ -263,7 +263,7 @@
    选择器说明
    div.classname具有特定类名的 div
    div#idname具有特定 ID 的 div
    div pdiv 中的段落
    div > pdiv 子节点中的所有 P 标签
    div + pdiv 之后的 P 标签
    div ~ pdiv 前面的 P 标签

    另见: 相邻兄弟 / 通用兄弟 / 选择器

    -

    属性选择器

    +

    属性选择器

    @@ -307,7 +307,7 @@
    选择器说明
    a[target]带有 target 属性 #
    a[target="_blank"]在新标签中打开 #
    a[href^="/index"]/index 开头 #
    [class|="chair"]chair开头 #
    [class*="chair"]包含chair #
    [title~="chair"]包含单词 chair #
    a[href$=".doc"].doc 结尾 #
    [type="button"]指定类型 #

    另见: 属性选择器

    -

    用户操作伪类

    +

    用户操作伪类

    @@ -344,7 +344,7 @@ /* 激活链接 */ a:active { color: red; } -

    伪类

    +

    伪类

    @@ -415,7 +415,7 @@
    选择器说明
    p::after在 p 之后添加内容 #
    p::before在 p 之前添加内容 #
    p::first-letterp中的第一个字母 #
    p::first-linep 中的第一行 #
    ::selection由用户选择 #
    ::placeholder占位符 属性 #
    :root文档根元素 #
    :target突出显示活动锚点 #
    div:empty没有子元素的元素 #
    p:lang(en)带有 en 语言属性的 P #
    :not(span)不是跨度的元素 #
    :hostshadowDOM 中选择自定义元素 #
    ::backdrop处于全屏模式的元素样式 #
    ::markerli 项目符号或者数字 #
    ::file-selector-buttontype="file" input 按钮 #
    -

    输入伪类

    +

    输入伪类

    @@ -486,7 +486,7 @@
    选择器说明
    input:checked检查 input #
    input:disabled禁用 input #
    input:enabled启用的 input #
    input:default有默认值的元素 #
    input:blank空的输入框 #
    input:focusinput 有焦点 #
    input:in-range范围内的值 #
    input:out-of-rangeinput 值超出范围 #
    input:validinput 有效值 #
    input:invalidinput 无效值 #
    input:optional没有必需的属性 #
    input:required带有必需属性的 input #
    input:read-only具有只读属性 #
    input:read-write没有只读属性 #
    input:indeterminate带有 indeterminate 状态 #
    -

    结构伪类

    +

    结构伪类

    @@ -561,8 +561,8 @@
    选择器说明
    p:first-child第一个孩子 #
    p:last-child最后一个孩子 #
    p:first-of-type首先是某种类型 #
    p:last-of-type某种类型的最后一个 #
    p:nth-child(2)其父母的第二个孩子 #
    p:nth-child(3n42)Nth-child(an + b) 公式 #
    p:nth-last-child(2)后面的二孩 #
    p:nth-of-type(2)其父级的第二个 p #
    p:nth-last-of-type(2)...从后面 #
    p:only-of-type其父级的唯一性 #
    p:only-child其父母的唯一孩子 #
    :is(header, div) p可以选择的元素 #
    :where(header, div) p:is 相同 #
    a:has(> img)包含 img 元素的 a 元素 #
    ::first-letter第一行的第一个字母 #
    ::first-line第一行应用样式 #
    -

    CSS 字体

    -

    属性

    +

    CSS 字体

    +

    属性

    @@ -611,18 +611,18 @@
    属性说明
    font-family:字体族名或通用字体族名 #
    font-size:字体的大小 #
    letter-spacing:文本字符的间距 #
    line-height:多行文本间距 #
    font-weight:粗细程度 #
    font-style:字体样式 #
    text-decoration:文本的修饰线外观 #
    text-align:相对它的块父元素对齐 #
    text-transform:指定文本大小写 #

    另见: Font

    -

    速记

    +

    速记

    font: italic    400     14px    /     1.5        sans-serif
           ┈┈┬┈┈┈    ┈┬┈     ┈┬┈┈          ┈┬┈        ┈┬┈┈┈┈┈┈┈┈
            样式      粗细    大小(必需的)    行高        字体(必需的)
     
    -

    示例

    +

    示例

    font-family: Arial, sans-serif;
     font-size: 12pt;
     letter-spacing: 0.02em;
     
    -

    大小写

    +

    大小写

    div {
       /* 首字母大写 Hello */
    @@ -633,27 +633,27 @@
       text-transform: lowercase;
     }
     
    -

    @font-face

    +

    @font-face

    @font-face {
       font-family: 'Glegoo';
       src: url('../Glegoo.woff');
     }
     
    -

    CSS 颜色

    -

    命名颜色

    +

    CSS 颜色

    +

    命名颜色

    color: red;
     color: orange;
     color: tan;
     color: rebeccapurple;
     

    更多标准颜色名称

    -

    十六进制颜色

    +

    十六进制颜色

    color: #090;
     color: #009900;
     color: #090a;
     color: #009900aa;
     
    -

    rgb() 颜色

    +

    rgb() 颜色

    color: rgb(34, 12, 64, 0.6);
     color: rgba(34, 12, 64, 0.6);
     color: rgb(34 12 64 / 0.6);
    @@ -661,7 +661,7 @@
     color: rgb(34.0 12 64 / 60%);
     color: rgba(34.6 12 64 / 30%);
     
    -

    HSL 颜色

    +

    HSL 颜色

    color: hsl(30, 100%, 50%, 0.6);
     color: hsla(30, 100%, 50%, 0.6);
     color: hsl(30 100% 50% / 0.6);
    @@ -669,21 +669,21 @@
     color: hsl(30.0 100% 50% / 60%);
     color: hsla(30.2 100% 50% / 60%);
     
    -

    其它

    +

    其它

    color: inherit;
     color: initial;
     color: unset;
     color: transparent;
     color: currentcolor; /* 关键字 */
     
    -

    全局值

    +

    全局值

    /* 全局值 */
     color: inherit;
     color: initial;
     color: unset;
     
    -

    CSS 背景

    -

    属性

    +

    CSS 背景

    +

    属性

    @@ -727,14 +727,14 @@
    属性说明
    background:(速记)
    background-color:查看: Colors
    background-image:一个或者多个背景图像
    background-position:背景图片设置初始位置
    background-size:背景图片大小
    background-clip:背景(图片或颜色)是否延伸到边框、内边距盒子、内容盒子下面
    background-repeat:图像重复方式
    background-attachment:scroll/fixed/local
    -

    速记

    +

    速记

    background: #ff0   url(a.jpg)   left     top    /  100px auto   no-repeat   fixed;
                 #abc   url(b.png)   center   center /  cover        repeat-x    local;
                 ┈┬┈┈    ┈┬┈┈┈┈┈┈┈   ┈┬┈┈     ┈┬┈       ┈┈┬┈┈┈┈┈┈┈   ┈┈┬┈┈┈┈┈┈   ┈┈┬┈┈┈
                 颜色     图片         位置x    位置x       图片大小     图像重复方式  位置是在视口内固定
     
    -

    示例

    +

    示例

    background: url(img_flwr.gif) right bottom no-repeat, url(paper.gif) left top repeat;
     background: url(img_man.jpg) no-repeat center;
    @@ -743,57 +743,57 @@
       rgba(13,232,230,1) 35%,
       rgba(0,212,255,1) 100%);
     
    -

    CSS 盒子模型

    -

    最大值/最小值

    +

    CSS 盒子模型

    +

    最大值/最小值

    .column {
       max-width: 200px; /* 最大宽度 200 像素 */
       width: 500px;     /* 宽度 500 像素 */
     }
     

    另见: max-width / min-width / max-height / min-height

    -

    边距/补白

    +

    边距/补白

    .block-one {
       margin: 20px;  /* 边距 20 像素 */
       padding: 10px; /* 补白 10 像素 */
     }
     

    另见: 边距(margin) / 补白(padding)

    -

    Box-sizing

    +

    Box-sizing

    .container {
       /* 设置的边框和补白的值是包含在 width 内的 */
       box-sizing: border-box;
     }
     

    另见: box-sizing

    -

    能见度

    +

    能见度

    .invisible-elements {
       visibility: hidden; /* 隐藏元素 */
     }
     

    另见: Visibility

    -

    Auto 关键字

    +

    Auto 关键字

    div {
       /* 览器自己选择一个合适的外边距 */
       margin: auto;
     }
     

    另见: 边距(margin)

    -

    溢出(Overflow)

    +

    溢出(Overflow)

    .small-block {
       /* 浏览器总是显示滚动条 */
       overflow: scroll;
     }
     

    另见: 溢出(overflow)

    -

    CSS 动画

    +

    CSS 动画

    -

    速记

    +

    速记

    animation:  bounce   300ms      linear     100ms    infinite   alternate-reverse  both                   reverse  
                 ┈┬┈┈     ┈┬┈┈┈      ┈┬┈┈┈┈     ┈┈┬┈┈    ┈┈┈┬┈┈┈┈   ┈┈┬┈┈┈┈┈┈┈┈┈┈┈┈┈┈  ┈┈┬┈┈┈                 ┈┈┬┈┈┈
                 动画名    动画时间     缓动函数    延迟     运行的次数   动画是否反向播放      如何将样式应用于其目标    是否运行或者暂停
     
    -

    属性

    +

    属性

    @@ -842,7 +842,7 @@
    属性说明
    animation:(速记)
    animation-name:动画名 #
    animation-duration:动画周期的时长 #
    animation-timing-function:缓动函数 #
    animation-delay:延迟 #
    animation-iteration-count:运行的次数 #
    animation-direction:动画是否反向播放 #
    animation-fill-mode:如何将样式应用于其目标 #
    animation-play-state:是否运行或者暂停 #

    另见: 动画(Animation)

    -

    示例

    +

    示例

    /* @keyframes duration | timing-function | delay |
        iteration-count | direction | fill-mode | play-state | name */
    @@ -857,13 +857,13 @@
     animation: bounce 300ms linear infinite alternate-reverse;
     animation: bounce 300ms linear 2s infinite alternate-reverse forwards normal;
     
    -

    Javascript 事件

    +

    Javascript 事件

    .one('webkitAnimationEnd oanimationend msAnimationEnd animationend')
     
    -

    CSS Flexbox

    +

    CSS Flexbox

    -

    简单实例

    +

    简单实例

    .container {
       display: flex;
     }
    @@ -872,7 +872,7 @@
       flex: 1 1 auto;
     }
     
    -

    容器

    +

    容器

    .container {
       display: flex;
    @@ -899,7 +899,7 @@
       justify-content: space-evenly;  /* [  ■  ■  ■  ] */
     }
     
    -

    子元素

    +

    子元素

    .container > div {
     
       /* 这个: */
    @@ -915,7 +915,7 @@
       margin-left: auto;       /* right */
     }
     
    -

    justify-content

    +

    justify-content

    justify-content: flex-start | flex-end | center | space-between
     
    @@ -950,7 +950,7 @@ ╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯

    上面示例,假设主轴为从左到右

    -

    flex-wrap

    +

    flex-wrap

    flex-wrap: nowrap | wrap | wrap-reverse;
     

    nowrap:不换行(默认)

    @@ -970,7 +970,7 @@ ╰┈┈╯ ╰┈┈╯ ╰┈┈╯ ╰┈┈╯ ╰┈┈╯ ╰┈┈╯ ╰┈┈╯

    项目都排在一条线(又称"轴线")上

    -

    flex-direction

    +

    flex-direction

    flex-direction: row | row-reverse | column | column-reverse;
     

    @@ -984,7 +984,7 @@ column-reverse column row row-reverse

    属性决定主轴的方向(即项目的排列方向)

    -

    align-items

    +

    align-items

    align-items: flex-start | flex-end | center | baseline | stretch;
     

    @@ -1015,7 +1015,7 @@ ┆ ┆ ╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯ -

    align-content

    +

    align-content

    align-content: flex-start | flex-end | center | space-between | space-around | stretch;
     
    @@ -1048,7 +1048,7 @@ ┆ ╰┈┈╯ ┆ ┆ ┆ ╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯ ╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯ -

    order

    +

    order

    .item {
       order: <integer>;
     }
    @@ -1065,7 +1065,7 @@
     ╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯ ╰┈┈┈┈┈┈┈┈┈╯
     

    属性 order 定义项目的排列顺序。数值越小,排列越靠前,默认为 0

    -

    flex-grow

    +

    flex-grow

    .item {
       flex-grow: <number>; /* default 0 */
     }
    @@ -1081,8 +1081,8 @@
     ╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯
     

    属性 flex-grow 定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大

    -

    CSS Flexbox 技巧

    -

    垂直中心

    +

    CSS Flexbox 技巧

    +

    垂直中心

    .container {
       display: flex;
     }
    @@ -1092,7 +1092,7 @@
       margin: auto;
     }
     
    -

    垂直中心 (2)

    +

    垂直中心 (2)

    .container {
       display: flex;
       /* 垂直的 */
    @@ -1101,7 +1101,7 @@
       justify-content: center;
     }
     
    -

    重新排序

    +

    重新排序

    .container > .top {
      order: 1;
     }
    @@ -1109,7 +1109,7 @@
      order: 2;
     }
     
    -

    移动布局

    +

    移动布局

    .container {
       display: flex;
       flex-direction: column;
    @@ -1122,7 +1122,7 @@
     }
     

    一个固定高度的顶部栏和一个动态高度的内容区域

    -

    Table-like 像表格

    +

    Table-like 像表格

    .container {
       display: flex;
    @@ -1133,33 +1133,33 @@
     .container > .date     { flex: 1 0 120px; }
     

    这会创建具有不同宽度的列,但会根据情况相应地调整大小

    -

    Vertical 垂直的

    +

    Vertical 垂直的

    .container {
       align-items: center;
     }
     

    垂直居中所有项目

    -

    左和右

    +

    左和右

    .menu > .left  { align-self: flex-start; }
     .menu > .right { align-self: flex-end; }
     
    -

    CSS Grid 网格布局

    -

    网格模板列

    +

    CSS Grid 网格布局

    +

    网格模板列

    #grid-container {
       display: grid;
       width: 100px;
       grid-template-columns: 20px 20% 60%;
     }
     
    -

    fr 相对单位

    +

    fr 相对单位

    .grid {
       display: grid;
       width: 100px;
       grid-template-columns: 1fr 60px 1fr;
     }
     
    -

    Grid Gap 网格间隙

    +

    Grid Gap 网格间隙

    /* 行间距为 20px */
     /* 列之间的距离是 10px */
     #grid-container {
    @@ -1167,37 +1167,37 @@
       grid-gap: 20px 10px;
     }
     
    -

    CSS 网格行

    +

    CSS 网格行

    CSS 语法:

    • grid-row: grid-row-start / grid-row-end;
    -

    实例

    +

    实例

    .item {
       grid-row: 1 / span 2;
     }
     
    -

    CSS 块级网格

    +

    CSS 块级网格

    #grid-container {
         display: block;
     }
     
    -

    CSS 内联级别网格

    +

    CSS 内联级别网格

    #grid-container {
       display: inline-grid;
     }
     
    -

    CSS 网格行间隙

    +

    CSS 网格行间隙

    grid-row-gap: length;
     

    任何合法的长度值,例如 px%0 是默认值

    -

    CSS 网格区域

    +

    CSS 网格区域

    .item1 {
       grid-area: 2 / 1 / span 2 / span 3;
     }
     
    -

    minmax() 函数

    +

    minmax() 函数

    .grid {
       display: grid;
    @@ -1206,17 +1206,17 @@
     

    定义了一个长宽范围的闭区间

    -

    grid-row-start & grid-row-end

    +

    grid-row-start & grid-row-end

    CSS 语法:

    • grid-row-start: auto|row-line;
    • grid-row-end: auto|row-line|span n;
    -

    实例

    +

    实例

    grid-row-start: 2;
     grid-row-end: span 2;
     
    -

    对齐项目

    +

    对齐项目

    #container {
       display: grid;
       justify-items: center;
    @@ -1225,7 +1225,7 @@
       grid-gap: 10px;
     }
     
    -

    CSS 网格模板区域

    +

    CSS 网格模板区域

    .item {
       grid-area: nav;
     }
    @@ -1236,7 +1236,7 @@
       'nav nav . .';
     }
     
    -

    Justify Self

    +

    Justify Self

    #grid-container {
       display: grid;
       justify-items: start;
    @@ -1246,7 +1246,7 @@
     }
     

    网格项目位于行的右侧(末尾)

    -

    对齐项目

    +

    对齐项目

    #container {
       display: grid;
       align-items: start;
    @@ -1255,8 +1255,8 @@
       grid-gap: 10px;
     }
     
    -

    CSS 动态内容

    -

    变量

    +

    CSS 动态内容

    +

    变量

    定义 CSS 变量

    :root {
       --first-color: #16f;
    @@ -1270,7 +1270,7 @@
     }
     

    另见: CSS Variable

    -

    计数器

    +

    计数器

    /* Set "my-counter" to 0 */
     counter-set: my-counter;
     
    @@ -1284,7 +1284,7 @@ counter-reset: my-counter;

    另见: Counter set

    -

    使用计数器

    +

    使用计数器

    body { counter-reset: section; }
     h3::before {
       counter-increment: section; 
    @@ -1300,24 +1300,24 @@
       content: counters(section, ".") " "; 
     }
     
    -

    Css 3 技巧

    -

    滚动条平滑

    +

    Css 3 技巧

    +

    滚动条平滑

    html {
       scroll-behavior: smooth;
     }
     

    点击我页面会平滑滚动到入门

    -

    忽略用作间距的换行符 <br />

    +

    忽略用作间距的换行符 <br />

    br + br {
       display: none;
     }
     
    -

    使用 :empty 隐藏空 HTML 元素

    +

    使用 :empty 隐藏空 HTML 元素

    :empty {
       display: none;
     }
     
    -

    CSS 重置

    +

    CSS 重置

    html {
       box-sizing: border-box;
     }
    @@ -1328,7 +1328,7 @@
     }
     

    有助于在不同的浏览器之间强制样式一致性,并为样式元素提供干净的盒子

    -

    使用图像作为光标

    +

    使用图像作为光标

    div {
       cursor: url('path-to-image.png'), url('path-to-fallback-image.png'), auto;
       /* 表情符号作为光标 */
    @@ -1336,7 +1336,7 @@
     }
     
    -

    文本溢出显示省略号

    +

    文本溢出显示省略号

    .overflow-ellipsis {
       width: 200px;
       white-space: nowrap;
    @@ -1345,7 +1345,7 @@
     }
     

    一行文本截断显示省略号 (...)

    -

    将文本截断到特定的行数

    +

    将文本截断到特定的行数

    .overflow-truncate {
       display: -webkit-box;
       -webkit-box-orient: vertical;
    @@ -1354,27 +1354,27 @@
     }
     

    多行文本截断到特定的行数,末尾显示省略号 (...)

    -

    计算函数

    +

    计算函数

    div {
       width: calc(100% - 30px);
       height: calc(100% - 30px);
     }
     

    calc() CSS 函数允许您在指定 CSS 属性值时执行计算

    -

    粘性定位元素

    +

    粘性定位元素

    .sticky {
       position: sticky;
       top: 0;
     }
     

    属性 sticky 能在滚动到顶部的位置固定住元素

    -

    使用带有空链接的属性选择器

    +

    使用带有空链接的属性选择器

    a[href^="http"]:empty::before {
       content: attr(href);
     }
     

    如果你的 <a> 标签里面没有内容,将 href 的值作为内容展示

    -

    使用 :root 表示灵活类型

    +

    使用 :root 表示灵活类型

    响应式布局中的字体大小应该能够根据每个视口进行调整,您可以使用 :root 根据视口高度和宽度计算字体大小

    :root {
       font-size: calc(1vw + 1vh + .5vmin);
    @@ -1385,7 +1385,7 @@
       font: 1rem/1.6 sans-serif;
     }
     
    -

    另见

    +

    另见

    • CSS selectors cheatsheet (frontend30.com)
    • MDN: Using CSS flexbox
    • @@ -1409,8 +1409,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -1421,7 +1419,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/curl.html b/docs/curl.html index 23feabe7..13085528 100644 --- a/docs/curl.html +++ b/docs/curl.html @@ -34,20 +34,20 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    Curl 备忘清单

    Curl 备忘清单包含命令和一些常见的 Curl 技巧示例。

    入门

    -

    入门

    +

    介绍

    Curl 是一种在服务器之间传输数据的工具,支持协议,包括 HTTP/FTP/IMAP/LDAP/POP3/SCP/SFTP/SMB/SMTP 等

    -

    Options

    +

    Options

    -o <file>    # --output: 写入文件
     -u user:pass # --user: 验证
    @@ -62,13 +62,13 @@
     
    -i           # --include: 在输出中包含 HTTP 标头
     -I           # --head: 仅标头
     
    -

    请求

    +

    请求

    -X POST # --request
     -L  # 如果页面重定向,请点击链接
     -F  # --form: multipart/form-data 的 HTTP POST 数据
     
    -

    数据

    +

    数据

    # --data: HTTP post 数据
     # URL 编码(例如,status="Hello")
     -d 'data'
    @@ -79,7 +79,7 @@
     # --get: 通过 get 发送 -d 数据
     -G
     
    -

    头信息 Headers

    +

    头信息 Headers

    -A <str>         # --user-agent
     
     -b name=val      # --cookie
    @@ -90,7 +90,7 @@
     
     --compressed     # 使用 deflate/gzip
     
    -

    SSL

    +

    SSL

        --cacert <file>
         --capath <dir>
     
    @@ -98,12 +98,12 @@ --cert-type # der/pem/eng -k, --insecure # 对于自签名证书
    -

    安装

    +

    安装

    apk add --update curl  # alpine linux 中安装
     
    -

    示例

    +

    示例

    -

    CURL GET/HEAD

    +

    CURL GET/HEAD

    @@ -144,18 +144,18 @@
    命令说明
    curl -I https://www.baidu.comcurl 发请求
    curl -v -I https://www.baidu.com带有详细信息的 curl 发请求
    curl -X GET https://www.baidu.com使用显式 http 方法进行 curl
    curl --noproxy 127.0.0.1 http://www.stackoverflow.com没有 http 代理的 curl
    curl --connect-timeout 10 -I -k https://www.baidu.comcurl 默认没有超时
    curl --verbose --header "Host: www.mytest.com:8182" www.baidu.comcurl 得到额外的标题
    curl -k -v https://www.google.comcurl 获取带有标题的响应
    -

    多文件上传

    +

    多文件上传

    $ curl -v -include \
         --form key1=value1 \
         --form upload=@localfilename URL
     
    -

    为 curl 响应美化 json 输出

    +

    为 curl 响应美化 json 输出

    $ curl -XGET http://${elasticsearch_ip}:9200/_cluster/nodes | python -m json.tool
     
    -

    CURL POST

    +

    CURL POST

    @@ -176,11 +176,11 @@
    命令说明
    curl -d "name=username&password=123456" <URL>curl 发请求
    curl <URL> -H "content-type: application/json" -d "{ \"woof\": \"bark\"}"curl 发送 json
    -

    CURL 脚本安装 rvm

    +

    CURL 脚本安装 rvm

    curl -sSL https://get.rvm.io | bash
     
    -

    CURL 高级

    +

    CURL 高级

    @@ -221,19 +221,19 @@
    命令说明
    curl -L -s http://ipecho.net/plain, curl -L -s http://whatismijnip.nl获取我的公共 IP
    curl -u $username:$password http://repo.dennyzhang.com/README.txt带凭证的 curl
    curl -v -F key1=value1 -F upload=@localfilename <URL>curl 上传
    curl -k -v --http2 https://www.google.com/使用 http2 curl
    curl -T cryptopp552.zip -u test:test ftp://10.32.99.187/curl ftp 上传
    curl -u test:test ftp://10.32.99.187/cryptopp552.zip -o cryptopp552.zipcurl ftp 下载
    curl -v -u admin:admin123 --upload-file package1.zip http://mysever:8081/dir/package1.zip使用凭证 curl 上传
    -

    检查网站响应时间

    +

    检查网站响应时间

    curl -s -w \
          '\nLookup time:\t%{time_namelookup}\nConnect time:\t%{time_connect}\nAppCon time:\t%{time_appconnect}\nRedirect time:\t%{time_redirect}\nPreXfer time:\t%{time_pretransfer}\nStartXfer time:\t%{time_starttransfer}\n\nTotal time:\t%{time_total}\n' \
          -o /dev/null https://www.google.com
     
    -

    使用 Curl 检查远程资源是否可用

    +

    使用 Curl 检查远程资源是否可用

    curl -o /dev/null --silent -Iw "%{http_code}" https://example.com/my.remote.tarball.gz
     
    -

    正在下载文件

    +

    正在下载文件

    curl https://example.com | \
     grep --only-matching 'src="[^"]*.[png]"' | \
    @@ -242,24 +242,24 @@
     -o "${i##*/}"; done
     

    从站点下载所有 PNG 文件(使用GNU grep)

    -

    下载文件,保存文件而不更改其名称

    +

    下载文件,保存文件而不更改其名称

    curl --remote-name "https://example.com/linux-distro.iso"
     

    重命名文件

    curl --remote-name "http://example.com/index.html" --output foo.html
     
    -

    继续部分下载

    +

    继续部分下载

    curl --remote-name --continue-at - "https://example.com/linux-distro.iso"
     
    -

    从多个域下载文件

    +

    从多个域下载文件

    curl "https://www.{example,w3,iana}.org/index.html" --output "file_#1.html"
     
    -

    下载一系列文件

    +

    下载一系列文件

    curl "https://{foo,bar}.com/file_[1-4].webp" --output "#1_#2.webp"
     
    @@ -278,8 +278,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -290,7 +288,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/docker.html b/docs/docker.html index 3bdc2b50..e9d46d27 100644 --- a/docs/docker.html +++ b/docs/docker.html @@ -34,16 +34,16 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    Docker 备忘清单

    这是 Docker 的快速参考备忘单。 你可以在这里找到最常见的 Docker 命令。

    入门

    -

    入门

    +

    入门

    在后台创建和运行容器

    $ docker run -d -p 80:80 docker/getting-started
     
    @@ -64,7 +64,7 @@
  • --name my-nginx - 指定名称
  • nginx - 要使用的镜像
  • -

    一般命令

    +

    一般命令

    @@ -124,9 +124,9 @@
    ExampleDescription
    docker ps列出正在运行的容器
    docker ps -a列出所有容器
    docker ps -s列出正在运行的容器 (带 CPU / 内存)
    docker images列出所有镜像
    docker exec -it <container> bash连接到容器
    docker logs <container>显示容器的控制台日志
    docker stop <container>停止容器
    docker restart <container>重启一个容器
    docker rm <container>移除一个容器
    docker port <container>显示容器的端口映射
    docker top <container>列出进程
    docker kill <container>杀死一个容器

    参数 <container> 可以是容器 id 或名称

    -

    Docker 容器

    +

    Docker 容器

    -

    启动和停止

    +

    启动和停止

    @@ -169,7 +169,7 @@
    DescriptionExample
    docker start nginx-server开始
    docker stop nginx-server停止
    docker restart nginx-server重启
    docker pause nginx-server暂停
    docker unpause nginx-server取消暂停
    docker wait nginx-server阻塞容器
    docker kill nginx-server发送 SIGKILL
    docker attach nginx-server连接到现有容器
    -

    说明

    +

    说明

    @@ -216,7 +216,7 @@
    ExampleDescription
    docker ps列出正在运行的容器
    docker ps -a列出所有容器
    docker logs nginx-server容器日志
    docker inspect nginx-server检查容器
    docker events nginx-server容器事件
    docker port nginx-server公共端口
    docker top nginx-server运行进程
    docker stats nginx-server容器资源使用
    docker diff nginx-server列出对容器所做的更改
    -

    创建容器

    +

    创建容器

    docker create [options] IMAGE
       -a, --attach               # 附加标准输出/错误
       -i, --interactive          # 附加标准输入(交互式)
    @@ -229,10 +229,10 @@
       -v, --volume `pwd`:/app    # mount(需要绝对路径)
       -e, --env NAME=hello       # 环境变量 env vars
     
    -

    实例

    +

    实例

    $ docker create --name my_redis --expose 6379 redis:3.0.2
     
    -

    操控

    +

    操控

    重命名容器

    docker rename my-nginx nginx-server
     
    @@ -242,9 +242,9 @@

    更新容器

    docker update --cpu-shares 512 -m 300M nginx-server
     
    -

    Docker 镜像

    +

    Docker 镜像

    -

    操控

    +

    操控

    @@ -291,7 +291,7 @@
    ExampleDescription
    docker images列出镜像
    docker rmi nginx删除镜像
    docker load < ubuntu.tar.gz加载一个 tarred 存储库
    docker load --input ubuntu.tar加载一个 tarred 存储库
    docker save busybox > ubuntu.tar将镜像保存到 tar 存档
    docker history显示镜像的历史
    docker commit nginx将容器另存为镜像。
    docker tag nginx eon01/nginx标记镜像
    docker push eon01/nginx推送镜像
    -

    构建镜像

    +

    构建镜像

    $ docker build .
     $ docker build github.com/creack/docker-firefox
     $ docker build - < Dockerfile
    @@ -300,9 +300,9 @@
     $ docker build -f myOtherDockerfile .
     $ curl example.com/remote/Dockerfile | docker build -f - .
     
    -

    Docker 网络

    +

    Docker 网络

    -

    操作

    +

    操作

    删除网络

    docker network rm MyOverlayNetwork
     
    @@ -321,7 +321,7 @@

    断开容器与网络的连接

    docker network disconnect MyOverlayNetwork nginx
     
    -

    创建网络

    +

    创建网络

    docker network create -d overlay MyOverlayNetwork
     docker network create -d bridge MyBridgeNetwork
     docker network create -d overlay \
    @@ -336,9 +336,9 @@
       --aux-address="my-nas=192.170.1.6" \
       MyOverlayNetwork
     
    -

    各种各样的

    +

    各种各样的

    -

    Docker Hub

    +

    Docker Hub

    @@ -365,7 +365,7 @@
    Docker 语法说明
    docker search search_word在 docker hub 中搜索镜像。
    docker pull user/image 从 docker hub 下载镜像。
    docker login 向 docker hub 进行身份验证
    docker push user/image 将镜像上传到 docker hub。
    -

    镜像仓库命令

    +

    镜像仓库命令

    登录到镜像仓库

    $ docker login
    @@ -387,7 +387,7 @@
     
    $ docker push eon01/nginx
     $ docker push eon01/nginx localhost:5000/myadmin/nginx
     
    -

    批量清除

    +

    批量清除

    @@ -410,14 +410,14 @@
    实例说明
    docker stop -f $(docker ps -a -q)停止所有容器
    docker rm -f $(docker ps -a -q)删除所有容器
    docker rmi -f $(docker images -q)删除所有图像
    -

    卷 volume

    +

    卷 volume

    检查卷

    $ docker volume ls
     

    清理未使用的卷

    $ docker volume prune
     
    -

    Docker Compose

    +

    Docker Compose

    @@ -473,7 +473,7 @@
    :-:-
    docker-compose up创建和启动容器
    docker-compose up -d以分离模式创建和启动容器
    docker-compose down停止和删除容器、网络、映像和卷
    docker-compose logs查看容器的输出
    docker-compose restart重启所有服务
    docker-compose pull拉取所有图片服务
    docker-compose build构建所有图像服务
    docker-compose config验证并查看 Compose 文件
    docker-compose scale <service_name>=<replica>规模特殊服务
    docker-compose top显示正在运行的进程
    docker-compose run -rm -p 2022:22 web bash启动 Web 服务并运行 bash 作为其命令,删除旧容器。
    -

    Docker Services

    +

    Docker Services

    @@ -508,7 +508,7 @@
    :-:-
    docker service create <options> <image> <command>创建新服务
    docker service inspect --pretty <service_name>显示详细信息服务
    docker service ls列出服务
    docker service ps列出服务的任务
    docker service scale <service_name>=<replica>规模特殊服务
    docker service update <options> <service_name>更新服务选项
    -

    Docker Stack

    +

    Docker Stack

    @@ -539,7 +539,7 @@
    :-:-
    docker stack ls列出此 Docker 主机上所有正在运行的应用程序
    docker stack deploy -c <composefile> <appname>运行指定的 Compose 文件
    docker stack services <appname>列出与应用关联的服务
    docker stack ps <appname>列出与应用关联的正在运行的容器
    docker stack rm <appname>拆掉一个应用程序
    -

    Docker Machine

    +

    Docker Machine

    @@ -607,7 +607,7 @@
    :-:-
    docker-machine create --driver virtualbox myvm1创建虚拟机(Mac、Win7、Linux)
    docker-machine create -d hyperv --hyperv-virtual-switch "myswitch" myvm1Win10
    docker-machine env myvm1查看有关您的节点的基本信息
    docker-machine ssh myvm1 "docker node ls"列出集群中的节点
    docker-machine ssh myvm1 "docker node inspect <node ID>"检查节点
    docker-machine ssh myvm1 "docker swarm join-token -q worker"查看加入令牌
    docker-machine ssh myvm1打开与 VM 的 SSH 会话; 输入“exit”结束
    docker-machine ssh myvm2 "docker swarm leave"让工人离开群体
    docker-machine ssh myvm1 "docker swarm leave -f"让主人离开,杀群
    docker-machine start myvm1启动当前未运行的 VM
    docker-machine stop $(docker-machine ls -q)停止所有正在运行的虚拟机
    docker-machine rm $(docker-machine ls -q)删除所有虚拟机及其磁盘映像
    docker-machine scp docker-compose.yml myvm1:~将文件复制到节点的主目录
    docker-machine ssh myvm1 "docker stack deploy -c <file> <app>"部署应用
    -

    另见

    +

    另见

    • Dockerfile 备忘清单 (github.io)
    • Docker 官方入门教程 (docker.com)
    • @@ -626,8 +626,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -638,7 +636,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/dockerfile.html b/docs/dockerfile.html index a65e0c70..3a322760 100644 --- a/docs/dockerfile.html +++ b/docs/dockerfile.html @@ -34,15 +34,15 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    Dockerfile 备忘清单

    这是 Dockerfile 的快速参考备忘单。包含用户可以在命令行上调用以组装镜像的所有命令。

    参考

    -

    参考

    +

    继承

    默认 Dockerfile 位于上下文的根目录中。

    • Docker 备忘清单 (github.io)
    • @@ -50,7 +50,7 @@
      docker build -f /path/to/a/Dockerfile .
       

      使用 -f 指向文件系统中任何位置的 Dockerfile

      -

    继承

    +

    继承

    FROM [--platform=<platform>] <image> [AS <name>]
     
    @@ -58,7 +58,7 @@
    FROM ruby:2.2.2
     FROM golang:1.19-alpine3.16 AS build-env
     
    -

    变量 ENV

    +

    变量 ENV

    ENV <key>=<value> ...
     
    ENV APP_HOME /myapp
    @@ -67,7 +67,7 @@
     
    ENV MY_NAME="John Doe" MY_DOG=Rex\ The\ Dog \
         MY_CAT=fluffy
     
    -

    初始化

    +

    初始化

    RUN bundle install
     
    @@ -83,7 +83,7 @@ COPY --chown=user:group host_file.xyz /path/container_file.xyz
    -

    Onbuild

    +

    Onbuild

    ONBUILD RUN bundle install
     # 与另一个文件一起使用时
     
    @@ -92,7 +92,7 @@
     

    指令将触发指令添加到镜像中,以便稍后执行,此时镜像用作另一个构建的基础。

    -

    在严格的 shell 中运行命令

    +

    在严格的 shell 中运行命令

    ENV my_var
     SHELL ["/bin/bash", "-euo", "pipefail", "-c"]
     # 使用严格模式:
    @@ -102,7 +102,7 @@
     

    使用 shell 将为 shell 命令打开严格模式。

    -

    命令 CMD

    +

    命令 CMD

    @@ -130,7 +130,7 @@
    EXPOSE 5900
     CMD ["bundle", "exec", "rails", "server"]
     
    -

    入口点 ENTRYPOINT

    +

    入口点 ENTRYPOINT

    ENTRYPOINT ["executable", "param1", "param2"]
     ENTRYPOINT command param1 param2
     
    @@ -139,7 +139,7 @@
    ENTRYPOINT exec top -b
     

    这将使用 shell 处理来替换 shell 变量,并将忽略任何 CMDdocker run 命令行参数。

    -

    元数据 LABEL

    +

    元数据 LABEL

    LABEL version="1.0"
     
    LABEL "com.example.vendor"="ACME Incorporated"
    @@ -153,7 +153,7 @@
           multi.label2="value2" \
           other="value3"
     
    -

    ARG

    +

    ARG

    ARG <name>[=<default value>]
     

    指令定义了一个变量,在构建时通过 docker build 命令使用 --build-arg <varname>=<value> 标志将其传递给构建器。

    @@ -162,7 +162,7 @@ ARG user1=someuser ARG buildno=1
    -

    .dockerignore 文件

    +

    .dockerignore 文件

    # 注释说明
     */temp*
     */*/temp*
    @@ -197,7 +197,7 @@
     
    :--
    # comment忽略
    */temp*在根的任何直接子目录中
    排除名称以 temp 开头的文件和目录
    */*/temp*从根以下两级的任何子目录中
    排除以 temp 开头的文件和目录
    temp?排除根目录中名称为
    temp 的单字符扩展名的文件和目录

    如果此文件存在,排除与其中的模式匹配的文件和目录,有利于避免 ADDCOPY 将敏感文件添加到镜像中。匹配是使用 Go 的 filepath.Match 规则完成的。

    -

    主要命令

    +

    主要命令

    @@ -250,7 +250,7 @@
    命令说明
    FROM image构建的基础镜像
    MAINTAINER email(已弃用)维护者的名字
    COPY [--chown=<user>:<group>] <src>... <dest>将上下文中的路径复制到位置 dest 的容器中
    ADD [--chown=<user>:<group>] <src>... <dest>COPY 相同,但解压缩存档并接受 http url。
    RUN <command>在容器内运行任意命令。
    USER <user>[:<group>]设置默认用户名。
    WORKDIR /path/to/workdir设置默认工作目录。
    CMD command param1 param2设置默认命令
    ENV <key>=<value> ...设置环境变量
    EXPOSE <port> [<port>/<protocol>...]运行时侦听指定的网络端口
    -

    服务静态网站的最小 Docker 镜像

    +

    服务静态网站的最小 Docker 镜像

    FROM lipanski/docker-static-website:latest
     # 使用 .dockerignore 文件来控制图像中的内容!
    @@ -264,7 +264,7 @@
     CMD ["/busybox", "httpd", "-f", "-v", "-p", "3000", "-c", "httpd.conf"]
     

    缩小镜像过程查看原文,镜像 Dockerfile 源码

    -

    也可以看看

    +

    也可以看看

    • Dockerfile reference (docker.com)
    • Docker 备忘清单 (github.io)
    • @@ -283,8 +283,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -295,7 +293,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/electron.html b/docs/electron.html index 7a740b59..ae9fb381 100644 --- a/docs/electron.html +++ b/docs/electron.html @@ -34,7 +34,7 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    @@ -43,11 +43,11 @@

    此快速参考备忘单提供了 Electron v21 API 说明和使用示例。

    入门

    -

    入门

    +

    快速开始

    Electron 是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架

    -

    创建你的应用程序

    +

    创建你的应用程序

    • 安装
      mkdir my-app && cd my-app
      @@ -114,29 +114,29 @@
       
    -

    关闭所有窗口时退出应用

    +

    关闭所有窗口时退出应用

    app.on('window-all-closed', () => {
       if (process.platform !== 'darwin') {
         app.quit()
       }
     })
     
    -

    创建无边框窗口

    +

    创建无边框窗口

    const win = new BrowserWindow({
       frame: false
     })
     
    -

    自定义标题栏样式

    +

    自定义标题栏样式

    const win = new BrowserWindow({
       titleBarStyle: 'hidden'
     })
     
    -

    控制红绿灯 (macOS)

    +

    控制红绿灯 (macOS)

    const win = new BrowserWindow({
       titleBarStyle: 'customButtonsOnHover'
     })
     
    -

    通过预加载脚本从渲染器访问 Node.js

    +

    通过预加载脚本从渲染器访问 Node.js

    创建一个名为 preload.js 的新脚本如下

    window.addEventListener('DOMContentLoaded', () => {
    @@ -165,7 +165,7 @@
       win.loadFile('index.html')
     }
     
    -

    将的 process.versions 对象暴露给渲染器

    +

    将的 process.versions 对象暴露给渲染器

    const { contextBridge } = require('electron')
     
     contextBridge.exposeInMainWorld(
    @@ -181,7 +181,7 @@
     );
     

    通过 preload.js 脚本将 versions 这一全局变量暴露给渲染器

    -

    启用拼写检查器

    +

    启用拼写检查器

    const myWindow = new BrowserWindow({
       webPreferences: {
         spellcheck: true
    @@ -194,9 +194,9 @@
         'en-US', 'fr'
       ])
     
    -

    app

    +

    app

    -

    事件绑定方法使用示例

    +

    事件绑定方法使用示例

    const { app } = require('electron');
     
    @@ -211,7 +211,7 @@
     
     app.exit(0);
     
    -

    方法

    +

    方法

    @@ -479,7 +479,7 @@
    :-:-
    quit尝试关闭所有窗口 #
    exit使用 exitCode 立即退出 #
    relaunch当前实例退出,重启应用 #
    isReady已完成初始化返回 boolean #
    whenReady初始化完成 #
    focus获得焦点/激活的 app #
    hide隐藏所有的应用窗口,不是最小化 #
    isHidden (mac)所有窗口是否都被隐藏 #
    show (mac)显示隐藏后的应用程序窗口 #
    setAppLogsPath设置或创建一个您的应用程序日志目录 #
    getAppPath获取当前应用程序目录 #
    getPath(name)与 name 关联的目录或文件的路径 #
    getFileIcon一个 NativeImage 类型的应用图标 #
    setPath(name)重写 name 的路径特定文件夹或文件 #
    getVersion应用程序的版本号 #
    getName应用程序的名称 #
    setName设置当前应用程序的名字 #
    getLocale当前应用程序区域 #
    getLocaleCountryCode获取双字母 ISO 3166 国家代码 #
    getSystemLocale当前系统语言环境 #
    addRecentDocument (win/mac)最近打开的文件列表添加新路径 #
    clearRecentDocuments (win/mac)清空最近打开的文档列表#
    setAsDefaultProtocolClient设置协议(URI scheme)默认处理程序 #
    removeAsDefaultProtocolClient移除默认处理器 #
    isDefaultProtocolClient可执行程序是否是协议 #
    getApplicationNameForProtocol返回默认处理器的应用程序名称 #
    getApplicationInfoForProtocol (win/mac)返回包含应用程序名称 #
    setUserTasks (win)添加 tasks 到Jump List的Tasks类别 #
    getJumpListSettings (win)获取跳转列表 #
    setJumpList (win)设置跳转列表 #
    requestSingleInstanceLock返回应用程序实例是否成功取了锁 #
    hasSingleInstanceLock返回应用实例当前是否持有单例锁 #
    releaseSingleInstanceLock释放所有创建的锁 #
    setUserActivity (mac)创建 NSUserActivity 并将其设置为当前活动 #
    getCurrentActivityType (mac)正在运行的 activity 的类型 #
    invalidateCurrentActivity (mac)使当前的Handoff用户活动无效 #
    resignCurrentActivity (mac)将当前 Handoff 用户活动标记为非活动,但不使其失效 #
    updateCurrentActivity (mac)将项目从 用户信息 合并到其当前 用户信息 字典中 #
    setAppUserModelId (win)改变当前应用的 Application User Model ID 为 id #
    setActivationPolicy (mac)为给定应用设置激活策略 #
    importCertificate (linux)将 pkcs12 格式的证书导入到平台证书库 #
    configureHostResolver配置主机解析器 (DNS 和 DNS-over-HTTPS) #
    disableHardwareAcceleration禁用当前应用程序的硬件加速 #
    disableDomainBlockingFor3DAPIsGPU 进程频繁崩溃,在每个域的基础上重新启动,禁用该行为 #
    getAppMetrics返回 ProcessMetric[] #
    getGPUFeatureStatus返回 GPUFeatureStatus #
    getGPUInfoGPU 信息 #
    setBadgeCount (mac/linux)应用设置计数器角标 #
    getBadgeCount (mac/linux)获取计数器(badge)显示的当前值 #
    isUnityRunning (linux)前桌面环境是否为 Unity 启动器 #
    getLoginItemSettings (mac/win)为 openAtLogin 设置相同的参数已确保正确的设置 #
    setLoginItemSettings (mac/win)传递指定应用程序名称的参数 #
    isAccessibilitySupportEnabled (mac/win)是否开启了辅助功能 #
    setAccessibilitySupportEnabled (mac/win)启用或禁用访问权限树视图 #
    showAboutPanel显示程序的"关于"面板选项 #
    setAboutPanelOptions设置 "关于" 面板选项 #
    isEmojiPanelSupported当前操作系统是否支持本地 emoji 选择器 #
    showEmojiPanel (mac/win)打开系统自身的emjio选取器 #
    startAccessingSecurityScopedResource (mac)开始访问安全范围内的资源 #
    enableSandbox在应用程序上启用完全沙盒模式 #
    isInApplicationsFolder (mac)是否从系统应用程序文件夹运行 #
    moveToApplicationsFolder (mac)#
    isSecureKeyboardEntryEnabled (mac)是否已启用安全键盘输入 #
    setSecureKeyboardEntryEnabled (mac)在应用中启用安全键盘输入 #
    -

    启动时激活主实例窗口的示例

    +

    启动时激活主实例窗口的示例

    const { app } = require('electron');
     let myWindow = null;
    @@ -510,7 +510,7 @@
       })
     }
     
    -

    事件

    +

    事件

    @@ -646,7 +646,7 @@
    :-:-
    will-finish-launching基础的启动的时候被触发 #
    ready完成初始化时,触发一次 #
    window-all-closed在程序关闭窗口前发信号 #
    before-quit当所有窗口被关闭后触发,应用程序将退出 #
    will-quit所有窗口被关闭后触发,应用程序将退出 #
    quit在应用程序退出时触发 #
    open-file (mac)在应用中打开一个文件时触发 #
    open-url (mac)应用中打开一个 URL 时触发 #
    activate (mac)当应用被激活时触发 #
    did-become-active (mac)不同设备的活动想要恢复时在切换期间触发 #
    continue-activity (mac)不同设备的活动通过 Handoff 想要恢复时触发 #
    will-continue-activity (mac)恢复来自不同设备的活动之前在切换期间触发 #
    continue-activity-error (mac)不同设备的活动无法恢复时在切换期间触发 #
    activity-was-continued (mac)活动在另一个设备上成功恢复后切换期间触发 #
    update-activity-state (mac)当即将在另一台设备上恢复切换时触发 #
    new-window-for-tab (mac)用户点击原生的 macOS 新标签按钮时触发 #
    browser-window-blur当 browserWindow 变得模糊时触发 #
    browser-window-focus当 browserWindow 获得焦点时触发 #
    browser-window-created创建新的 browserWindow 时触发 #
    web-contents-created创建新的 webContents 时触发 #
    certificate-error当对 url 的 certificate 证书验证失败触发 #
    select-client-certificate当一个客户证书被请求的时候发出 #
    login当 webContents 要进行基本身份验证时触发 #
    gpu-info-update每当有 GPU 信息更新时触发 #
    gpu-process-crashed 废弃当 gpu 进程崩溃或关闭(杀死)时触发 #
    renderer-process-crashed 废弃渲染器进程崩溃或关闭(杀死)时触发 #
    render-process-gone渲染器进程意外消失时触发 #
    child-process-gone子进程意外消失时触发 #
    accessibility-support-changed当 Chrome 的辅助功能状态改变时触发 #
    session-created创建了一个新的 session 后被触发 #
    second-instance在你的应用程序的首个实例中触发 #
    -

    属性

    +

    属性

    @@ -698,9 +698,9 @@
    :-:-
    accessibilitySupportEnabled (mac/win)是否开启了辅助功能 #
    applicationMenu传递 Menu 来给此属性赋值 #
    badgeCount (mac/linux)返回应用角标计数的 Integer 属性 #
    commandLineChromium 使用的命令行参数 #
    dock (mac/只读)用户dock中对应用图标进行操作 #
    isPackaged (只读)应用是否已经打包 #
    name当前应用程序的名称 #
    userAgentFallback全局回退的用户代理字符串 #
    runningUnderRosettaTranslation (mac)提示下载应用程序的 arm64 版本 #
    runningUnderARM64Translation (mac/win)前应用正在使用 ARM64 运行环境 #
    -

    BrowserWindow

    +

    BrowserWindow

    -

    参数

    +

    参数

    @@ -1157,7 +1157,7 @@
    :-:-
    width 整数窗口的宽度(以像素为单位)。默认值 (800)
    height 整数窗口的高度(以像素为单位)。默认值 (600)
    x 整数 (可选)窗口相对于屏幕左侧偏移量。默认值窗口居中
    y 整数 (可选)窗口相对于屏幕顶端偏移量。默认值窗口居中
    useContentSize boolean(宽)(高) 设置为web页面的尺寸。默认值 (false)
    center boolean窗口是否在屏幕居中。默认值 (false)
    minHeight 整数窗口的最小高度。默认值 (0)
    maxWidth 整数窗口的最大宽度。默认值不限
    maxHeight 整数窗口的最大高度。默认值不限
    resizable boolean窗口大小是否可调整。默认值 (true)
    movable boolean (win/mac)窗口是否可移动。默认值 (true)
    minimizable boolean (win/mac)窗口是否可最小化。默认值 (true)
    maximizable boolean (win/mac)窗口是否最大化。默认值 (true)
    closable boolean (win/mac)窗口是否可关闭。默认值 (true)
    focusable boolean窗口是否可以聚焦. 默认值 (true)。在 Windows 中设置 (focusable: false) 也意味着设置了 (skipTaskbar: true) 在 Linux 中设置 (focusable: false) 时窗口停止与 wm 交互, 并且窗口将始终置顶
    alwaysOnTop boolean窗口是否永远在别的窗口的上面。默认值 (false)
    fullscreen boolean窗口是否全屏。为 (false) 时 macOS 上按钮将被隐藏或禁用。默认值 (false)
    fullscreenable boolean窗口是否可以进入全屏状态。macOS上,最大化/缩放按钮是否可用 默认值 (true)
    simpleFullscreen boolean (mac)在 macOS 上使用 pre-Lion 全屏。默认值 (false)
    skipTaskbar boolean (win/mac)是否在任务栏中显示窗口。默认值 (false)
    kiosk boolean窗口是否进入kiosk模式。默认值 (false)
    title string默认窗口标题 默认为 ("Electron") 。如果由 (loadURL()) 加载的HTML文件中含有标签 (<title>) ,此属性将被忽略
    icon NativeImage/string窗口图标。在 Windows 上推荐使用 (ICO) 图标来获得最佳的视觉效果, 默认使用可执行文件的图标
    show boolean窗口是否在创建时显示。默认值 (true)
    paintWhenInitiallyHidden boolean(show)(false) 并且渲染器刚刚被创建时,它是否应激活。为了让 (document.visibilityState)(show: false) 的情况下第一次加载时正确地工作,你应该把这个设置成 (false)。设置为 (false) 将会导致 (ready-to-show) 事件不触发。默认值 (true)
    frame boolean设置为 (false) 时可以创建一个无边框窗口,默认值 (true)
    parent BrowserWindow指定父窗口 默认值 (null)
    modal boolean当前是否为模态窗口。只有当窗口是子窗口时才起作用。默认值 (false)
    acceptFirstMouse boolean (mac)点击 非活动窗口是否会穿透到 web contents。默认值 (false)
    disableAutoHideCursor boolean是否在打字时隐藏光标。默认值 (false)
    autoHideMenuBar boolean自动隐藏菜单栏,除非按了_(Alt)_键。默认值 (false)
    enableLargerThanScreen boolean (mac)使窗口尺寸可大于屏幕的大小。其他操作系统默认允许大于屏幕的窗口。默认值 (false)
    backgroundColor string窗口背景色,格式为 Hex, RGB, RGBA, HSL, HSLA 或 CSS 命名颜色。如果 (transparent) 设置为 (true),则支持 #AARRGGBB 格式的透明。默认值 (#FFF)(白色)
    hasShadow boolean窗口是否有阴影. 默认值 (true)
    opacity number (win/mac)设置窗口的初始透明度,在 0.0(全透明)和 1.0(完全不透明)之间 。 目前仅在 Windows 和 macOS上实现。
    darkTheme boolean强制窗口使用深色主题,只在部分GTK+3桌面环境下有效。 默认值 (false).
    transparent boolean使窗口 透明。 默认值 (false). 在Windows上,仅在无边框窗口下起作用。
    type string窗口的类型, 默认为普通窗口. 更多信息见下文
    visualEffectState string (mac)在 macOS 上指定外观应如何响应窗口活动状态。 必须与 (vibrancy) 属性一起使用。 可能的值有
    visualEffectState.followWindow当窗口处于激活状态时,后台应自动显示为激活状态,当窗口处于非激活状态时,后台应自动显示为非激活状态。 默认为该值。
    visualEffectState.active后台应一直显示为激活状态。
    visualEffectState.inactive后台应一直显示为非激活状态。
    titleBarStyle string (win/mac)窗口标题栏样式。默认值 (default)
    titleBarStyle.default分别返回 mac 或者 win 的标准标题栏
    titleBarStyle.hidden在一个隐藏的标题栏和一个全尺寸大小的内容窗口中取得结果。 在 macOS 内, 窗口将一直拥有位于左上的标准窗口控制器 (“traffic lights”)。 在 Windows上,当与 (titleBarOverlay: true) 合并时,它将激活窗口控件叠加(详情请参阅 (titleBarOverlay)),否则将不会显示窗口控件。
    titleBarStyle.hiddenInset (mac)隐藏标题栏,使用窗口边缘稍微小的红绿灯按钮替代。
    titleBarStyle.customButtonsOnHover (mac)隐藏的标题栏的全尺寸的内容窗口, 红绿灯按钮在鼠标悬停在窗口左上方时显示。**注意:**此选项目前是实验性的。
    trafficLightPosition Point (mac)在无边框窗口中设置灯绿灯按钮位置。
    roundedCorners boolean (mac)无边框窗口在 macOS 上,是否应该有圆角。 默认值为 (true)。 属性设置为 (false) ,将阻止窗口是可全屏的。
    fullscreenWindowTitle boolean (mac) 已弃用titleBarStyle 设置为 (hiddenInset) 时,在 macOS 全屏模式下标题栏显示标题。默认值为 (false).
    thickFrame boolean对 Windows 上的无框窗口使用 (WS_THICKFRAME) 样式,会增加标准窗口框架。 设置为 (false) 时将移除窗口的阴影和动画. 默认值为 (true)
    vibrancy string (mac)为窗口添加一种类型的动态效果,仅 macOS。 可以是 (appearance-based)(light)(dark)(titlebar)(selection)(menu)(popover)(sidebar)(medium-light)(ultra-dark)(header)(sheet)(window)(hud)(fullscreen-ui)(tooltip)(content)(under-window)(under-page)。 请注意 (appearance-based)(light)(dark)(medium-light)(ultra-dark) 已弃用,在 macOS Catalina (10.15) 中已经移除。
    zoomToPageWidth boolean (mac)在 macOS 上控制,当按住 option 点击工具栏绿色红绿灯按钮或点击窗口 > 放大菜单项的行为。 如果为 (true),窗口为将会缩放到适合宽度,若为 (false) 将会放大到屏幕宽度。 这也会影响,直接调用 (maximize()) 的行为。 默认值为 (false).
    tabbingIdentifier string (mac)选项卡组名称,允许在原生选择卡中打开窗口,macOS 10.12+ 支持。 Windows 中,有相同选项卡标识的将会组合在一起。 这会添加一个原生新增选项卡按钮到你窗口的选项卡栏,同时 (app) 和窗口允许接收 (new-window-for-tab) 事件。
    webPreferences Object网页功能设置。
    webPreferences.devTools boolean是否开启 DevTools. 如果设置为 (false), 则无法使用 (BrowserWindow.webContents.openDevTools ()) 打开 DevTools。 默认值为 (true)
    webPreferences.nodeIntegration boolean是否启用Node integration. 默认值为 (false).
    webPreferences.nodeIntegrationInWorker boolean是否在Web工作器中启用了Node集成. 默认值为 (false). 更多内容参见 多线程
    webPreferences.nodeIntegrationInSubFrames boolean 实验性是否允许在子页面(iframe)或子窗口(child window)中集成Node.js; 预先加载的脚本会被注入到每一个iframe,你可以用 (process.isMainFrame) 来判断当前是否处于主框架(main frame)中。
    webPreferences.preload string在页面运行其他脚本之前预先加载指定的脚本 无论页面是否集成Node, 此脚本都可以访问所有Node API 脚本路径为文件的绝对路径。 当 node integration 关闭时, 预加载的脚本将从全局范围重新引入node的全局引用标志参考示例
    webPreferences.sandbox boolean如果设置该参数, 沙箱的渲染器将与窗口关联, 使它与Chromium OS-level 的沙箱兼容, 并禁用 Node. js 引擎。 它与 (nodeIntegration) 的选项不同,且预加载脚本的 API 也有限制。更多详情
    webPreferences.sessionSession 设置页面的 session 而不是直接忽略 Session 对象, 也可用 (partition) 选项来代替,它接受一个 partition 字符串. 同时设置了_(session)_ 和 _(partition)_时, (session) 的优先级更高. 默认使用默认的 session.
    webPreferences.partitionstring (optional) - 通过 session 的 partition 字符串来设置界面session. 如果 (partition)(persist:)开头, 该页面将使用持续的 session,并在所有页面生效,且使用同一个(partition). 如果没有 (persist:) 前缀, 页面将使用 in-memory session. 通过分配相同的 (partition), 多个页可以共享同一会话。 默认使用默认的 session.
    webPreferences.zoomFactor number页面的默认缩放系数, (3.0) 表示 (300%)。 默认值为 (1.0).
    webPreferences.javascript boolean是否启用 JavaScript 支持。 默认值为 (true)
    webPreferences.webSecurity boolean当设置为 (false), 它将禁用同源策略 (通常用来测试网站), 如果此选项不是由开发者设置的,还会把 _(allowRunningInsecureContent)_设置为 (true). 默认值为 (true)
    webPreferences.allowRunningInsecureContent boolean允许一个 https 页面运行来自http url的JavaScript, CSS 或 plugins。 默认值为 (false)
    webPreferences.images boolean允许加载图片。 默认值为 (true)
    webPreferences.imageAnimationPolicy string指定如何运行图像动画 (比如: GIF等). 可以是 (animate), (animateOnce)(noAnimation)。默认值为 (animate)
    webPreferences.textAreasAreResizable boolean允许调整 TextArea 元素大小。 默认值为 (true)
    webPreferences.webgl boolean启用 WebGL 支持。 默认值为 (true)
    webPreferences.plugins boolean是否应该启用插件。 默认值为 (false)
    webPreferences.experimentalFeatures boolean启用 Chromium 的实验功能。 默认值为 (false)
    webPreferences.scrollBounce boolean (mac)启用滚动回弹(橡皮筋)效果。 默认值为 (false)
    webPreferences.enableBlinkFeaturesstring(逗号) 分隔的需要启用的特性列表,譬如 (CSSVariables,KeyboardEventKey)RuntimeEnabledFeatures.json5 文件中查看被支持的所有特性
    webPreferences.disableBlinkFeatures string(,) 分隔的禁用特性列表, 如 (CSSVariables,KeyboardEventKey)RuntimeEnabledFeatures.json5 文件中查看被支持的所有特性
    defaultFontFamily Object为 font-family 设置默认字体
    defaultFontFamily.standard string默认值为 (Times New Roman)
    defaultFontFamily.serif string默认值为 (Times New Roman)
    defaultFontFamily.sansSerif string默认值为 (Arial)
    defaultFontFamily.monospace string默认值为 (Courier New)
    defaultFontFamily.cursive string默认值为 (Script)
    defaultFontFamily.fantasy string默认值为 (Impact)
    defaultFontSize Integer默认值为 (16)
    defaultMonospaceFontSize Integer默认值为 (13)
    minimumFontSize Integer默认值为 (0)
    defaultEncoding string默认值为 (ISO-8859-1)
    backgroundThrottling boolean是否在页面成为背景时限制动画和计时器。 这也会影响到 Visibility API。默认值为 (true)
    offscreen boolean是否绘制和渲染可视区域外的窗口。默认值为 (false)。更多详情, 请参见 offscreen rendering tutorial
    contextIsolation boolean是否在独立 JavaScript 环境中运行 Electron API和指定的_(preload)_ 脚本。默认为 (true)(预加载)脚本所运行的上下文环境只能访问其自身专用的 (文档) 和全局 (窗口),其自身一系列内置的JavaScript ((Array), (Object), (JSON), 等等) 也是如此,这些对于已加载的内容都是不可见的。 Electron API 将只在_(预加载)脚本中可用,在已加载页面中不可用。 这个选项应被用于加载可能不被信任的远程内容时来确保加载的内容无法篡改(预加载)_脚本和任何正在使用的Electron api。 该选项使用的是与Chrome内容脚本相同的技术。你可以在开发者工具Console选项卡内顶部组合框中选择 'Electron Isolated Context'条目来访问这个上下文
    webviewTag boolean是否启用 (<webview>) tag标签。默认值为 (false)注意:(< webview>) 配置的 (preload) 脚本在执行时将启用节点集成, 因此应确保远程或不受信任的内容无法创建恶意的 (preload) 脚本 。 可以使用 webContents 上的 (will-attach-webview) 事件对 (preload) 脚本进行剥离, 并验证或更改 (<webview>) 的初始设置
    additionalArguments string[]strin一个将被附加到当前应用程序的渲染器进程中_(process.argv)_的字符串列表。可用于将少量的数据传递到渲染器进程预加载脚本中。
    safeDialogs boolean是否启用浏览器样式的持续对话框保护。 默认值为 (false)
    safeDialogsMessage string当持续对话框保护被触发时显示的消息。 如果没有定义,那么将使用缺省的消息。注意:当前缺省消息是英文,并没有本地化
    disableDialogs boolean是否完全禁用对话框。 覆盖 (safeDialogs)。 默认值为 (false)
    navigateOnDragDrop boolean将文件或链接拖放到页面上时是否触发页面跳转。 默认值为 (false)
    autoplayPolicy string窗口中内容要使用的自动播放策略,值可以是 (no-user-gesture-required), (user-gesture-required), (document-user-activation-required)。默认为 (no-user-gesture-required)
    disableHtmlFullscreenWindowResize boolean是否阻止窗口在进入 HTML 全屏时调整大小。默认值为 (false)
    accessibleTitle string仅提供给如屏幕读取器等辅助工具的替代标题字符串。此字符串不直接对用户可见
    spellcheck boolean是否启用内置拼写检查器。 默认值为 (true)
    enableWebSQL boolean是否启用 WebSQL api。 默认值为 (true)
    v8CacheOptions string强制 blink 使用 v8 代码缓存策略。 可接受的值为:
    v8CacheOptions.none禁用代码缓存
    v8CacheOptions.code基于启发式代码缓存
    v8CacheOptions.bypassHeatCheck绕过启发式代码缓存,但使用懒编译。
    v8CacheOptions.bypassHeatCheckAndEagerCompile与上面相同,除了编译是及时的。 默认策略是 (code)
    enablePreferredSizeMode boolean是否启用首选大小模式。 首选大小是包含文档布局所需的最小大小--无需滚动。 启用该属性将导致在首选大小发生变化时,在 (WebContents) 上触发 (preferred-size-changed) 事件。默认值为 (false)
    titleBarOverlay Object/Boolean当在 macOS 使用无框窗口结合 (win.setWindowButtonVisibility(true)) 或使用 (titleBarStyle) 以便标准窗口控制 (在 macOS为 "traffic lights") 可见,此属性将启用 Window Controls Overlay JavaScript APIsCSS Environment Variables。指定 (true) 将导致覆盖默认系统颜色。 默认值为 (false)
    color String (win)启用窗口控制时覆盖面的 CSS 颜色 默认是系统颜色
    symbolColor String (win)启用时窗口控制中符号的 CSS 颜色 默认是系统颜色
    height Integer (win/mac)标题栏和 Window Controls Overlay,以像素为单位。 默认值为系统高度
    -

    实例事件

    +

    实例事件

    const { BrowserWindow } = require('electron')
     
    @@ -1322,7 +1322,7 @@
     
     
     
    :-:-
    page-title-updated文档更改标题时触发 #
    close在窗口要关闭的时候触发 #
    closed在窗口关闭时触发 #
    session-end (win)因为强制关机/重启/会话注销而导致窗口会话结束时触发 #
    unresponsive网页变得未响应时触发 #
    responsive未响应的页面变成响应时触发 #
    blur当窗口失去焦点时触发 #
    focus当窗口获得焦点时触发 #
    show当窗口显示时触发 #
    hide当窗口隐藏时触发 #
    ready-to-show当页面已经渲染完成(还没有显示)窗口可以被显示时触发#
    maximize窗口最大化时触发 #
    unmaximize当窗口从最大化状态退出时触发 #
    minimize窗口最小化时触发 #
    restore当窗口从最小化状态恢复时触发 #
    will-resize (mac/win)调整窗口大小前触发 #
    resize调整窗口大小后触发 #
    resized (mac/win)当窗口完成调整大小后触发一次 #
    will-move (mac/win)窗口移动前触发 #
    move窗口移动到新位置时触发 #
    moved (mac/win)当窗口移动到新位置时触发一次 #
    enter-full-screen窗口进入全屏状态时触发 #
    leave-full-screen窗口离开全屏状态时触发 #
    enter-html-full-screen窗口进入由HTML API 触发的全屏状态时触发 #
    leave-html-full-screen窗口离开由HTML API触发的全屏状态时触发 #
    always-on-top-changed设置或取消设置窗口总是在其他窗口的顶部显示时触发 #
    app-command请求一个应用程序命令时触发 #
    scroll-touch-begin (mac)滚轮事件阶段开始时触发 #
    scroll-touch-end (mac)滚轮事件阶段结束时触发 #
    scroll-touch-edge (mac)滚轮事件阶段到达元素边缘时触发 #
    swipe三指滑动时触发 #
    rotate-gesture (mac)在触控板旋转手势上触发 #
    sheet-begin (mac)窗口打开sheet(工作表) 时触发 #
    sheet-end (mac)窗口关闭sheet(工作表) 时触发 #
    new-window-for-tab (mac)当点击了系统的新标签按钮时触发 #
    system-context-menu (win)当系统上下文菜单在窗口上触发时触发 #
    -

    实例方法

    +

    实例方法

    @@ -1863,7 +1863,7 @@
    :-:-
    win.destroy()强制关闭窗口 #
    win.close()尝试关闭窗口 #
    win.focus()聚焦于窗口 #
    win.blur()取消窗口的聚焦 #
    win.isFocused()判断窗口是否聚焦 #
    win.isDestroyed()判断窗口是否被销毁 #
    win.show()显示并聚焦于窗口 #
    win.showInactive()显示但不聚焦于窗口 #
    win.hide()隐藏窗口 #
    win.isVisible()判断窗口是否可见 #
    win.isModal()判断是否为模态窗口 #
    win.maximize()最大化窗口 #
    win.unmaximize()取消窗口最大化 #
    win.isMaximized()判断窗口是否最大化 #
    win.minimize()最小化窗口 #
    win.restore()窗口最小化状态恢复到以前的状态 #
    win.isMinimized()判断窗口是否最小化 #
    win.setFullScreen(flag)设置窗口是否应处于全屏模式 #
    win.isFullScreen()窗口当前是否已全屏 #
    win.setSimpleFullScreen(flag) (mac)进入或离开简单的全屏模式 #
    win.isSimpleFullScreen()窗口是否为简单全屏模式(pre-Lion) #
    win.isNormal()窗口是否处于正常状态(未最大化,未最小化,不在全屏模式下) #
    win.setAspectRatio(aspectRatio[, extraSize])为内容视图保持的宽高比 #
    win.setBackgroundColor(backgroundColor)颜色,格式为 Hex,RGB,RGBA,HSL,HSLA 或 CSS 命名颜色 #
    win.previewFile(path[, displayName]) (mac)要用 QuickLook 预览的文件的绝对路径 #
    win.closeFilePreview() (mac)关闭当前打开的 #
    win.setBounds(bounds[, animate])重置窗口,并且移动窗口到指定的位置 #
    win.getBounds()表示窗口的 bounds #
    win.getBackgroundColor()格式获取窗口的背景色,格式为 Hex (#RRGGBB) #
    win.setContentBounds(bounds[, animate])调整窗口的工作区 (如网页) 的大小并将其移动到所提供的边界。 #
    win.getContentBounds()窗口客户端区域的 bounds 对象 #
    win.getNormalBounds()包含正常状态下的窗口大小 #
    win.setEnabled(enable)禁用或者启用窗口 #
    win.isEnabled()窗口是否启用 #
    win.setSize(width, height[, animate])调整窗口的 widthheight #
    win.getSize()包含窗口的宽度和高度 #
    win.setContentSize(width, height[, animate])将窗口的工作区 (如网页) 的大小调整为 widthheight #
    win.getContentSize()包含窗口的宽度和高度 #
    win.setMinimumSize(width, height)设置窗口最小化的 widthheight #
    win.getMinimumSize()包含窗口最小化的宽度和高度 #
    win.setMaximumSize(width, height)设置窗口最大化的 widthheight #
    win.getMaximumSize()包含窗口最大化的宽度和高度 #
    win.setResizable(resizable)设置用户是否可以手动调整窗口大小 #
    win.isResizable()用户是否可以手动调整窗口大小 #
    win.setMovable(movable) (mac/win)设置用户是否可以移动窗口 #
    win.isMovable() (mac/win)窗口是否可以被用户拖动,在 Linux 上总是返回 true #
    win.setMinimizable(minimizable) (mac/win)设置用户是否可以手动将窗口最小化 #
    win.isMinimizable() (mac/win)用户是否可以手动最小化窗口 #
    win.setMaximizable(maximizable) (mac/win)设置用户是否可以手动最大化窗口 #
    win.isMaximizable() (mac/win)窗口是否可以最大化 #
    win.setFullScreenable(fullscreenable)设置最大化/缩放窗口按钮是切换全屏模式还是最大化窗口 #
    win.isFullScreenable()最大化/缩放窗口按钮是切换全屏模式还是最大化窗口 #
    win.setClosable(closable) (mac/win)设置用户是否可以手动关闭窗口。 在Linux上不起作用 #
    win.isClosable() (mac/win)窗口是否被用户关闭了 #
    win.setAlwaysOnTop(flag[, level][, relativeLevel])设置窗口是否应始终显示在其他窗口的前面 #
    win.isAlwaysOnTop()当前窗口是否始终在其它窗口之前 #
    win.moveAbove(mediaSourceId)将窗口按z轴顺序移动到源窗口前面 #
    win.moveTop()无论焦点如何, 将窗口移至顶端(z轴上的顺序) #
    win.center()将窗口移动到屏幕中央 #
    win.setPosition(x, y[, animate])将窗口移动到 xy #
    win.getPosition()返回一个包含当前窗口位置的数组 #
    win.setTitle(title)将原生窗口的标题更改为 title #
    win.getTitle()网页的标题可以与原生窗口的标题不同 #
    win.setSheetOffset(offsetY[, offsetX]) (mac/win)改变macOS上sheet组件的附着点,默认情况下,sheet贴在窗口边框正下方 #
    win.flashFrame(flag)启动或停止闪烁窗口, 以吸引用户的注意 #
    win.setSkipTaskbar(skip) (mac/win)使窗口不显示在任务栏中 #
    win.setKiosk(flag)进入或离开 kiosk 模式 #
    win.isKiosk()判断窗口是否处于kiosk模式 #
    win.isTabletMode() (win)此 API 返回 窗口是否在平板电脑模式下,并且 调整大小 事件可以用于监听对平板模式的更改 #
    win.getMediaSourceId()DesktopCapturerSource 的 id 格式的窗口 id #
    win.getNativeWindowHandle()窗口的平台特定句柄 #
    win.hookWindowMessage(message, callback) (win)钩住窗口消息。 当消息到达 WndProc 时调用 callback #
    win.isWindowMessageHooked(message) (win)返回 boolean - true 或false,具体取决于是否钩挂了消息 #
    win.unhookWindowMessage(message) (win)取消窗口信息的钩子 #
    win.unhookAllWindowMessages() (win)取消所有窗口信息的钩子 #
    win.setRepresentedFilename(filename) (mac)设置窗口所代表的文件的路径名,并且将这个文件的图标放在窗口标题栏上 #
    win.getRepresentedFilename() (mac)获取窗口当前文件路径 #
    win.setDocumentEdited(edited) (mac)明确指出窗口文档是否可以编辑,如果设置为true则将标题栏的图标变成灰色 #
    win.isDocumentEdited() (mac)判断当前窗口文档是否可编辑 #
    win.focusOnWebView()#
    win.blurWebView()#
    win.capturePage([rect])在 rect 内捕获页面的快照 #
    win.loadURL(url[, options])加载页面 #
    win.loadFile(filePath[, options])加载页面 #
    win.reload()webContents.reload 相同 #
    win.setMenu(menu) (win/linux)menu 设置为窗口的菜单栏 #
    win.removeMenu() (win)删除窗口的菜单栏 #
    win.setProgressBar(progress[, options])设置进度条的进度值 #
    win.setOverlayIcon(overlay, description) (win)设置进度条的进度值。 有效范围为 [0, 1.0] #
    win.setHasShadow(hasShadow)设置窗口是否有阴影 #
    win.hasShadow()判断窗口是否有阴影 #
    win.setOpacity(opacity) (win/mac)设置窗口的不透明度。 在Linux上不起作用。 超出界限的数值被限制在 [0, 1] 范围内 #
    win.getOpacity()介于 0.0 (完全透明) 和 1.0 (完全不透明) 之间。在Linux上,始终返回 1 #
    win.setShape(rects) (win/linux)对窗口形状的设置决定了窗口内系统允许绘制与用户交互的区域 #
    win.setThumbarButtons(buttons) (win)将指定的一组按钮添加到菜单栏的缩图工具栏上 #
    win.setThumbnailClip(region) (win)将窗口的区域设置为在任务栏中悬停在窗口上方时显示的缩略图图像 #
    win.setThumbnailToolTip(toolTip) (win)设置在任务栏中悬停在窗口缩略图上时显示的工具提示 #
    win.setAppDetails(options) (win)设置窗口任务栏按钮的属性 #
    win.showDefinitionForSelection() (mac)webContents.showDefinitionForSelection() 相同 #
    win.setIcon(icon) (win/linux)设置窗口图标 #
    win.setWindowButtonVisibility(visible) (mac)设置是否窗口交通灯需要显示 #
    win.setAutoHideMenuBar(hide) (win/linux)设置窗口菜单栏是否自动隐藏 #
    win.isMenuBarAutoHide() (win/linux)判断窗口的菜单栏是否自动隐藏 #
    win.setMenuBarVisibility(visible) (win/linux)设置菜单栏是否可见 #
    win.isMenuBarVisible() (win/linux)判断窗口的菜单栏是否可见 #
    win.setVisibleOnAllWorkspaces(visible[, options]) (mac/linux)设置窗口是否在所有工作空间上可见 #
    win.isVisibleOnAllWorkspaces() (mac/linux)判断窗口是否在所有工作空间上可见 #
    win.setIgnoreMouseEvents(ignore[, options])忽略窗口内的所有鼠标事件 #
    win.setContentProtection(enable) (mac/linux)防止窗口内容被其他应用捕获 #
    win.setFocusable(focusable) (mac/linux)设置窗口是否可聚焦 #
    win.isFocusable() (mac/linux)返回当前窗口是否可以作为焦点被选中 #
    win.setParentWindow(parent)设置 parent 为当前窗口的父窗口 #
    win.getParentWindow()返回 BrowserWindow/null - 如果没有父窗口则为 null #
    win.getChildWindows()返回 BrowserWindow[] - 首页的子窗口 #
    win.setAutoHideCursor(autoHide) (mac)设置输入时是否隐藏光标 #
    win.selectPreviousTab() (mac)当启用本地选项卡,并且窗口中有另一个标签时,选择上一个选项卡 #
    win.selectNextTab() (mac)当启用本地选项卡,并且窗口中有另一个标签时,选择下一个选项卡 #
    win.mergeAllWindows() (mac)当启用本地选项卡并且存在多个打开窗口时,将所有窗口合并到一个带有多个选项卡的窗口中 #
    win.moveTabToNewWindow() (mac)如果启用了本机选项卡并且当前窗口中有多个选项卡,则将当前选项卡移动到新窗口中 #
    win.toggleTabBar() (mac)如果启用了本机选项卡并且当前窗口中只有一个选项卡,则切换选项卡栏是否可见 #
    win.addTabbedWindow(browserWindow) (mac)在该窗口中添加一个窗口作为选项卡,位于窗口实例的选项卡之后 #
    win.setVibrancy(type) (mac)在浏览器窗口中添加一个动态特效。 传递 null 或空字符串将会移除窗口上的动态效果 #
    win.setTrafficLightPosition(position) (mac)在无框窗口中设置自定义控制按钮的位置 #
    win.getTrafficLightPosition() (mac)在无框窗口中自定义控制按钮的位置 #
    win.setTouchBar(touchBar) (mac)设置窗口的触摸条布局 设置为 null 或undefined将清除触摸条 #
    win.setBrowserView(browserView) (实验)#
    win.getBrowserView() (实验功能)#
    win.addBrowserView(browserView) (实验功能)#
    win.removeBrowserView(browserView) (实验功能)#
    win.setTopBrowserView(browserView) (实验功能)#
    win.getBrowserViews() (实验功能)#
    win.setTitleBarOverlay(options) (win)在已开启 Window Controls Overlay 的窗口上,此方法将更新标题栏叠加层的样式 #
    -

    静态方法

    +

    静态方法

    @@ -1895,7 +1895,7 @@
    :-:-
    BrowserWindow.getAllWindows()所有打开的窗口的数组 #
    BrowserWindow.getFocusedWindow()当前获得焦点的窗口 #
    BrowserWindow.fromWebContents(webContents)拥有给定 webContents 窗口 #
    BrowserWindow.fromBrowserView(browserView)拥有给定 browserView 窗口 #
    BrowserWindow.fromId(id)带有给定 id 的窗口 #
    -

    实例属性

    +

    实例属性

    const { BrowserWindow } = require('electron')
     // 本例中 `win` 是我们的实例
    @@ -1997,7 +1997,7 @@
     
     
     
    :-:-
    win.webContents此窗口拥有的 WebContents 对象 #
    win.id代表了窗口的唯一ID #
    win.autoHideMenuBar决定窗口菜单栏是否自动隐藏 #
    win.simpleFullScreen决定窗口是否处于简单(pre-Lion) 全屏模式 #
    win.fullScreen决定窗口是否处于全屏模式 #
    win.focusable确定窗口是否可作为焦点被选中的属性 #
    win.visibleOnAllWorkspaces决定窗口是否在所有工作区中可见 #
    win.shadow决定窗口是否显示阴影 #
    win.menuBarVisible决定菜单栏是否可见 #
    win.kiosk决定窗口是否处于kiosk模式 #
    win.documentEdited指明窗口文档是否已被编辑 #
    win.representedFilename确定窗口代表的文件的路径名 #
    win.title用于确定原生窗口的标题 #
    win.minimizable决定窗口是否可被用户手动最小化 #
    win.maximizable决定窗口是否可被用户手动最大化 #
    win.fullScreenable决定是切换全屏模式还是最大化窗口 #
    win.resizable决定窗口是否可被用户手动调整大小 #
    win.closable决定窗口是否可被用户手动关闭 #
    win.movable决定窗口是否可被用户移动 #
    win.excludedFromShownWindowsMenu决定窗口是否从 Windows 菜单排除 #
    win.accessibleTitle定义一个仅为辅助工具提供的替代标题 #
    -

    另见

    +

    另见

    @@ -2014,8 +2014,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -2026,7 +2024,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/emmet.html b/docs/emmet.html index 96eb3243..26e430a7 100644 --- a/docs/emmet.html +++ b/docs/emmet.html @@ -34,14 +34,14 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    Emmet 备忘清单

    Emmet 是一个用于提升 HTML 和 CSS 代码编写的 Web 开发人员工具包,它允许您使用著名的 CSS 选择器以光速编写大型 HTML 代码块。

    Emmet 语法

    -

    Emmet 语法

    +

    入门

    让我们开始将您的开发提高到光速。

    -

    乘法:*

    +

    乘法:*

    ul>li*5

    <ul>
         <li></li>
    @@ -59,7 +59,7 @@
         <li></li>
     </ul>
     
    -

    孩子: >

    +

    孩子: >

    nav>ul>li

    <nav>
         <ul>
    @@ -67,7 +67,7 @@
         </ul>
     </nav>
     
    -

    自定义属性

    +

    自定义属性

    p[title="Hello world"]

    <p title="Hello world"></p>
    @@ -78,14 +78,14 @@
     

    [a='value1' b="value2"]

    <div a="value1" b="value2"></div>
     
    -

    文本: {}

    +

    文本: {}

    a{Click me}

    <a href="">Click me</a>
     

    p>{Click }+a{here}+{ 继续}

    <p>Click <a href="">here</a> 继续</p>
     
    -

    ID 和 CLASS 属性

    +

    ID 和 CLASS 属性

    #header

    <div id="header"></div>
    @@ -99,7 +99,7 @@
     

    p.class1.class2.class3

    <p class="class1 class2 class3"></p>
     
    -

    隐式标签名称

    +

    隐式标签名称

    .class

    <div class="class"></div>
    @@ -119,13 +119,13 @@
         </tr>
     </table>
     
    -

    兄弟: +

    +

    兄弟: +

    div+p+bq

    <div></div>
     <p></p>
     <blockquote></blockquote>
     
    -

    $

    +

    $

    ul>li.item$*3

    <ul>
    @@ -160,7 +160,7 @@
         <li class="item4"></li>
     </ul>
     
    -

    上一层: ^

    +

    上一层: ^

    div+div>p>span+em^bq

    <div></div>
     <div>
    @@ -175,7 +175,7 @@
     </div>
     <blockquote></blockquote>
     
    -

    分组: ()

    +

    分组: ()

    div>(header>ul>li*2>a)+footer>p

    <div>
         <header>
    @@ -206,8 +206,8 @@
         <p></p>
     </footer>
     
    -

    HTML

    -

    HTML 1

    +

    HTML

    +

    HTML 1

    ! 或者 html:5

    <!DOCTYPE html>
     <html lang="en">
    @@ -414,7 +414,7 @@
     

    input:email 别名 inp[type=email]

    <input type="email" name="" id="" />
     
    -

    HTML 2

    +

    HTML 2

    input:url 别名 inp[type=url]

    <input type="url" name="" id="" />
     
    @@ -614,7 +614,7 @@

    det 别名 details

    <details></details>
     
    -

    HTML 3

    +

    HTML 3

    cmd Alias of command

    <command />
    @@ -836,8 +836,8 @@ Alias of command

    ${child} <!--<![endif]-->
    -

    CSS

    -

    视觉格式

    +

    CSS

    +

    视觉格式

    @@ -1217,7 +1217,7 @@ Alias of command

    :-:-
    posposition:relative;
    pos:sposition:static;
    pos:aposition:absolute;
    pos:rposition:relative;
    pos:fposition:fixed;
    ttop:;
    t:atop:auto;
    rright:;
    r:aright:auto;
    bbottom:;
    b:abottom:auto;
    lleft:;
    l:aleft:auto;
    zz-index:;
    z:az-index:auto;
    flfloat:left;
    fl:nfloat:none;
    fl:lfloat:left;
    fl:rfloat:right;
    clclear:both;
    cl:nclear:none;
    cl:lclear:left;
    cl:rclear:right;
    cl:bclear:both;
    ddisplay:block;
    d:ndisplay:none;
    d:bdisplay:block;
    d:fdisplay:flex;
    d:ifdisplay:inline-flex;
    d:idisplay:inline;
    d:ibdisplay:inline-block;
    d:lidisplay:list-item;
    d:ridisplay:run-in;
    d:cpdisplay:compact;
    d:tbdisplay:table;
    d:itbdisplay:inline-table;
    d:tbcpdisplay:table-caption;
    d:tbcldisplay:table-column;
    d:tbclgdisplay:table-column-group;
    d:tbhgdisplay:table-header-group;
    d:tbfgdisplay:table-footer-group;
    d:tbrdisplay:table-row;
    d:tbrgdisplay:table-row-group;
    d:tbcdisplay:table-cell;
    d:rbdisplay:ruby;
    d:rbbdisplay:ruby-base;
    d:rbbgdisplay:ruby-base-group;
    d:rbtdisplay:ruby-text;
    d:rbtgdisplay:ruby-text-group;
    vvisibility:hidden;
    v:vvisibility:visible;
    v:hvisibility:hidden;
    v:cvisibility:collapse;
    ovoverflow:hidden;
    ov:voverflow:visible;
    ov:hoverflow:hidden;
    ov:soverflow:scroll;
    ov:aoverflow:auto;
    ovxoverflow-x:hidden;
    ovx:voverflow-x:visible;
    ovx:hoverflow-x:hidden;
    ovx:soverflow-x:scroll;
    ovx:aoverflow-x:auto;
    ovyoverflow-y:hidden;
    ovy:voverflow-y:visible;
    ovy:hoverflow-y:hidden;
    ovy:soverflow-y:scroll;
    ovy:aoverflow-y:auto;
    ovsoverflow-style:scrollbar;
    ovs:aoverflow-style:auto;
    ovs:soverflow-style:scrollbar;
    ovs:poverflow-style:panner;
    ovs:moverflow-style:move;
    ovs:mqoverflow-style:marquee;
    zoo, zmzoom:1;
    cpclip:;
    cp:aclip:auto;
    cp:rclip:rect(top right bottom left);
    rszresize:;
    rsz:nresize:none;
    rsz:bresize:both;
    rsz:hresize:horizontal;
    rsz:vresize:vertical;
    curcursor:${pointer};
    cur:acursor:auto;
    cur:dcursor:default;
    cur:ccursor:crosshair;
    cur:hacursor:hand;
    cur:hecursor:help;
    cur:mcursor:move;
    cur:pcursor:pointer;
    cur:tcursor:text;
    -

    边距和填充

    +

    边距和填充

    @@ -1288,7 +1288,7 @@ Alias of command

    :-:-
    mmargin:;
    m:amargin:auto;
    mtmargin-top:;
    mt:amargin-top:auto;
    mrmargin-right:;
    mr:amargin-right:auto;
    mbmargin-bottom:;
    mb:amargin-bottom:auto;
    mlmargin-left:;
    ml:amargin-left:auto;
    ppadding:;
    ptpadding-top:;
    prpadding-right:;
    pbpadding-bottom:;
    plpadding-left:;
    -

    盒子尺寸

    +

    盒子尺寸

    @@ -1367,7 +1367,7 @@ Alias of command

    :-:-
    bxzbox-sizing:border-box;
    bxz:cbbox-sizing:content-box;
    bxz:bbbox-sizing:border-box;
    bxshbox-shadow:inset hoff voff blur color;
    bxsh:rbox-shadow:inset hoff voff blur spread rgb(0, 0, 0);
    bxsh:rabox-shadow:inset h v blur spread rgba(0, 0, 0, .5);
    bxsh:nbox-shadow:none;
    wwidth:;
    w:awidth:auto;
    hheight:;
    h:aheight:auto;
    mawmax-width:;
    maw:nmax-width:none;
    mahmax-height:;
    mah:nmax-height:none;
    miwmin-width:;
    mihmin-height:;
    -

    字体

    +

    字体

    @@ -1599,7 +1599,7 @@ Alias of command

    :-:-
    ffont:;
    f+font:1em Arial,sans-serif;
    fwfont-weight:;
    fw:nfont-weight:normal;
    fw:bfont-weight:bold;
    fw:brfont-weight:bolder;
    fw:lrfont-weight:lighter;
    fsfont-style:${italic};
    fs:nfont-style:normal;
    fs:ifont-style:italic;
    fs:ofont-style:oblique;
    fvfont-variant:;
    fv:nfont-variant:normal;
    fv:scfont-variant:small-caps;
    fzfont-size:;
    fzafont-size-adjust:;
    fza:nfont-size-adjust:none;
    fffont-family:;
    ff:sfont-family:serif;
    ff:ssfont-family:sans-serif;
    ff:cfont-family:cursive;
    ff:ffont-family:fantasy;
    ff:mfont-family:monospace;
    ff:afont-family: Arial, "Helvetica Neue", Helvetica, sans-serif;
    ff:tfont-family: "Times New Roman", Times, Baskerville, Georgia, serif;
    ff:vfont-family: Verdana, Geneva, sans-serif;
    feffont-effect:;
    fef:nfont-effect:none;
    fef:egfont-effect:engrave;
    fef:ebfont-effect:emboss;
    fef:ofont-effect:outline;
    femfont-emphasize:;
    fempfont-emphasize-position:;
    femp:bfont-emphasize-position:before;
    femp:afont-emphasize-position:after;
    femsfont-emphasize-style:;
    fems:nfont-emphasize-style:none;
    fems:acfont-emphasize-style:accent;
    fems:dtfont-emphasize-style:dot;
    fems:cfont-emphasize-style:circle;
    fems:dsfont-emphasize-style:disc;
    fsmfont-smooth:;
    fsm:afont-smooth:auto;
    fsm:nfont-smooth:never;
    fsm:awfont-smooth:always;
    fstfont-stretch:;
    fst:nfont-stretch:normal;
    fst:ucfont-stretch:ultra-condensed;
    fst:ecfont-stretch:extra-condensed;
    fst:cfont-stretch:condensed;
    fst:scfont-stretch:semi-condensed;
    fst:sefont-stretch:semi-expanded;
    fst:efont-stretch:expanded;
    fst:eefont-stretch:extra-expanded;
    fst:uefont-stretch:ultra-expanded;
    -

    背景

    +

    背景

    @@ -1754,7 +1754,7 @@ Alias of command

    :-:-
    bgbackground:#000;
    bg+background:#fff url() 0 0 no-repeat;
    bg:nbackground:none;
    bgcbackground-color:#fff;
    bgc:tbackground-color:transparent;
    bgibackground-image:url();
    bgi:nbackground-image:none;
    bgrbackground-repeat:;
    bgr:nbackground-repeat:no-repeat;
    bgr:xbackground-repeat:repeat-x;
    bgr:ybackground-repeat:repeat-y;
    bgr:spbackground-repeat:space;
    bgr:rdbackground-repeat:round;
    bgabackground-attachment:;
    bga:fbackground-attachment:fixed;
    bga:sbackground-attachment:scroll;
    bgpbackground-position:0 0;
    bgpxbackground-position-x:;
    bgpybackground-position-y:;
    bgbkbackground-break:;
    bgbk:bbbackground-break:bounding-box;
    bgbk:ebbackground-break:each-box;
    bgbk:cbackground-break:continuous;
    bgcpbackground-clip:padding-box;
    bgcp:bbbackground-clip:border-box;
    bgcp:pbbackground-clip:padding-box;
    bgcp:cbbackground-clip:content-box;
    bgcp:ncbackground-clip:no-clip;
    bgobackground-origin:;
    bgo:pbbackground-origin:padding-box;
    bgo:bbbackground-origin:border-box;
    bgo:cbbackground-origin:content-box;
    bgszbackground-size:;
    bgsz:abackground-size:auto;
    bgsz:ctbackground-size:contain;
    bgsz:cvbackground-size:cover;
    -

    Lists

    +

    Lists

    @@ -1829,7 +1829,7 @@ Alias of command

    :-:-
    lislist-style:;
    lis:nlist-style:none;
    lisplist-style-position:;
    lisp:ilist-style-position:inside;
    lisp:olist-style-position:outside;
    listlist-style-type:;
    list:nlist-style-type:none;
    list:dlist-style-type:disc;
    list:clist-style-type:circle;
    list:slist-style-type:square;
    list:dclist-style-type:decimal;
    list:dclzlist-style-type:decimal-leading-zero;
    list:lrlist-style-type:lower-roman;
    list:urlist-style-type:upper-roman;
    lisilist-style-image:;
    lisi:nlist-style-image:none;
    -

    Tables

    +

    Tables

    @@ -1876,7 +1876,7 @@ Alias of command

    :-:-
    tbltable-layout:;
    tbl:atable-layout:auto;
    tbl:ftable-layout:fixed;
    cpscaption-side:;
    cps:tcaption-side:top;
    cps:bcaption-side:bottom;
    ecempty-cells:;
    ec:sempty-cells:show;
    ec:hempty-cells:hide;
    -

    颜色

    +

    颜色

    @@ -1903,7 +1903,7 @@ Alias of command

    :-:-
    ccolor:#000;
    c:rcolor:rgb(0, 0, 0);
    c:racolor:rgba(0, 0, 0, .5);
    opopacity:;
    -

    文本

    +

    文本

    @@ -2287,7 +2287,7 @@ Alias of command

    :-:-
    vavertical-align:top;
    va:supvertical-align:super;
    va:tvertical-align:top;
    va:ttvertical-align:text-top;
    va:mvertical-align:middle;
    va:blvertical-align:baseline;
    va:bvertical-align:bottom;
    va:tbvertical-align:text-bottom;
    va:subvertical-align:sub;
    tatext-align:left;
    ta:ltext-align:left;
    ta:ctext-align:center;
    ta:rtext-align:right;
    ta:jtext-align:justify;
    ta-lsttext-align-last:;
    tal:atext-align-last:auto;
    tal:ltext-align-last:left;
    tal:ctext-align-last:center;
    tal:rtext-align-last:right;
    tdtext-decoration:none;
    td:ntext-decoration:none;
    td:utext-decoration:underline;
    td:otext-decoration:overline;
    td:ltext-decoration:line-through;
    tetext-emphasis:;
    te:ntext-emphasis:none;
    te:actext-emphasis:accent;
    te:dttext-emphasis:dot;
    te:ctext-emphasis:circle;
    te:dstext-emphasis:disc;
    te:btext-emphasis:before;
    te:atext-emphasis:after;
    thtext-height:;
    th:atext-height:auto;
    th:ftext-height:font-size;
    th:ttext-height:text-size;
    th:mtext-height:max-size;
    titext-indent:;
    ti:-text-indent:-9999px;
    tjtext-justify:;
    tj:atext-justify:auto;
    tj:iwtext-justify:inter-word;
    tj:iitext-justify:inter-ideograph;
    tj:ictext-justify:inter-cluster;
    tj:dtext-justify:distribute;
    tj:ktext-justify:kashida;
    tj:ttext-justify:tibetan;
    totext-outline:;
    to+text-outline:0 0 #000;
    to:ntext-outline:none;
    trtext-replace:;
    tr:ntext-replace:none;
    tttext-transform:uppercase;
    tt:ntext-transform:none;
    tt:ctext-transform:capitalize;
    tt:utext-transform:uppercase;
    tt:ltext-transform:lowercase;
    twtext-wrap:;
    tw:ntext-wrap:normal;
    tw:notext-wrap:none;
    tw:utext-wrap:unrestricted;
    tw:stext-wrap:suppress;
    tshtext-shadow:hoff voff blur #000;
    tsh:rtext-shadow:h v blur rgb(0, 0, 0);
    tsh:ratext-shadow:h v blur rgba(0, 0, 0, .5);
    tsh+text-shadow:0 0 0 #000;
    tsh:ntext-shadow:none;
    lhline-height:;
    ltsletter-spacing:;
    lts-nletter-spacing:normal;
    whswhite-space:;
    whs:nwhite-space:normal;
    whs:pwhite-space:pre;
    whs:nwwhite-space:nowrap;
    whs:pwwhite-space:pre-wrap;
    whs:plwhite-space:pre-line;
    whscwhite-space-collapse:;
    whsc:nwhite-space-collapse:normal;
    whsc:kwhite-space-collapse:keep-all;
    whsc:lwhite-space-collapse:loose;
    whsc:bswhite-space-collapse:break-strict;
    whsc:bawhite-space-collapse:break-all;
    wobword-break:;
    wob:nword-break:normal;
    wob:kword-break:keep-all;
    wob:baword-break:break-all;
    wosword-spacing:;
    wowword-wrap:;
    wow:nmword-wrap:normal;
    wow:nword-wrap:none;
    wow:uword-wrap:unrestricted;
    wow:sword-wrap:suppress;
    wow:bword-wrap:break-word;
    -

    Border

    +

    Border

    @@ -2691,7 +2691,7 @@ Alias of command

    :-:-
    bdborder:;
    bd+border:1px solid #000;
    bd:nborder:none;
    bdbkborder-break:close;
    bdbk:cborder-break:close;
    bdclborder-collapse:;
    bdcl:cborder-collapse:collapse;
    bdcl:sborder-collapse:separate;
    bdcborder-color:#000;
    bdc:tborder-color:transparent;
    bdiborder-image:url();
    bdi:nborder-image:none;
    bdtiborder-top-image:url();
    bdti:nborder-top-image:none;
    bdriborder-right-image:url();
    bdri:nborder-right-image:none;
    bdbiborder-bottom-image:url();
    bdbi:nborder-bottom-image:none;
    bdliborder-left-image:url();
    bdli:nborder-left-image:none;
    bdciborder-corner-image:url();
    bdci:nborder-corner-image:none;
    bdci:cborder-corner-image:continue;
    bdtliborder-top-left-image:url();
    bdtli:nborder-top-left-image:none;
    bdtli:cborder-top-left-image:continue;
    bdtriborder-top-right-image:url();
    bdtri:nborder-top-right-image:none;
    bdtri:cborder-top-right-image:continue;
    bdbriborder-bottom-right-image:url();
    bdbri:nborder-bottom-right-image:none;
    bdbri:cborder-bottom-right-image:continue;
    bdbliborder-bottom-left-image:url();
    bdbli:nborder-bottom-left-image:none;
    bdbli:cborder-bottom-left-image:continue;
    bdfborder-fit:repeat;
    bdf:cborder-fit:clip;
    bdf:rborder-fit:repeat;
    bdf:scborder-fit:scale;
    bdf:stborder-fit:stretch;
    bdf:owborder-fit:overwrite;
    bdf:ofborder-fit:overflow;
    bdf:spborder-fit:space;
    bdlenborder-length:;
    bdlen:aborder-length:auto;
    bdspborder-spacing:;
    bdsborder-style:;
    bds:nborder-style:none;
    bds:hborder-style:hidden;
    bds:dtborder-style:dotted;
    bds:dsborder-style:dashed;
    bds:sborder-style:solid;
    bds:dbborder-style:double;
    bds:dtdsborder-style:dot-dash;
    bds:dtdtdsborder-style:dot-dot-dash;
    bds:wborder-style:wave;
    bds:gborder-style:groove;
    bds:rborder-style:ridge;
    bds:iborder-style:inset;
    bds:oborder-style:outset;
    bdwborder-width:;
    bdt, btborder-top:;
    bdt+border-top:1px solid #000;
    bdt:nborder-top:none;
    bdtwborder-top-width:;
    bdtsborder-top-style:;
    bdts:nborder-top-style:none;
    bdtcborder-top-color:#000;
    bdtc:tborder-top-color:transparent;
    bdr, brborder-right:;
    bdr+border-right:1px solid #000;
    bdr:nborder-right:none;
    bdrwborder-right-width:;
    bdrstborder-right-style:;
    bdrst:nborder-right-style:none;
    bdrcborder-right-color:#000;
    bdrc:tborder-right-color:transparent;
    bdb, bbborder-bottom:;
    bdb+border-bottom:1px solid #000;
    bdb:nborder-bottom:none;
    bdbwborder-bottom-width:;
    bdbsborder-bottom-style:;
    bdbs:nborder-bottom-style:none;
    bdbcborder-bottom-color:#000;
    bdbc:tborder-bottom-color:transparent;
    bdl, blborder-left:;
    bdl+border-left:1px solid #000;
    bdl:nborder-left:none;
    bdlwborder-left-width:;
    bdlsborder-left-style:;
    bdls:nborder-left-style:none;
    bdlcborder-left-color:#000;
    bdlc:tborder-left-color:transparent;
    bdrsborder-radius:;
    bdtrrsborder-top-right-radius:;
    bdtlrsborder-top-left-radius:;
    bdbrrsborder-bottom-right-radius:;
    bdblrsborder-bottom-left-radius:;
    -

    生成的内容

    +

    生成的内容

    @@ -2766,7 +2766,7 @@ Alias of command

    :-:-
    cntcontent:'';
    cnt:n, ct:ncontent:normal;
    cnt:oq, ct:oqcontent:open-quote;
    cnt:noq, ct:noqcontent:no-open-quote;
    cnt:cq, ct:cqcontent:close-quote;
    cnt:ncq, ct:ncqcontent:no-close-quote;
    cnt:a, ct:acontent:attr();
    cnt:c, ct:ccontent:counter();
    cnt:cs, ct:cscontent:counters();
    ctcontent:;
    qquotes:;
    q:nquotes:none;
    q:ruquotes:'\00AB' '\00BB' '\201E' '\201C';
    q:enquotes:'\201C' '\201D' '\2018' '\2019';
    coicounter-increment:;
    corcounter-reset:;
    -

    Outline

    +

    Outline

    @@ -2853,7 +2853,7 @@ Alias of command

    :-:-
    oloutline:;
    ol:noutline:none;
    olooutline-offset:;
    olwoutline-width:;
    olw:tnoutline-width:thin;
    olw:moutline-width:medium;
    olw:tcoutline-width:thick;
    olsoutline-style:;
    ols:noutline-style:none;
    ols:dtoutline-style:dotted;
    ols:dsoutline-style:dashed;
    ols:soutline-style:solid;
    ols:dboutline-style:double;
    ols:goutline-style:groove;
    ols:routline-style:ridge;
    ols:ioutline-style:inset;
    ols:ooutline-style:outset;
    olcoutline-color:#000;
    olc:ioutline-color:invert;
    -

    Print

    +

    Print

    @@ -2924,7 +2924,7 @@ Alias of command

    :-:-
    pgbbpage-break-before:;
    pgbb:aupage-break-before:auto;
    pgbb:alpage-break-before:always;
    pgbb:lpage-break-before:left;
    pgbb:rpage-break-before:right;
    pgbipage-break-inside:;
    pgbi:aupage-break-inside:auto;
    pgbi:avpage-break-inside:avoid;
    pgbapage-break-after:;
    pgba:aupage-break-after:auto;
    pgba:alpage-break-after:always;
    pgba:lpage-break-after:left;
    pgba:rpage-break-after:right;
    orporphans:;
    widwidows:;
    -

    Others

    +

    Others

    @@ -2939,13 +2939,13 @@ Alias of command

    :-:-
    !!important
    -

    @f

    +

    @f

    @font-face {
         font-family:;
         src:url(|);
     }
     
    -

    @f+

    +

    @f+

    @font-face {
         font-family: 'FontName';
         src: url('FileName.eot');
    @@ -2957,10 +2957,10 @@ Alias of command

    font-weight: normal; }
    -

    @i, @import

    +

    @i, @import

    @import url();
     
    -

    @kf

    +

    @kf

    @-webkit-keyframes identifier {
         from {  }
         to {  }
    @@ -2978,12 +2978,12 @@ Alias of command

    to { } }
    -

    @m, @media

    +

    @m, @media

    @media screen {
         
     }
     
    -

    transform

    +

    transform

    @@ -3070,7 +3070,7 @@ Alias of command

    :-:-
    trftransform:;
    trf:rtransform: rotate(angle);
    trf:rxtransform: rotateX(angle);
    trf:rytransform: rotateY(angle);
    trf:rztransform: rotateZ(angle);
    trf:sctransform: scale(x, y);
    trf:sc3transform: scale3d(x, y, z);
    trf:scxtransform: scaleX(x);
    trf:scytransform: scaleY(y);
    trf:scztransform: scaleZ(z);
    trf:skxtransform: skewX(angle);
    trf:skytransform: skewY(angle);
    trf:ttransform: translate(x, y);
    trf:t3transform: translate3d(tx, ty, tz);
    trf:txtransform: translateX(x);
    trf:tytransform: translateY(y);
    trf:tztransform: translateZ(z);
    trfotransform-origin:;
    trfstransform-style:preserve-3d;
    -

    Other

    +

    Other

    @@ -3379,7 +3379,7 @@ Alias of command

    :-:-
    acalign-content:;
    ac:calign-content:center;
    ac:fealign-content:flex-end;
    ac:fsalign-content:flex-start;
    ac:salign-content:stretch;
    ac:saalign-content:space-around;
    ac:sbalign-content:space-between;
    aialign-items:;
    ai:balign-items:baseline;
    ai:calign-items:center;
    ai:fealign-items:flex-end;
    ai:fsalign-items:flex-start;
    ai:salign-items:stretch;
    apappearance:${none};
    asalign-self:;
    as:aalign-self:auto;
    as:balign-self:baseline;
    as:calign-self:center;
    as:fealign-self:flex-end;
    as:fsalign-self:flex-start;
    as:salign-self:stretch;
    bfvbackface-visibility:;
    bfv:hbackface-visibility:hidden;
    bfv:vbackface-visibility:visible;
    bg:iefilter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='x.png',sizingMethod='crop');
    cm/* ${child} */
    colmcolumns:;
    colmccolumn-count:;
    colmfcolumn-fill:;
    colmgcolumn-gap:;
    colmrcolumn-rule:;
    colmrccolumn-rule-color:;
    colmrscolumn-rule-style:;
    colmrwcolumn-rule-width:;
    colmscolumn-span:;
    colmwcolumn-width:;
    d:ib+display: inline-block;
    *display: inline;
    *zoom: 1;
    jcjustify-content:;
    jc:cjustify-content:center;
    jc:fejustify-content:flex-end;
    jc:fsjustify-content:flex-start;
    jc:sajustify-content:space-around;
    jc:sbjustify-content:space-between;
    marmax-resolution:res;
    mirmin-resolution:res;
    op+opacity: ; filter: alpha(opacity=);
    op:iefilter:progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
    op:ms-ms-filter:'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';
    ordorder:;
    oriorientation:;
    ori:lorientation:landscape;
    ori:porientation:portrait;
    tovtext-overflow:${ellipsis};
    tov:ctext-overflow:clip;
    tov:etext-overflow:ellipsis;
    trstransition:prop time;
    trsdetransition-delay:time;
    trsdutransition-duration:time;
    trsptransition-property:prop;
    trstftransition-timing-function:tfunc;
    ususer-select:${none};
    wfsm-webkit-font-smoothing:${antialiased};
    wfsm:a-webkit-font-smoothing:antialiased;
    wfsm:n-webkit-font-smoothing:none;
    wfsm:s, wfsm:sa-webkit-font-smoothing:subpixel-antialiased;
    wmwriting-mode:lr-tb;
    wm:btlwriting-mode:bt-lr;
    wm:btrwriting-mode:bt-rl;
    wm:lrbwriting-mode:lr-bt;
    wm:lrtwriting-mode:lr-tb;
    wm:rlbwriting-mode:rl-bt;
    wm:rltwriting-mode:rl-tb;
    wm:tblwriting-mode:tb-lr;
    wm:tbrwriting-mode:tb-rl;
    -

    animation

    +

    animation

    @@ -3494,7 +3494,7 @@ Alias of command

    :-:-
    animanimation:;
    anim-animation:name duration timing-function delay iteration-count direction fill-mode;
    animdelanimation-delay:time;
    animdiranimation-direction:normal;
    animdir:aanimation-direction:alternate;
    animdir:aranimation-direction:alternate-reverse;
    animdir:nanimation-direction:normal;
    animdir:ranimation-direction:reverse;
    animduranimation-duration:0s;
    animfmanimation-fill-mode:both;
    animfm:banimation-fill-mode:backwards;
    animfm:bt, animfm:bhanimation-fill-mode:both;
    animfm:fanimation-fill-mode:forwards;
    animicanimation-iteration-count:1;
    animic:ianimation-iteration-count:infinite;
    animnanimation-name:none;
    animpsanimation-play-state:running;
    animps:panimation-play-state:paused;
    animps:ranimation-play-state:running;
    animtfanimation-timing-function:linear;
    animtf:cbanimation-timing-function:cubic-bezier(0.1, 0.7, 1.0, 0.1);
    animtf:eanimation-timing-function:ease;
    animtf:eianimation-timing-function:ease-in;
    animtf:eioanimation-timing-function:ease-in-out;
    animtf:eoanimation-timing-function:ease-out;
    animtf:lanimation-timing-function:linear;
    -

    flex

    +

    flex

    @@ -3561,8 +3561,8 @@ Alias of command

    :-:-
    fxflex:;
    fxbflex-basis:;
    fxdflex-direction:;
    fxd:cflex-direction:column;
    fxd:crflex-direction:column-reverse;
    fxd:rflex-direction:row;
    fxd:rrflex-direction:row-reverse;
    fxfflex-flow:;
    fxgflex-grow:;
    fxshflex-shrink:;
    fxwflex-wrap: ;
    fxw:nflex-wrap:nowrap;
    fxw:wflex-wrap:wrap;
    fxw:wrflex-wrap:wrap-reverse;
    -

    XSL

    -

    XSL

    +

    XSL

    +

    XSL

    tmatch, tm

    <xsl:template match="" mode=""></xsl:template>
     
    @@ -3606,7 +3606,7 @@ Alias of command

    var

    <xsl:variable name=""></xsl:variable>
     
    -

    XSL

    +

    XSL

    vare

    <xsl:variable name="" select="" />
     
    @@ -3650,7 +3650,7 @@ Alias of command

    fall

    <xsl:fallback></xsl:fallback>
     
    -

    XSL

    +

    XSL

    num

    <xsl:number value="" />
     
    @@ -3685,7 +3685,7 @@ Alias of command

    !!!

    <?xml version="1.0" encoding="UTF-8"?>
     
    -

    另见

    +

    另见

    @@ -3702,8 +3702,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -3714,7 +3712,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/emoji.html b/docs/emoji.html index 9abfd39e..44173405 100644 --- a/docs/emoji.html +++ b/docs/emoji.html @@ -34,15 +34,15 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    Emoji 备忘清单

    有些表情符号代码不太容易记住,所以这里有一个小备忘单。

    入门

    -

    入门

    +

    People

    @@ -761,7 +761,7 @@
    --
    😄:smile:
    😆:laughing:
    😊:blush:
    😃:smiley:
    ☺️:relaxed:
    😏:smirk:
    😍:heart_eyes:
    😘:kissing_heart:
    😚:kissing_closed_eyes:
    😳:flushed:
    😌:relieved:
    😆:satisfied:
    😁:grin:
    😉:wink:
    😜:stuck_out_tongue_winking_eye:
    😝:stuck_out_tongue_closed_eyes:
    😀:grinning:
    😗:kissing:
    😙:kissing_smiling_eyes:
    😛:stuck_out_tongue:
    😴:sleeping:
    😟:worried:
    😦:frowning:
    😧:anguished:
    😮:open_mouth:
    😬:grimacing:
    😕:confused:
    😯:hushed:
    😑:expressionless:
    😒:unamused:
    😅:sweat_smile:
    😓:sweat:
    😥:disappointed_relieved:
    😩:weary:
    😔:pensive:
    😞:disappointed:
    😖:confounded:
    😨:fearful:
    😰:cold_sweat:
    😣:persevere:
    😢:cry:
    😭:sob:
    😂:joy:
    😲:astonished:
    😱:scream:
    😫:tired_face:
    😠:angry:
    😡:rage:
    😤:triumph:
    😪:sleepy:
    😋:yum:
    😷:mask:
    😎:sunglasses:
    😵:dizzy_face:
    👿:imp:
    😈:smiling_imp:
    😐:neutral_face:
    😶:no_mouth:
    😇:innocent:
    👽:alien:
    💛:yellow_heart:
    💙:blue_heart:
    💜:purple_heart:
    ❤️:heart:
    💚:green_heart:
    💔:broken_heart:
    💓:heartbeat:
    💗:heartpulse:
    💕:two_hearts:
    💞:revolving_hearts:
    💘:cupid:
    💖:sparkling_heart:
    :sparkles:
    :star:
    🌟:star2:
    💫:dizzy:
    💥:boom:
    💥:collision:
    💢:anger:
    :exclamation:
    :question:
    :grey_exclamation:
    :grey_question:
    💤:zzz:
    💨:dash:
    💦:sweat_drops:
    🎶:notes:
    🎵:musical_note:
    🔥:fire:
    💩:hankey:
    💩:poop:
    💩:shit:
    👍:+1:
    👍:thumbsup:
    👎:-1:
    👎:thumbsdown:
    👌:ok_hand:
    👊:punch:
    👊:facepunch:
    :fist:
    ✌️:v:
    👋:wave:
    :hand:
    :raised_hand:
    👐:open_hands:
    ☝️:point_up:
    👇:point_down:
    👈:point_left:
    👉:point_right:
    🙌:raised_hands:
    🙏:pray:
    👆:point_up_2:
    👏:clap:
    💪:muscle:
    🤘:metal:
    🖕:fu:
    🏃:runner:
    🏃:running:
    👫:couple:
    👪:family:
    👬:two_men_holding_hands:
    👭:two_women_holding_hands:
    💃:dancer:
    👯:dancers:
    🙆‍♀️:ok_woman:
    🙅:no_good:
    💁:information_desk_person:
    🙋:raising_hand:
    👰‍♀️:bride_with_veil:
    🙇:bow:
    💏:couplekiss:
    💑:couple_with_heart:
    💆:massage:
    💇:haircut:
    💅:nail_care:
    👦:boy:
    👧:girl:
    👩:woman:
    👨:man:
    👶:baby:
    👵:older_woman:
    👴:older_man:
    👲:man_with_gua_pi_mao:
    👳‍♂️:man_with_turban:
    👷:construction_worker:
    👮:cop:
    👼:angel:
    👸:princess:
    😺:smiley_cat:
    😸:smile_cat:
    😻:heart_eyes_cat:
    😽:kissing_cat:
    😼:smirk_cat:
    🙀:scream_cat:
    😿:crying_cat_face:
    😹:joy_cat:
    😾:pouting_cat:
    👹:japanese_ogre:
    👺:japanese_goblin:
    🙈:see_no_evil:
    🙉:hear_no_evil:
    🙊:speak_no_evil:
    💂‍♂️:guardsman:
    💀:skull:
    🐾:feet:
    👄:lips:
    💋:kiss:
    💧:droplet:
    👂:ear:
    👀:eyes:
    👃:nose:
    👅:tongue:
    💌:love_letter:
    👤:bust_in_silhouette:
    👥:busts_in_silhouette:
    💬:speech_balloon:
    💭:thought_balloon:
    -

    Symbols

    +

    Symbols

    @@ -1536,7 +1536,7 @@
    --
    1️⃣:one:
    2️⃣:two:
    3️⃣:three:
    4️⃣:four:
    5️⃣:five:
    6️⃣:six:
    7️⃣:seven:
    8️⃣:eight:
    9️⃣:nine:
    🔟:keycap_ten:
    🔢:1234:
    0️⃣:zero:
    #️⃣:hash:
    🔣:symbols:
    ◀️:arrow_backward:
    ⬇️:arrow_down:
    ▶️:arrow_forward:
    ⬅️:arrow_left:
    🔠:capital_abcd:
    🔡:abcd:
    🔤:abc:
    ↙️:arrow_lower_left:
    ↘️:arrow_lower_right:
    ➡️:arrow_right:
    ⬆️:arrow_up:
    ↖️:arrow_upper_left:
    ↗️:arrow_upper_right:
    :arrow_double_down:
    :arrow_double_up:
    🔽:arrow_down_small:
    ⤵️:arrow_heading_down:
    ⤴️:arrow_heading_up:
    ↩️:leftwards_arrow_with_hook:
    ↪️:arrow_right_hook:
    ↔️:left_right_arrow:
    ↕️:arrow_up_down:
    🔼:arrow_up_small:
    🔃:arrows_clockwise:
    🔄:arrows_counterclockwise:
    :rewind:
    :fast_forward:
    ℹ️:information_source:
    🆗:ok:
    🔀:twisted_rightwards_arrows:
    🔁:repeat:
    🔂:repeat_one:
    🆕:new:
    🔝:top:
    🆙:up:
    🆒:cool:
    🆓:free:
    🆖:ng:
    🎦:cinema:
    🈁:koko:
    📶:signal_strength:
    🈵:u6e80:
    🈂️:sa:
    🚻:restroom:
    🚹:mens:
    🚺:womens:
    🚼:baby_symbol:
    🚭:no_smoking:
    🅿️:parking:
    :wheelchair:
    🚇:metro:
    🛄:baggage_claim:
    🉑:accept:
    🚾:wc:
    🚰:potable_water:
    🚮:put_litter_in_its_place:
    ㊙️:secret:
    ㊗️:congratulations:
    Ⓜ️:m:
    🛂:passport_control:
    🛅:left_luggage:
    🛃:customs:
    🉐:ideograph_advantage:
    🆑:cl:
    🆘:sos:
    🆔:id:
    🚫:no_entry_sign:
    🔞:underage:
    📵:no_mobile_phones:
    🚯:do_not_litter:
    🚱:non-potable_water:
    🚳:no_bicycles:
    🚷:no_pedestrians:
    🚸:children_crossing:
    :no_entry:
    ✳️:eight_spoked_asterisk:
    ❇️:sparkle:
    ✴️:eight_pointed_black_star:
    💟:heart_decoration:
    🆚:vs:
    📳:vibration_mode:
    📴:mobile_phone_off:
    💹:chart:
    💱:currency_exchange:
    :aries:
    :taurus:
    :gemini:
    :cancer:
    :leo:
    :virgo:
    :libra:
    :scorpius:
    :sagittarius:
    :capricorn:
    :aquarius:
    :pisces:
    :ophiuchus:
    🔯:six_pointed_star:
    :negative_squared_cross_mark:
    🅰️:a:
    🅱️:b:
    🆎:ab:
    🅾️:o2:
    💠:diamond_shape_with_a_dot_inside:
    ♻️:recycle:
    🔚:end:
    🔙:back:
    🔛:on:
    🔜:soon:
    🕐:clock1:
    🕜:clock130:
    🕙:clock10:
    🕥:clock1030:
    🕚:clock11:
    🕦:clock1130:
    🕛:clock12:
    🕧:clock1230:
    🕑:clock2:
    🕝:clock230:
    🕒:clock3:
    🕞:clock330:
    🕓:clock4:
    🕟:clock430:
    🕔:clock5:
    🕠:clock530:
    🕕:clock6:
    🕡:clock630:
    🕖:clock7:
    🕢:clock730:
    🕗:clock8:
    🕣:clock830:
    🕘:clock9:
    🕤:clock930:
    💲:heavy_dollar_sign:
    ©️:copyright:
    ®️:registered:
    ™️:tm:
    :x:
    :heavy_exclamation_mark:
    ‼️:bangbang:
    ⁉️:interrobang:
    :o:
    ✖️:heavy_multiplication_x:
    :heavy_plus_sign:
    :heavy_minus_sign:
    :heavy_division_sign:
    💮:white_flower:
    💯:100:
    ✔️:heavy_check_mark:
    ☑️:ballot_box_with_check:
    🔘:radio_button:
    🔗:link:
    :curly_loop:
    〰️:wavy_dash:
    〽️:part_alternation_mark:
    🔱:trident:
    ▪️:black_small_square:
    ▫️:white_small_square:
    :black_medium_small_square:
    :white_medium_small_square:
    ◼️:black_medium_square:
    ◻️:white_medium_square:
    :black_large_square:
    :white_large_square:
    :white_check_mark:
    🔲:black_square_button:
    🔳:white_square_button:
    :black_circle:
    :white_circle:
    🔴:red_circle:
    🔵:large_blue_circle:
    🔷:large_blue_diamond:
    🔶:large_orange_diamond:
    🔹:small_blue_diamond:
    🔸:small_orange_diamond:
    🔺:small_red_triangle:
    🔻:small_red_triangle_down:
    -

    Objects

    +

    Objects

    @@ -2588,7 +2588,7 @@
    --
    🎍:bamboo:
    💝:gift_heart:
    🎎:dolls:
    🎒:school_satchel:
    🎓:mortar_board:
    🎏:flags:
    🎆:fireworks:
    🎇:sparkler:
    🎐:wind_chime:
    🎑:rice_scene:
    🎃:jack_o_lantern:
    👻:ghost:
    🎅:santa:
    🎄:christmas_tree:
    🎁:gift:
    🔔:bell:
    🔕:no_bell:
    🎋:tanabata_tree:
    🎉:tada:
    🎊:confetti_ball:
    🎈:balloon:
    🔮:crystal_ball:
    💿:cd:
    📀:dvd:
    💾:floppy_disk:
    📷:camera:
    📹:video_camera:
    🎥:movie_camera:
    💻:computer:
    📺:tv:
    📱:iphone:
    ☎️:phone:
    ☎️:telephone:
    📞:telephone_receiver:
    📟:pager:
    📠:fax:
    💽:minidisc:
    📼:vhs:
    🔉:sound:
    🔈:speaker:
    🔇:mute:
    📢:loudspeaker:
    📣:mega:
    :hourglass:
    :hourglass_flowing_sand:
    :alarm_clock:
    :watch:
    📻:radio:
    📡:satellite:
    :loop:
    🔍:mag:
    🔎:mag_right:
    🔓:unlock:
    🔒:lock:
    🔏:lock_with_ink_pen:
    🔐:closed_lock_with_key:
    🔑:key:
    💡:bulb:
    🔦:flashlight:
    🔆:high_brightness:
    🔅:low_brightness:
    🔌:electric_plug:
    🔋:battery:
    📲:calling:
    📧:email:
    📫:mailbox:
    📮:postbox:
    🛀:bath:
    🛁:bathtub:
    🚿:shower:
    🚽:toilet:
    🔧:wrench:
    🔩:nut_and_bolt:
    🔨:hammer:
    💺:seat:
    💰:moneybag:
    💴:yen:
    💵:dollar:
    💷:pound:
    💶:euro:
    💳:credit_card:
    💸:money_with_wings:
    📧:e-mail:
    📥:inbox_tray:
    📤:outbox_tray:
    ✉️:envelope:
    📨:incoming_envelope:
    📯:postal_horn:
    📪:mailbox_closed:
    📬:mailbox_with_mail:
    📭:mailbox_with_no_mail:
    📦:package:
    🚪:door:
    🚬:smoking:
    💣:bomb:
    🔫:gun:
    🔪:hocho:
    💊:pill:
    💉:syringe:
    📄:page_facing_up:
    📃:page_with_curl:
    📑:bookmark_tabs:
    📊:bar_chart:
    📈:chart_with_upwards_trend:
    📉:chart_with_downwards_trend:
    📜:scroll:
    📋:clipboard:
    📆:calendar:
    📅:date:
    📇:card_index:
    📁:file_folder:
    📂:open_file_folder:
    ✂️:scissors:
    📌:pushpin:
    📎:paperclip:
    ✒️:black_nib:
    ✏️:pencil2:
    📏:straight_ruler:
    📐:triangular_ruler:
    📕:closed_book:
    📗:green_book:
    📘:blue_book:
    📙:orange_book:
    📓:notebook:
    📔:notebook_with_decorative_cover:
    📒:ledger:
    📚:books:
    🔖:bookmark:
    📛:name_badge:
    🔬:microscope:
    🔭:telescope:
    📰:newspaper:
    🏈:football:
    🏀:basketball:
    :soccer:
    :baseball:
    🎾:tennis:
    🎱:8ball:
    🏉:rugby_football:
    🎳:bowling:
    :golf:
    🚵:mountain_bicyclist:
    🚴:bicyclist:
    🏇:horse_racing:
    🏂:snowboarder:
    🏊:swimmer:
    🏄:surfer:
    🎿:ski:
    ♠️:spades:
    ♥️:hearts:
    ♣️:clubs:
    ♦️:diamonds:
    💎:gem:
    💍:ring:
    🏆:trophy:
    🎼:musical_score:
    🎹:musical_keyboard:
    🎻:violin:
    👾:space_invader:
    🎮:video_game:
    🃏:black_joker:
    🎴:flower_playing_cards:
    🎲:game_die:
    🎯:dart:
    🀄:mahjong:
    🎬:clapper:
    📝:memo:
    📝:pencil:
    📖:book:
    🎨:art:
    🎤:microphone:
    🎧:headphones:
    🎺:trumpet:
    🎷:saxophone:
    🎸:guitar:
    👞:shoe:
    👡:sandal:
    👠:high_heel:
    💄:lipstick:
    👢:boot:
    👕:shirt:
    👕:tshirt:
    👔:necktie:
    👚:womans_clothes:
    👗:dress:
    🎽:running_shirt_with_sash:
    👖:jeans:
    👘:kimono:
    👙:bikini:
    🎀:ribbon:
    🎩:tophat:
    👑:crown:
    👒:womans_hat:
    👞:mans_shoe:
    🌂:closed_umbrella:
    💼:briefcase:
    👜:handbag:
    👝:pouch:
    👛:purse:
    👓:eyeglasses:
    🎣:fishing_pole_and_fish:
    :coffee:
    🍵:tea:
    🍶:sake:
    🍼:baby_bottle:
    🍺:beer:
    🍻:beers:
    🍸:cocktail:
    🍹:tropical_drink:
    🍷:wine_glass:
    🍴:fork_and_knife:
    🍕:pizza:
    🍔:hamburger:
    🍟:fries:
    🍗:poultry_leg:
    🍖:meat_on_bone:
    🍝:spaghetti:
    🍛:curry:
    🍤:fried_shrimp:
    🍱:bento:
    🍣:sushi:
    🍥:fish_cake:
    🍙:rice_ball:
    🍘:rice_cracker:
    🍚:rice:
    🍜:ramen:
    🍲:stew:
    🍢:oden:
    🍡:dango:
    🥚:egg:
    🍞:bread:
    🍩:doughnut:
    🍮:custard:
    🍦:icecream:
    🍨:ice_cream:
    🍧:shaved_ice:
    🎂:birthday:
    🍰:cake:
    🍪:cookie:
    🍫:chocolate_bar:
    🍬:candy:
    🍭:lollipop:
    🍯:honey_pot:
    🍎:apple:
    🍏:green_apple:
    🍊:tangerine:
    🍋:lemon:
    🍒:cherries:
    🍇:grapes:
    🍉:watermelon:
    🍓:strawberry:
    🍑:peach:
    🍈:melon:
    🍌:banana:
    🍐:pear:
    🍍:pineapple:
    🍠:sweet_potato:
    🍆:eggplant:
    🍅:tomato:
    🌽:corn:
    -

    Places

    +

    Places

    @@ -3023,7 +3023,7 @@
    --
    🏠:house:
    🏡:house_with_garden:
    🏫:school:
    🏢:office:
    🏣:post_office:
    🏥:hospital:
    🏦:bank:
    🏪:convenience_store:
    🏩:love_hotel:
    🏨:hotel:
    💒:wedding:
    :church:
    🏬:department_store:
    🏤:european_post_office:
    🌇:city_sunrise:
    🌆:city_sunset:
    🏯:japanese_castle:
    🏰:european_castle:
    :tent:
    🏭:factory:
    🗼:tokyo_tower:
    🗾:japan:
    🗻:mount_fuji:
    🌄:sunrise_over_mountains:
    🌅:sunrise:
    🌠:stars:
    🗽:statue_of_liberty:
    🌉:bridge_at_night:
    🎠:carousel_horse:
    🌈:rainbow:
    🎡:ferris_wheel:
    :fountain:
    🎢:roller_coaster:
    🚢:ship:
    🚤:speedboat:
    :boat:
    :sailboat:
    🚣:rowboat:
    :anchor:
    🚀:rocket:
    ✈️:airplane:
    🚁:helicopter:
    🚂:steam_locomotive:
    🚊:tram:
    🚞:mountain_railway:
    🚲:bike:
    🚡:aerial_tramway:
    🚟:suspension_railway:
    🚠:mountain_cableway:
    🚜:tractor:
    🚙:blue_car:
    🚘:oncoming_automobile:
    🚗:car:
    🚗:red_car:
    🚕:taxi:
    🚖:oncoming_taxi:
    🚛:articulated_lorry:
    🚌:bus:
    🚍:oncoming_bus:
    🚨:rotating_light:
    🚓:police_car:
    🚔:oncoming_police_car:
    🚒:fire_engine:
    🚑:ambulance:
    🚐:minibus:
    🚚:truck:
    🚋:train:
    🚉:station:
    🚆:train2:
    🚅:bullettrain_front:
    🚄:bullettrain_side:
    🚈:light_rail:
    🚝:monorail:
    🚃:railway_car:
    🚎:trolleybus:
    🎫:ticket:
    :fuelpump:
    🚦:vertical_traffic_light:
    🚥:traffic_light:
    ⚠️:warning:
    🚧:construction:
    🔰:beginner:
    🏧:atm:
    🎰:slot_machine:
    🚏:busstop:
    💈:barber:
    ♨️:hotsprings:
    🏁:checkered_flag:
    🎌:crossed_flags:
    🏮:izakaya_lantern:
    🗿:moyai:
    🎪:circus_tent:
    🎭:performing_arts:
    📍:round_pushpin:
    🚩:triangular_flag_on_post:
    🇯🇵:jp:
    🇰🇷:kr:
    🇨🇳:cn:
    🇺🇸:us:
    🇫🇷:fr:
    🇪🇸:es:
    🇮🇹:it:
    🇷🇺:ru:
    🇬🇧:gb:
    🇬🇧:uk:
    🇩🇪:de:
    -

    Nature

    +

    Nature

    @@ -3503,8 +3503,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -3515,7 +3513,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/es6.html b/docs/es6.html new file mode 100644 index 00000000..c1041d8a --- /dev/null +++ b/docs/es6.html @@ -0,0 +1,557 @@ + + + + +ES2015+ 备忘清单 + & es6 cheatsheet & Quick Reference + + + + + + +

    + +ES2015+ 备忘清单

    +

    快速浏览 ES2015、ES2016、ES2017、ES2018 及以后的 JavaScript 新特性

    +

    常用

    +

    块范围

    + +

    Let

    +
    function fn () {
    +  let x = 0
    +  if (true) {
    +    let x = 1 // 只在这个`if`里面
    +  }
    +}
    +
    +

    Const

    +
    const a = 1
    +
    +

    let 是新的 var。 常量(const) 就像 let 一样工作,但不能重新分配。 +请参阅:Let 和 const

    +

    反引号字符串

    + +

    插值

    +
    const message = `Hello ${name}`
    +
    +

    多行字符串

    +
    const str = `
    +hello
    +world
    +`
    +
    +

    模板和多行字符串。 +请参阅:模板字符串

    +

    二进制和八进制文字

    +
    let bin = 0b1010010
    +let oct = 0o755
    +
    +

    请参阅:二进制和八进制文字

    +

    指数运算符

    +
    const byte = 2 ** 8
    +// 同: Math.pow(2, 8)
    +
    +

    新方法

    +

    新的字符串方法

    +
    "hello".repeat(3)
    +"hello".includes("ll")
    +"hello".startsWith("he")
    +"hello".padStart(8) // "   hello"
    +"hello".padEnd(8) // "hello   " 
    +"hello".padEnd(8, '!') // hello!!!
    +"\u1E9B\u0323".normalize("NFC")
    +
    +

    新的数字方法

    +
    Number.EPSILON
    +Number.isInteger(Infinity) // false
    +Number.isNaN("NaN") // false
    +
    +

    新的 Math 方法

    +
    Math.acosh(3) // 1.762747174039086
    +Math.hypot(3, 4) // 5
    +Math.imul(Math.pow(2, 32) - 1, Math.pow(2, 32) - 2) // 2
    +
    +

    新的 Array 方法

    +
    // 返回一个真实的数组
    +Array.from(document.querySelectorAll("*"))
    +// 类似于 new Array(...),但没有特殊的单参数行为
    +Array.of(1, 2, 3)
    +
    +

    请参阅: 新方法

    +

    +
    class Circle extends Shape {
    +
    +

    构造函数

    +
      constructor (radius) {
    +    this.radius = radius
    +  }
    +
    +

    方法

    +
      getArea () {
    +    return Math.PI * 2 * this.radius
    +  }
    +
    +

    调用超类方法

    +
      expand (n) {
    +    return super.expand(n) * Math.PI
    +  }
    +
    +

    静态方法

    +
      static createFromDiameter(diameter) {
    +    return new Circle(diameter / 2)
    +  }
    +}
    +
    +

    原型的语法糖。 +请参阅:

    +

    Promises

    +

    做出承诺

    +
    new Promise((resolve, reject) => {
    +  if (ok) { resolve(result) }
    +  else { reject(error) }
    +})
    +
    +

    用于异步编程。 +请参阅:Promises

    +

    使用 Promises

    +
    promise
    +  .then((result) => { ··· })
    +  .catch((error) => { ··· })
    +
    +

    在 finally 中使用 Promise

    +
    promise
    +  .then((result) => { ··· })
    +  .catch((error) => { ··· })
    +  .finally(() => {
    +    /* 独立于成功/错误的逻辑 */
    +  })
    +
    +

    当承诺被履行或被拒绝时,处理程序被调用

    +

    Promise 函数

    +
    Promise.all(···)
    +Promise.race(···)
    +Promise.reject(···)
    +Promise.resolve(···)
    +
    +

    Async-await

    +
    async function run () {
    +  const user = await getUser()
    +  const tweets = await getTweets(user)
    +  return [user, tweets]
    +}
    +
    +

    async 函数是使用函数的另一种方式。 +请参阅:异步函数

    +

    解构 Destructuring

    +

    解构赋值

    +

    Arrays

    +
    const [first, last] = ['Nikola', 'Tesla']
    +
    +

    Objects

    +
    let {title, author} = {
    +  title: 'The Silkworm',
    +  author: 'R. Galbraith'
    +}
    +
    +

    支持匹配数组和对象。 +请参阅:解构

    +

    默认值

    +
    const scores = [22, 33]
    +const [math = 50, sci = 50, arts = 50] = scores
    +
    +
    +
    // Result:
    +// math === 22, sci === 33, arts === 50
    +
    +

    可以在解构数组或对象时分配默认值

    +

    函数参数

    +
    function greet({ name, greeting }) {
    +  console.log(`${greeting}, ${name}!`)
    +}
    +
    +
    +
    greet({ name: 'Larry', greeting: 'Ahoy' })
    +
    +

    对象和数组的解构也可以在函数参数中完成

    +

    默认值

    +
    function greet({ name = 'Rauno' } = {}) {
    +  console.log(`Hi ${name}!`);
    +}
    +
    +
    +
    greet() // Hi Rauno!
    +greet({ name: 'Larry' }) // Hi Larry!
    +
    +

    重新分配键

    +
    function printCoordinates({ left: x, top: y }) {
    +  console.log(`x: ${x}, y: ${y}`)
    +}
    +
    +
    +
    printCoordinates({ left: 25, top: 90 })
    +
    +

    此示例将 x 分配给 left 键的值

    +

    循环

    +
    for (let {title, artist} of songs) {
    +  ···
    +}
    +
    +

    赋值表达式也在循环中工作

    +

    对象解构

    +
    const { id, ...detail } = song;
    +
    +

    使用 rest(...) 运算符单独提取一些键和对象中的剩余键

    +

    扩展运算符 Spread

    +

    对象扩展

    +

    与对象扩展

    +
    const options = {
    +  ...defaults,
    +  visible: true
    +}
    +
    +

    没有对象扩展

    +
    const options = Object.assign(
    +  {}, defaults,
    +  { visible: true })
    +
    +

    对象扩展运算符允许您从其他对象构建新对象。 +请参阅:对象传播

    +

    数组扩展

    +

    具有数组扩展

    +
    const users = [
    +  ...admins,
    +  ...editors,
    +  'rstacruz'
    +]
    +
    +

    没有数组扩展

    +
    const users = admins
    +  .concat(editors)
    +  .concat([ 'rstacruz' ])
    +
    +

    扩展运算符允许您以相同的方式构建新数组。 +请参阅:扩展运算符

    +

    函数 Functions

    +

    函数参数

    + +

    默认参数

    +
    function greet (name = 'Jerry') {
    +  return `Hello ${name}`
    +}
    +
    +

    Rest 参数

    +
    function fn(x, ...y) {
    +  // y 是一个数组
    +  return x * y.length
    +}
    +
    +

    扩展

    +
    fn(...[1, 2, 3])
    +// 与 fn(1, 2, 3) 相同
    +
    +

    Default(默认), rest, spread(扩展)。 +请参阅:函数参数

    +

    箭头函数

    + +

    箭头函数

    +
    setTimeout(() => {
    +  ···
    +})
    +
    +

    带参数

    +
    readFile('text.txt', (err, data) => {
    +  ...
    +})
    +
    +

    隐式返回

    +
    arr.map(n => n*2)
    +// 没有花括号 = 隐式返回
    +// 同: arr.map(function (n) { return n*2 })
    +arr.map(n => ({
    +  result: n*2
    +}))
    +// 隐式返回对象需要在对象周围加上括号
    +
    +

    类似函数,但保留了 this。 +请参阅:箭头函数

    +

    参数设置默认值

    +
    function log(x, y = 'World') {
    +  console.log(x, y);
    +}
    +
    +log('Hello')          // Hello World
    +log('Hello', 'China') // Hello China
    +log('Hello', '')      // Hello
    +
    +

    与解构赋值默认值结合使用

    +
    function foo({x, y = 5} = {}) {
    +  console.log(x, y);
    +}
    +
    +foo() // undefined 5
    +
    +

    name 属性

    +
    function foo() {}
    +foo.name // "foo"
    +
    +

    Objects

    +

    速记语法

    +
    module.exports = { hello, bye }
    +
    +

    同下:

    +
    module.exports = {
    +  hello: hello, bye: bye
    +}
    +
    +

    请参阅:对象字面量增强

    +

    方法

    +
    const App = {
    +  start () {
    +    console.log('running')
    +  }
    +}
    +// 同: App = { start: function () {···} }
    +
    +

    请参阅:对象文字增强

    +

    Getters and setters

    +
    const App = {
    +  get closed () {
    +    return this.status === 'closed'
    +  },
    +  set closed (value) {
    +    this.status = value ? 'closed' : 'open'
    +  }
    +}
    +
    +

    请参阅:对象字面量增强

    +

    计算属性名称

    +
    let event = 'click'
    +let handlers = {
    +  [`on${event}`]: true
    +}
    +// 同: handlers = { 'onclick': true }
    +
    +

    请参阅:对象字面量增强

    +

    提取值

    +
    const fatherJS = { age: 57, name: "张三" }
    +Object.values(fatherJS)
    +// [57, "张三"]
    +Object.entries(fatherJS)
    +// [["age", 57], ["name", "张三"]]
    +
    +

    Modules 模块

    +

    Imports 导入

    +
    import 'helpers'
    +// 又名: require('···')
    +
    +
    +
    import Express from 'express'
    +// 又名: const Express = require('···').default || require('···')
    +
    +
    +
    import { indent } from 'helpers'
    +// 又名: const indent = require('···').indent
    +
    +
    +
    import * as Helpers from 'helpers'
    +// 又名: const Helpers = require('···')
    +
    +
    +
    import { indentSpaces as indent } from 'helpers'
    +// 又名: const indent = require('···').indentSpaces
    +
    +

    import 是新的 require()。 +请参阅:Module imports

    +

    Exports 导出

    +
    export default function () { ··· }
    +// 又名: module.exports.default = ···
    +
    +
    +
    export function mymethod () { ··· }
    +// 又名: module.exports.mymethod = ···
    +
    +
    +
    export const pi = 3.14159
    +// 又名: module.exports.pi = ···
    +
    +
    +
    const firstName = 'Michael';
    +const lastName = 'Jackson';
    +const year = 1958;
    +export { firstName, lastName, year };
    +
    +
    +
    export * from "lib/math";
    +
    +

    export 是新的module.exports。 +请参阅:Module exports

    +

    as 关键字重命名

    +
    import {
    +  lastName as surname // 导入重命名
    +} from './profile.js';
    +
    +function v1() { ... }
    +function v2() { ... }
    +
    +export { v1 as default };
    +// 等同于 export default v1;
    +
    +export {
    +  v1 as streamV1,           // 导出重命名
    +  v2 as streamV2,           // 导出重命名
    +  v2 as streamLatestVersion // 导出重命名
    +};
    +
    +

    动态加载模块

    +
    button.addEventListener('click', event => {
    +  import('./dialogBox.js')
    +    .then(dialogBox => {
    +      dialogBox.open();
    +    })
    +    .catch(error => {
    +      /* Error handling */
    +    })
    +});
    +
    +

    ES2020提案 引入 import() 函数

    +

    import() 允许模块路径动态生成

    +
    const main = document.querySelector('main')
    +
    +import(`./modules/${someVariable}.js`)
    +  .then(module => {
    +    module.loadPageInto(main);
    +  })
    +  .catch(err => {
    +    main.textContent = err.message;
    +  });
    +
    +

    import.meta

    +

    ES2020import 命令添加了一个元属性 import.meta,返回当前模块的元信息

    +
    new URL('data.txt', import.meta.url)
    +
    +

    Node.js 环境中,import.meta.url返回的总是本地路径,即 file:URL 协议的字符串,比如 file:///home/user/foo.js

    +

    Generators

    +

    Generator 函数

    +
    function* idMaker () {
    +  let id = 0
    +  while (true) { yield id++ }
    +}
    +
    +
    +
    let gen = idMaker()
    +gen.next().value  // → 0
    +gen.next().value  // → 1
    +gen.next().value  // → 2
    +
    +

    情况很复杂。 +请参阅:Generators

    +

    For..of + 迭代器(iterator)

    + +
    let fibonacci = {
    +  [Symbol.iterator]() {
    +    let pre = 0, cur = 1;
    +    return {
    +      next() {
    +        [pre, cur] = [cur, pre + cur];
    +        return { done: false, value: cur }
    +      }
    +    }
    +  }
    +}
    +
    +for (var n of fibonacci) {
    +  // 在 1000 处截断序列
    +  if (n > 1000) break;
    +  console.log(n);
    +}
    +
    +

    用于迭代生成器和数组。 +请参阅:For..of iteration

    +

    与 Iterator 接口的关系

    +
    var gen = {};
    +gen[Symbol.iterator] = function* () {
    +  yield 1;
    +  yield 2;
    +  yield 3;
    +};
    +
    +[...gen] // => [1, 2, 3]
    +
    +

    Generator 函数赋值给 Symbol.iterator 属性,从而使得 gen 对象具有了 Iterator 接口,可以被 ... 运算符遍历了

    +

    Symbol.iterator 属性

    +
    function* gen() { /* some code */ }
    +var g = gen();
    +
    +g[Symbol.iterator]() === g // true
    +
    +

    gen 是一个 Generator 函数,调用它会生成一个遍历器对象g。它的 Symbol.iterator 属性,也是一个遍历器对象生成函数,执行后返回它自己

    +

    另见

    + +
    © 2022 Kenny Wang, All rights reserved.
    + diff --git a/docs/expressjs.html b/docs/expressjs.html index 2b27cfad..55c0d3c8 100644 --- a/docs/expressjs.html +++ b/docs/expressjs.html @@ -34,12 +34,12 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    Express 备忘清单

    +

    Express 备忘清单

    这是用于 Node.js 的快速、不拘一格、极简主义的 Web 框架,包含 Express.js 的 API 参考列表和一些示例。

    入门

    -

    入门

    +

    Hello World

    • 创建项目,添加 package.json 配置 @@ -70,7 +70,7 @@
    -

    express -h

    +

    express -h

    Usage: express [options] [dir]
     Options:
    @@ -92,7 +92,7 @@
     # 运行应用程序
     $ DEBUG=myapp:* npm start
     
    -

    express()

    +

    express()

    @@ -127,7 +127,7 @@
    :-:-
    express.json()#
    express.raw()#
    express.Router()#
    express.static()#
    express.text()#
    express.urlencoded()#
    -

    Router

    +

    Router

    @@ -158,7 +158,7 @@
    :-:-
    router.all()#
    router.METHOD()#
    router.param()#
    router.route()#
    router.use()#
    -

    Application

    +

    Application

    var express = require('express')
     var app = express()
     
    @@ -167,7 +167,7 @@
     console.dir(app.locals.email)
     // => 'me@myapp.com'
     
    -

    属性

    +

    属性

    @@ -186,7 +186,7 @@
    :-:-
    app.locals应用程序中的局部变量 #
    app.mountpath安装子应用程序的路径模式 #
    -

    Events

    +

    Events

    @@ -201,7 +201,7 @@
    :-:-
    mount子应用挂载到父应用上,子应用上触发事件 #
    -

    方法

    +

    方法

    @@ -288,8 +288,8 @@
    :-:-
    app.all()#
    app.delete()#
    app.disable()#
    app.disabled()#
    app.enable()#
    app.enabled()#
    app.engine()#
    app.get(name)#
    app.get(path, callback)#
    app.listen()#
    app.METHOD()#
    app.param()#
    app.path()#
    app.post()#
    app.put()#
    app.render()#
    app.route()#
    app.set()#
    app.use()#
    -

    Request

    -

    属性

    +

    Request

    +

    属性

    @@ -380,7 +380,7 @@
    :-:-
    req.app#
    req.baseUrl#
    req.body#
    req.cookies#
    req.fresh#
    req.hostname#
    req.ip#
    req.ips#
    req.method#
    req.originalUrl#
    req.params#
    req.path#
    req.protocol#
    req.query#
    req.route#
    req.secure#
    req.signedCookies#
    req.stale#
    req.subdomains#
    req.xhr#
    -

    方法

    +

    方法

    @@ -423,14 +423,14 @@
    :-:-
    req.accepts()#
    req.acceptsCharsets()#
    req.acceptsEncodings()#
    req.acceptsLanguages()#
    req.get()获取HTTP 请求头字段 #
    req.is()#
    req.param()#
    req.range()#
    -

    Response

    +

    Response

    app.get('/', function (req, res) {
       console.dir(res.headersSent) // false
       res.send('OK')
       console.dir(res.headersSent) // true
     })
     
    -

    属性

    +

    属性

    @@ -453,7 +453,7 @@
    :-:-
    res.app #
    res.headersSent#
    res.locals#
    -

    方法

    +

    方法

    @@ -548,8 +548,8 @@
    :-:-
    res.append()#
    res.attachment()#
    res.cookie()#
    res.clearCookie()#
    res.download()提示要下载的文件 #
    res.end()结束响应过程 #
    res.format()#
    res.get()#
    res.json()发送 JSON 响应 #
    res.jsonp()发送带有 JSONP 支持的响应 #
    res.links()#
    res.location()#
    res.redirect()重定向请求 #
    res.render()渲染视图模板 #
    res.send()发送各种类型的响应 #
    res.sendFile()将文件作为八位字节流发送 #
    res.sendStatus()#
    res.set()#
    res.status()#
    res.type()#
    res.vary()#
    -

    示例

    -

    Router

    +

    示例

    +

    Router

    为传递给此路由器的任何请求调用

    router.use(function (req, res, next) {
    @@ -563,45 +563,45 @@
       // ..
     })
     
    -

    Response

    +

    Response

    res 对象表示 Express 应用程序在收到 HTTP 请求时发送的 HTTP 响应

    app.get('/user/:id', (req, res) => {
       res.send('user ' + req.params.id)
     })
     
    -

    Request

    +

    Request

    req 对象表示 HTTP 请求,并具有请求查询字符串、参数、正文、HTTP 标头等的属性

    app.get('/user/:id', (req, res) => {
       res.send('user ' + req.params.id)
     })
     
    -

    res.end()

    +

    res.end()

    res.end()
     res.status(404).end()
     

    结束响应过程。这个方法其实来自 Node 核心,具体是 http.ServerResponseresponse.end() 方法

    -

    res.json([body])

    +

    res.json([body])

    res.json(null)
     res.json({ user: 'tobi' })
     res.status(500).json({ error: 'message' })
     
    -

    app.all

    +

    app.all

    app.all('/secret', function (req, res, next) {
       console.log('访问秘密部分...')
       next() // 将控制权传递给下一个处理程序
     })
     
    -

    app.delete

    +

    app.delete

    app.delete('/', function (req, res) {
       res.send('DELETE request to homepage')
     })
     
    -

    app.disable(name)

    +

    app.disable(name)

    app.disable('trust proxy')
     app.get('trust proxy')
     // => false
     
    -

    app.disabled(name)

    +

    app.disabled(name)

    app.disabled('trust proxy')
     // => true
     
    @@ -609,19 +609,19 @@
     app.disabled('trust proxy')
     // => false
     
    -

    app.engine(ext, callback)

    +

    app.engine(ext, callback)

    var engines = require('consolidate')
     
     app.engine('haml', engines.haml)
     app.engine('html', engines.hogan)
     
    -

    app.listen([port[, host[, backlog]]][, callback])

    +

    app.listen([port[, host[, backlog]]][, callback])

    var express = require('express')
     
     var app = express()
     app.listen(3000)
     
    -

    路由

    +

    路由

    const express = require('express')
     const app = express()
     
    @@ -640,7 +640,7 @@
       res.send('POST request to the homepage')
     })
     
    -

    中间件

    +

    中间件

    function logOriginalUrl (req, res, next) {
       console.log('ReqURL:', req.originalUrl)
       next()
    @@ -659,7 +659,7 @@
       }
     )
     
    -

    使用模版

    +

    使用模版

    app.set('view engine', 'pug')
     

    views 目录下创建一个名为 index.pugPug 模板文件,内容如下

    @@ -689,8 +689,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -701,7 +699,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/find.html b/docs/find.html index 8f6bbbd7..96d2b3b2 100644 --- a/docs/find.html +++ b/docs/find.html @@ -34,13 +34,13 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    Find 备忘清单

    这是 Linux find 命令备忘清单的快速参考列表,包含常用选项和示例。

    入门

    -

    入门

    +

    用法

    $ find [path...] [options] [expression]
     

    通配符

    @@ -52,7 +52,7 @@ -

    参数示例

    +

    参数示例

    @@ -106,7 +106,7 @@
    参数示例描述
    -typefind . -type d仅查找目录
    -namefind . -type f -name "*.txt"按名称查找文件
    -inamefind . -type f -iname "hello"按名称查找文件(不区分大小写)
    -sizefind . -size +1G查找大于 1G 的文件
    -userfind . -type d -user jack查找杰克的文件
    -regexfind /var -regex '.*/tmp/.*[0-9]*.file'将正则表达式与查找一起使用
    -maxdepthfind . -maxdepth 1 -name "a.txt"在当前目录和子目录中
    -mindepthfind / -mindepth 3 -maxdepth 5 -name pass在子目录级别 2 和 4 之间
    -

    类型

    +

    类型

    @@ -145,7 +145,7 @@
    -type d目录
    -type f文件
    -type l符号链接
    -type b缓冲块
    -type c无缓冲字符
    -type p命名管道
    -type s插座
    -

    大小

    +

    大小

    @@ -184,7 +184,7 @@
    -size b512 字节块(默认)
    -size c字节
    -size k千字节
    -size M兆字节
    -size G千兆字节
    -size T太字节_(仅限 BSD)_
    -size PPB (仅 BSD)
    -

    大小 +/-

    +

    大小 +/-

    查找所有大于 10MB 的文件

    $ find / -size +10M
     
    @@ -198,7 +198,7 @@
    $ find / -size +100M -size -1G
     

    像往常一样,+- 前缀表示大于和小于。

    -

    名称

    +

    名称

    在当前目录中使用名称查找文件

    $ find . -name tecmint.txt
     
    @@ -217,7 +217,7 @@

    查找目录下的所有php文件

    $ find . -type f -name "*.php"
     
    -

    权限

    +

    权限

    查找权限为 777 的文件。

    $ find . -type f -perm 0777 -print
     
    @@ -236,7 +236,7 @@

    查找可执行文件。

    $ find / -perm /a=x
     
    -

    所有者和组

    +

    所有者和组

    根据用户查找单个文件

    $ find / -user root -name tecmint.txt
     
    @@ -249,24 +249,24 @@

    查找用户的特定文件

    $ find /home -user tecmint -iname "*.txt"
     
    -

    多个文件名

    +

    多个文件名

    $ find . -type f \( -name "*.sh" -o -name "*.txt" \)
     

    查找带有 .sh.txt 扩展名的文件

    -

    多个目录

    +

    多个目录

    $ find /opt /usr /var -name foo.scala -type f
     

    查找具有多个目录的文件

    -

    空的

    +

    空的

    $ find . -type d -empty
     

    删除目录中的所有空文件

    $ find . -type f -empty -delete
     
    -

    查找日期和时间

    -

    方法

    +

    查找日期和时间

    +

    方法

    @@ -290,7 +290,7 @@
    OptionDescription
    atime访问时间(上次文件打开
    mtime修改时间(上次文件内容被修改
    ctime更改时间(上次文件 inode 已更改
    -

    示例

    +

    示例

    @@ -349,7 +349,7 @@
    OptionDescription
    -mtime +024 小时前修改
    -mtime 0从现在到 1 天前修改
    -mtime -1不到 1 天前修改(与 -mtime 0 相同)
    -mtime 124 至 48 小时前修改
    -mtime +1超过 48 小时前修改
    -mtime +1w上次修改时间超过 1 周前
    -atime 0从现在到 24 小时前最后一次访问
    -atime +0访问时间超过 24 小时
    -atime 1在 24 至 48 小时前访问
    -atime +1访问时间超过 48 小时
    -atime -1不到 24 小时前访问过(与 -atime 0 相同)
    -ctime -6h30m文件状态在过去 6 小时 30 分钟内发生变化
    -

    更多示例

    +

    更多示例

    查找最近 50 天修改的文件

    $ find / -mtime 50
     
    @@ -368,9 +368,9 @@

    查找最近 1 小时内访问过的文件

    $ find / -amin -60
     
    -

    查找并

    +

    查找并

    -

    查找和删除

    +

    查找和删除

    查找并删除多个文件

    $ find . -type f -name "*.mp3" -exec rm -f {} \;
    @@ -384,32 +384,32 @@
     

    查找特定文件并删除

    $ find / -type f -name *.mp3 -size +10m -exec rm {} \;
     
    -

    查找和替换

    +

    查找和替换

    $ find ./ -type f -exec sed -i 's/find/replace/g' {} \;
     $ find ./ -type f -readable -writable -exec sed -i "s/old/new/g" {} \;
     

    参见:sed 命令

    -

    查找和重命名

    +

    查找和重命名

    $ find . -type f -name 'file*' -exec mv {} {}_renamed \;
     $ find . -type f -name 'file*' -exec sh -c 'x="{}"; mv "$x" "${x}.bak"' \;
     
    -

    查找和移动

    +

    查找和移动

    $ find . -name '*.mp3' -exec mv {} /tmp/music \;
     

    查找并将其移动到特定目录

    -

    查找和复制

    +

    查找和复制

    $ find . -name '*2020*.xml' -exec cp -r "{}" /tmp/backup \;
     

    查找并将其复制到特定目录

    -

    查找并连接

    +

    查找并连接

    $ find download -type f -iname '*.csv' | xargs cat > merged.csv
     $ find download -type f -name '*.gz' -exec cat {} \; > output
     
    -

    查找和排序

    +

    查找和排序

    $ find . -printf "%T+\t%p\n" | sort
     $ find . -printf "%T+\t%p\n" | sort -r
     
    -

    查找和 chmod

    +

    查找和 chmod

    查找文件并将权限设置为 644。

    $ find / -type f -perm 0777 -print -exec chmod 644 {} \;
    @@ -417,7 +417,7 @@
     

    查找目录并将权限设置为 755。

    $ find / -type d -perm 777 -print -exec chmod 755 {} \;
     
    -

    查找并 tar

    +

    查找并 tar

    $ find . -type f -name "*.java" | xargs tar cvf myfile.tar
     $ find . -type f -name "*.java" | xargs tar rvf myfile.tar
     
    @@ -434,8 +434,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -446,7 +444,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/git.html b/docs/git.html index ba72b2a5..60080f3c 100644 --- a/docs/git.html +++ b/docs/git.html @@ -34,15 +34,15 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    Git 备忘清单

    本备忘单总结了常用的 Git 命令行指令,以供快速参考。

    入门

    -

    入门

    +

    创建存储库

    创建一个新的本地存储库

    $ git init [project name]
     
    @@ -52,7 +52,7 @@

    将存储库克隆到指定目录

    $ git clone git_url 指定目录
     
    -

    做出改变

    +

    做出改变

    在工作目录中显示修改后的文件,为您的下一次提交暂存

    $ git status
    @@ -84,7 +84,7 @@
     

    在指定分支之前应用当前分支的任何提交

    $ git rebase [branch]
     
    -

    配置

    +

    配置

    设置将附加到您的提交和标签的名称

    $ git config --global user.name "name"
     
    @@ -97,7 +97,7 @@

    在文本编辑器中编辑全局配置文件

    $ git config --global --edit
     
    -

    使用分支

    +

    使用分支

    列出所有本地分支

    $ git branch
     
    @@ -120,7 +120,7 @@

    标记当前提交

    $ git tag my_tag
     
    -

    观察你的存储库

    +

    观察你的存储库

    显示当前活动分支的提交历史

    $ git log
     
    @@ -136,7 +136,7 @@

    以人类可读的格式显示 Git 中的任何对象

    $ git show [SHA]
     
    -

    同步

    +

    同步

    从该 Git 远程获取所有分支

    $ git fetch [alias]
     
    @@ -156,7 +156,7 @@

    将另一个分支的一个特定提交合并到当前分支

    $ git cherry-pick [commit_id]
     
    -

    远程

    +

    远程

    添加一个 git URL 作为别名

    $ git remote add [alias] [url]
     
    @@ -172,7 +172,7 @@

    更改 git repo 的 URL

    $ git remote set-url origin [git_url]
     
    -

    临时提交

    +

    临时提交

    保存已修改和分阶段的更改

    $ git stash
     
    @@ -185,7 +185,7 @@

    丢弃存储堆栈顶部的更改

    $ git stash drop
     
    -

    跟踪路径更改

    +

    跟踪路径更改

    从项目中删除文件并暂存删除以进行提交

    $ git rm [file]
     
    @@ -195,7 +195,7 @@

    显示所有提交日志,并指示任何移动的路径

    $ git log --stat -M
     
    -

    忽略文件

    +

    忽略文件

    /logs/*
     # “!” 意思是不要忽视
     !logs/.gitkeep
    @@ -207,8 +207,8 @@
     .sass-cache
     

    .gitignore 文件指定了 Git 应该忽略的未跟踪的文件

    -

    Git 技巧

    -

    重命名分支

    +

    Git 技巧

    +

    重命名分支

    • 重命名new
      $ git branch -m <new>
      @@ -226,7 +226,7 @@
       
    -

    Log

    +

    Log

    按内容搜索更改

    $ git log -S'<a term in the source>'
     
    @@ -237,7 +237,7 @@
    $ git log --pretty=oneline --graph --decorate --all
     
    -

    分支

    +

    分支

    列出所有分支及其上游

    $ git branch -vv 
    @@ -254,22 +254,22 @@
     

    删除本地存在远程不存在的分支

    git remote prune origin
     
    -

    Commit

    +

    Commit

    $ git commit -v --amend
     

    重写最后的提交信息

    -

    忽略文件的权限变化

    +

    忽略文件的权限变化

    git config core.fileMode false
     

    不再将文件的权限变化视作改动

    -

    Git 别名

    +

    Git 别名

    $ git config --global alias.co checkout
     $ git config --global alias.br branch
     $ git config --global alias.ci commit
     $ git config --global alias.st status
     

    也可以看看:更多别名

    -

    设置大小写敏感

    +

    设置大小写敏感

    # 查看git 的设置
     $ git config --get core.ignorecase
     # 设置大小写敏感
    @@ -277,7 +277,7 @@
     # 远程有俩相同目录,通过这种方式清除掉,然后提交记录
     $ git rm -r --cached <目录/文件> 
     
    -

    修改远程 Commit 记录

    +

    修改远程 Commit 记录

    $ git rebase -i HEAD~3
     # 表示要修改当前版本的倒数第三次状态
    @@ -315,13 +315,13 @@
     # 最后,确保没有人提交进行推送,最好不要加 -f 强制推送
     $ git push -f origin master
     
    -

    撤销远程记录

    +

    撤销远程记录

    # 撤销一条记录   
     $ git reset --hard HEAD~1
     # 强制同步到远程仓库  
     $ git push -f origin HEAD:master
     
    -

    放弃本地修改内容

    +

    放弃本地修改内容

    # 如果有的修改以及加入暂存区的话
     $ git reset --hard 
     # 还原所有修改,不会删除新增的文件
    @@ -329,19 +329,19 @@
     # 下面命令会删除新增的文件
     $ git clean -xdf
     
    -

    获取最近一次提交的 Hash

    +

    获取最近一次提交的 Hash

    $ git rev-parse HEAD # e10721cb8859b2c
     # 获取短 hash
     $ git rev-parse --short HEAD # e10721c
     
    -

    删除已经合并到 master 的分支

    +

    删除已经合并到 master 的分支

    $ git branch --merged master | grep -v '^\*\|  master' | xargs -n 1 git branch -d
     
    -

    中文乱码的解决方案

    +

    中文乱码的解决方案

    $ git config --global core.quotepath false
     
    -

    把 A 分支的某一个 commit,放到 B 分支上

    +

    把 A 分支的某一个 commit,放到 B 分支上

    # 切换到 B 分支
     $ git checkout <B>
     # 将 A 分支 <hash-id> 的内容 pick 到 B 分支
    @@ -360,8 +360,6 @@ function anchorPoint() {
       Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active'))
       if (elm?.tagName === 'H3') {
         elm?.parentElement?.parentElement?.classList.add('active');
    -    const box = elm?.parentElement?.parentElement;
    -    console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap'))
       }
     }
     anchorPoint();
    @@ -372,7 +370,6 @@ function updateAnchor(element) {
         tocanchor.classList.remove('is-active-link');
       });
       const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`);
    -  console.log('anchor', anchor)
       if (anchor) {
         anchor.classList.add('is-active-link');
       }
    diff --git a/docs/github-actions.html b/docs/github-actions.html
    index 879fe8a1..46cac18d 100644
    --- a/docs/github-actions.html
    +++ b/docs/github-actions.html
    @@ -34,7 +34,7 @@
         document.documentElement.setAttribute('data-color-mode', mode);
         localStorage.setItem(LOCAL_NANE, mode);
       }
    -

    +

    @@ -51,8 +51,8 @@

    本备忘单总结了 Github Actions 常用的配置说明,以供快速参考。

    入门

    -

    入门

    +

    介绍

    GitHub Actions 的仓库中自动化、自定义和执行软件开发工作流程,有四个基本的概念,如下:

    @@ -90,7 +90,7 @@
  • 根据配置事件自动运行配置文件
  • -

    配置文件

    +

    配置文件

    name: GitHub Actions Demo
     on:
       push:
    @@ -112,7 +112,7 @@
           - run: npm run build
     

    存放到 .github/workflows 目录中,命名为 ci.yml,当 push 代码到仓库 main 分支中,该配置自动运行配置。

    -

    指定触发

    +

    指定触发

    push 事件触发 workflow

    on: push
    @@ -144,7 +144,7 @@
       release:
         types: [published]
     
    -

    多项任务

    +

    多项任务

    jobs:
       my_first_job:  # 第一个任务
         name: My first job
    @@ -153,7 +153,7 @@
         name: My second job
     

    通过 jobs (jobs.<job_id>.name)字段,配置一项或多项需要执行的任务

    -

    多项任务依赖关系

    +

    多项任务依赖关系

    通过 needs (jobs.<job_id>.needs)字段,指定当前任务的依赖关系

    jobs:
       job1:
    @@ -163,7 +163,7 @@
         needs: [job1, job2]
     

    上面配置中,job1 必须先于 job2 完成,而 job3 等待 job1job2 的完成才能运行。因此,这个 workflow 的运行顺序依次为:job1job2job3

    -

    多项任务传递参数

    +

    多项任务传递参数

    jobs:
       job1:
    @@ -183,7 +183,7 @@
         steps:
           - run: echo ${{needs.job1.outputs.output1}} ${{needs.job1.outputs.output2}}
     
    -

    指定每项任务的虚拟机环境

    +

    指定每项任务的虚拟机环境

    runs-on: ubuntu-latest
     

    指定运行所需要的虚拟机环境,⚠️ 它是必填字段

    @@ -200,7 +200,7 @@

    另见: 选择 GitHub 托管的运行器

    -

    指定每项任务的步骤

    +

    指定每项任务的步骤

    每个步骤都可以指定以下三个字段

    jobs.<job_id>.steps.name # 步骤名称
     # 该步骤运行的命令或者 action
    @@ -221,7 +221,7 @@
           - run: npm install
           - run: npm run build
     
    -

    环境变量

    +

    环境变量

    jobs.<job_id>.environment
     

    使用单一环境名称的示例

    @@ -232,14 +232,14 @@ name: production_environment url: https://github.com
    -

    自定义环境变量

    +

    自定义环境变量

    GitHub 会保留 GITHUB_ 环境变量前缀供 GitHub 内部使用。设置有 GITHUB_ 前缀的环境变量或密码将导致错误。

    - name: 测试 nodejs 获取环境变量
       env:
         API_TOKEN: ${{ secrets.API_TOKEN }}
     

    https://github.com/<用户名>/<项目名称>/settings/secrets 中添加 secrets API_TOKEN,在工作流中设置环境变量 API_TOKEN

    -

    表达式

    +

    表达式

    if 条件下使用表达式时,可以省略表达式语法 (${{ }}),因为 GitHub 会自动将 if 条件作为表达式求值

    steps:
       - uses: actions/hello-world-action@v1.1
    @@ -250,7 +250,7 @@
     
    env:
       MY_ENV_VAR: ${{ <expression> }}
     
    -

    操作符

    +

    操作符

    • ( ) (逻辑分组)
    • [ ] (指数)
    • @@ -266,7 +266,7 @@
    • || (或者)
    -

    Github 上下文

    +

    Github 上下文

    @@ -371,7 +371,7 @@
    属性名称类型描述
    github (object)工作流程中任何作业或步骤期间可用的顶层上下文。
    github.event (object)完整事件 web 挂钩有效负载。 更多信息请参阅“触发工作流程的事件”。
    github.event_path (string)运行器上完整事件 web 挂钩有效负载的路径。
    github.workflow (string)工作流程的名称。 如果工作流程文件未指定 name,此属性的值将是仓库中工作流程文件的完整路径。
    github.job (string)当前作业的 job_id。
    github.run_id (string)仓库中每个运行的唯一编号。 如果您重新执行工作流程运行,此编号不变。
    github.run_number (string)仓库中特定工作流程每个运行的唯一编号。 此编号从 1(对应于工作流程的第一个运行)开始,然后随着每个新的运行而递增。 如果您重新执行工作流程运行,此编号不变。
    github.actor (string)发起工作流程运行的用户的登录名。
    github.repository (string)所有者和仓库名称。 例如 Codertocat/Hello-World。
    github.repository_owner (string)仓库所有者的名称。 例如 Codertocat。
    github.event_name (string)触发工作流程运行的事件的名称。
    github.sha (string)触发工作流程的提交 SHA。
    github.ref (string)触发工作流程的分支或标记参考。
    github.head_ref (string)工作流程运行中拉取请求的 head_ref 或来源分支。 此属性仅在触发工作流程运行的事件为 pull_request 时才可用。
    github.base_ref (string)工作流程运行中拉取请求的 base_ref 或目标分支。 此属性仅在触发工作流程运行的事件为 pull_request 时才可用。
    github.token (string)代表仓库上安装的 GitHub 应用程序进行身份验证的令牌。 这在功能上等同于 GITHUB_TOKEN 密码。 更多信息请参阅“使用 GITHUB_TOKEN 验证身份”。
    github.workspace (string)使用 checkout 操作时步骤的默认工作目录和仓库的默认位置。
    github.action (string)正在运行的操作的名称。 在当前步骤运行脚本时,GitHub 删除特殊字符或使用名称 run。 如果在同一作业中多次使用相同的操作,则名称将包括带有序列号的后缀。 例如,运行的第一个脚本名称为 run1,则第二个脚本将命名为 run2。 同样,actions/checkout 第二次调用时将变成 actionscheckout2。

    Github 上下文是访问有关工作流运行、运行器环境、作业和步骤的信息的一种方式

    -

    默认环境变量

    +

    默认环境变量

    @@ -456,7 +456,7 @@
    环境变量描述
    CI始终设置为 true
    HOME用于存储用户数据的 GitHub 主目录路径。 例如 /github/home
    GITHUB_WORKFLOW工作流程的名称。
    GITHUB_RUN_ID仓库中每个运行的唯一编号。 如果您重新执行工作流程运行,此编号不变。
    GITHUB_RUN_NUMBER仓库中特定工作流程每个运行的唯一编号。 此编号从 1(对应于工作流程的第一个运行)开始,然后随着每个新的运行而递增。 如果您重新执行工作流程运行,此编号不变。
    GITHUB_ACTION操作唯一的标识符 (id)。
    GITHUB_ACTIONS当 GitHub 操作 运行工作流程时,始终设置为 true。 您可以使用此变量来区分测试是在本地运行还是通过 GitHub 操作 运行。
    GITHUB_ACTION_PATHGitHub 操作所在的路径
    GITHUB_ACTOR发起工作流程的个人或应用程序的名称。 例如 octocat
    GITHUB_API_URL返回 API URL。例如:https://api.github.com
    GITHUB_REPOSITORY所有者和仓库名称。 例如 octocat/Hello-World
    GITHUB_EVENT_NAME触发工作流程的 web 挂钩事件的名称
    GITHUB_EVENT_PATH具有完整 web 挂钩事件有效负载的文件路径。 例如 /github/workflow/event.json
    GITHUB_WORKSPACEGitHub 工作空间目录路径。 如果您的工作流程使用 actions/checkout 操作,工作空间目录将包含存储仓库副本的子目录。 如果不使用 actions/checkout 操作,该目录将为空。 例如 /home
    GITHUB_SHA触发工作流程的提交 SHA。 例如 ffac537e6cbbf9
    GITHUB_REF触发工作流程的分支或标记参考。 例如 refs/heads/feature-branch-1。 如果分支或标记都不适用于事件类型,则变量不会存在
    GITHUB_HEAD_REF仅为复刻的仓库设置。头部仓库的分支
    GITHUB_BASE_REF仅为复刻的仓库设置。基础仓库的分支

    另见: 默认环境变量

    -

    直接常量

    +

    直接常量

    作为表达式的一部分,可以使用 boolean, null, numberstring数据类型

    env:
    @@ -469,7 +469,7 @@
       myString: Mona the Octocat
       myStringInBraces: ${{ 'It''s source!' }}
     
    -

    函数 contains

    +

    函数 contains

    使用字符串的示例

    contains('Hello world', 'llo') // 返回 true
    @@ -479,27 +479,27 @@
     

    另见: 函数 contains

    -

    函数 startsWith

    +

    函数 startsWith

    startsWith('Hello world', 'He') // 返回 true
     

    另见: 函数 startsWith,此函数不区分大小写

    -

    函数 format

    +

    函数 format

    format('{{Hello {0} {1} {2}!}}', 'Mona', 'the', 'Octocat')
     // 返回 '{Hello Mona the Octocat!}'.
     

    另见: 函数 format

    -

    函数 join

    +

    函数 join

    join(github.event.issue.labels.*.name, ', ')
     // 也许返回 'bug, help wanted'.
     

    另见: 函数 join

    -

    函数 toJSON

    +

    函数 toJSON

    toJSON(job)
     // 也许返回 { "status": "Success" }.
     

    另见: 函数 toJSON

    -

    函数

    +

    函数

    @@ -535,20 +535,20 @@
    :-:-
    fromJSON返回 JSON 对象或 JSON 数据类型的值 #
    hashFiles返回与路径模式匹配的文件集的单个哈希 #
    success当前面的步骤都没失败或被取消时返回 true #
    always使步骤始终执行,返回 true 即使取消也是如此 #
    cancelled如果工作流被取消,则返回 true #
    failure当作业的任何先前步骤失败时返回 true #
    -

    函数 success()

    +

    函数 success()

    steps:
       ...
       - name: The job has succeeded
         if: ${{ success() }}
     
    -

    函数 failure()

    +

    函数 failure()

    steps:
       ...
       - name: The job has failed
         if: ${{ failure() }}
     
    -

    常用实例

    -

    获取版本信息

    +

    常用实例

    +

    获取版本信息

    - name: Test
       run: |
    @@ -561,14 +561,14 @@
         echo "$VERSION"
     
    -

    提交到 gh-pages 分支

    +

    提交到 gh-pages 分支

    - name: Deploy
       uses: peaceiris/actions-gh-pages@v3
       with:
         github_token: ${{secrets.GITHUB_TOKEN}}
         publish_dir: ./build
     
    -

    修改 package.json

    +

    修改 package.json

    - name: Modify Version
       shell: bash
       run: |
    @@ -581,7 +581,7 @@
       with:
         rename: '@wcj/github-package-test'
     
    -

    克隆带有 Submodule 的仓库

    +

    克隆带有 Submodule 的仓库

    - name: Checkout
       uses: actions/checkout@v3
       with:
    @@ -596,7 +596,7 @@
         # git submodule sync --recursive
         # git -c "http.extraheader=$auth_header" -c protocol.version=2 submodule update --init --remote --force --recursive --checkout ant.design
     
    -

    步骤依赖作业

    +

    步骤依赖作业

    使用 jobs.<job_id>.needs 识别在此作业运行之前必须成功完成的任何作业。它可以是一个字符串,也可以是字符串数组。 如果某个作业失败,则所有需要它的作业都会被跳过,除非这些作业使用让该作业继续的条件表达式。

    jobs:
    @@ -621,7 +621,7 @@
         needs: [job1, job2]
     

    在此示例中,job3 使用 always() 条件表达式,因此它始终在 job1job2 完成后运行,不管它们是否成功。

    -

    同步 Gitee

    +

    同步 Gitee

    - name: Sync to Gitee
       run: |
    @@ -636,7 +636,7 @@
         mirror uiwjs uiw
     
    -

    提交 NPM 包

    +

    提交 NPM 包

    - run: npm publish --access public
       env:
         NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
    @@ -655,7 +655,7 @@
         package: packages/data/package.json
     

    它有个好处,检测 package.json 中版本号是否发生变更,来决定是否提交版本,不会引发流程错误。

    -

    步骤作业文件共享

    +

    步骤作业文件共享

    Artifacts 是 GitHub Actions 为您提供持久文件并在运行完成后使用它们或在作业(文档)之间共享的一种方式。

    要创建工件并使用它,您将需要不同的操作:上传和下载。 要上传文件或目录,您只需像这样使用它:

    @@ -675,7 +675,7 @@ with: name: my-artifact
    -

    Node.js

    +

    Node.js

    - name: Setup Node
       uses: actions/setup-node@v2
       with:
    @@ -696,7 +696,7 @@
       - run: npm run build --if-present
       - run: npm test
     
    -

    提交 docker 镜像

    +

    提交 docker 镜像

    # https://www.basefactor.com/github-actions-docker
     - name: Docker login
    @@ -719,7 +719,7 @@
         docker push ${{ secrets.DOCKER_USER }}/ant.design:$VERSION
         docker push ${{ secrets.DOCKER_USER }}/ant.design:latest
     
    -

    创建一个 tag

    +

    创建一个 tag

    - name: Create Tag
       id: create_tag
       uses: jaywcjlove/create-tag-action@main
    @@ -727,7 +727,7 @@
         package-path: ./package.json
     

    根据 package-path 指定的 package.json 检测 version 是否发生变化来创建 tag

    -

    生成 git 提交日志

    +

    生成 git 提交日志

    - name: Generate Changelog
       id: changelog
       uses: jaywcjlove/changelog-generator@main
    @@ -738,7 +738,7 @@
       run: echo "${{ steps.changelog.outputs.changelog }}"
     
    -

    提交到 GitHub docker 镜像仓库

    +

    提交到 GitHub docker 镜像仓库

    - name: '登录到 GitHub 注册表'
       run: echo ${{ github.token }} | docker login ghcr.io -u ${{ github.actor }} --password-stdin
    @@ -756,7 +756,7 @@
         docker tag ghcr.io/jaywcjlove/reference:latest ghcr.io/jaywcjlove/reference:${{steps.changelog.outputs.version}}
         docker push ghcr.io/jaywcjlove/reference:${{steps.changelog.outputs.version}}
     
    -

    提交 commit 到 master 分支

    +

    提交 commit 到 master 分支

    - name: 生成一个文件,并将它提交到 master 分支
       run: |
    @@ -783,7 +783,7 @@
       with:
         github_token: ${{ secrets.GITHUB_TOKEN }}
     
    -

    作业之间共享数据

    +

    作业之间共享数据

    创建一个文件,然后将其作为构件上传

    jobs:
       example-job:
    @@ -807,13 +807,13 @@
             with:
               name: output-log-file
     
    -

    指定运行命令的工作目录

    +

    指定运行命令的工作目录

    - name: Clean temp directory
       run: rm -rf *
       working-directory: ./temp
     

    使用 working-directory 关键字,您可以指定运行命令的工作目录(./temp)

    -

    defaults.run

    +

    defaults.run

    jobs:
       job1:
         runs-on: ubuntu-latest
    @@ -823,7 +823,7 @@
             working-directory: scripts
     

    作业中的所有 run 步骤提供默认的 shellworking-directory

    -

    jobs.<job_id>.steps[*].shell

    +

    jobs.<job_id>.steps[*].shell

    使用 bash 运行脚本

    steps:
       - name: Display the path
    @@ -839,7 +839,7 @@
         shell: python
     

    您可以使用 shell 关键字覆盖运行器操作系统中的默认 shell 设置

    -

    一些 actions 推荐

    +

    一些 actions 推荐

    @@ -896,7 +896,7 @@
    :-:-
    create-tag-action根据 package.json 创建 Tag / Release
    changelog-generator生成 changelog 日志
    github-action-modify-file-content修改仓库文件内容
    github-action-contributors生成贡献(contributors.svg)图片
    generated-badges生成徽章(Badges)图片
    coverage-badges-cli生成覆盖率徽章(Badges)图片
    action-ejs基于 ejs 生成 HTML
    github-action-package修改 JSON 文件内容
    markdown-to-html-cliMarkdown 转换成 HTML
    ncipollo/release-action创建 Release
    peaceiris/actions-gh-pages将文件或文件夹内容提交到 gh-pages 分支
    -

    另见

    +

    另见

    • Github Actions 学习笔记 (jaywcjlove.github.io)
    • 了解 GitHub Actions (docs.github.com)
    • @@ -914,8 +914,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -926,7 +924,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/golang.html b/docs/golang.html index 123d9b2d..fb00cbfc 100644 --- a/docs/golang.html +++ b/docs/golang.html @@ -34,12 +34,12 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    Golang 备忘清单

    +

    Golang 备忘清单

    该备忘单提供了帮助您使用 Golang 的基本语法和方法。

    入门

    -

    入门

    +
    package main
     import "fmt"
     func main() {
    @@ -51,7 +51,7 @@
     Hello, world!
     

    或者在 Go repl 中尝试一下

    -

    变量

    +

    变量

    var s1 string
     s1 = "Learn Go!"
     // 一次声明多个变量
    @@ -64,7 +64,7 @@
     d := true                // bool
     

    参见:基本类型

    -

    函数

    +

    函数

    package main
     import "fmt"
     // 程序的入口点
    @@ -77,19 +77,19 @@
     }
     

    参见:函数(Functions)

    -

    注释

    +

    注释

    // 单行注释
     /* 这是
     多行注释 */
     
    -

    如果语句

    +

    如果语句

    if true {
       fmt.Println("Yes!")
     }
     

    参见:条件控制

    -

    Golang 基本类型

    -

    字符串 Strings

    +

    Golang 基本类型

    +

    字符串 Strings

    s1 := "Hello" + "World"
     s2 := `A "raw" string literal
     can include line breaks.`
    @@ -99,7 +99,7 @@
     fmt.Println(string(s1[0:5]))
     

    字符串的类型为 字符串

    -

    数字 Numbers

    +

    数字 Numbers

    num := 3             // int
     num := 3.            // float64
     num := 3 + 4i        // complex128
    @@ -107,18 +107,18 @@
     var u uint = 7       // uint (unsigned)
     var p float32 = 22.7  // 32-bit float
     
    -

    操作符 Operators

    +

    操作符 Operators

    x := 5
     x++
     fmt.Println("x + 4 =", x + 4)
     fmt.Println("x * 4 =", x * 4) 
     

    参见:更多操作符

    -

    布尔值 Booleans

    +

    布尔值 Booleans

    isTrue   := true
     isFalse  := false
     
    -

    操作符

    +

    操作符

    fmt.Println(true && true)   // true 
     fmt.Println(true && false)  // false
     fmt.Println(true || true)   // true
    @@ -126,7 +126,7 @@
     fmt.Println(!true)          // false
     

    参见:更多操作符

    -

    数组 Arrays

    +

    数组 Arrays

    ┌────┬────┬────┬────┬─────┬─────┐
     | 2  | 3  | 5  | 7  | 11  | 13  |
    @@ -148,7 +148,7 @@
     fmt.Println(a[0], a[1]) //=> Hello World
     fmt.Println(a)   // => [Hello World]
     
    -

    2d array

    +

    2d array

    var twoDimension [2][3]int
     for i := 0; i < 2; i++ {
         for j := 0; j < 3; j++ {
    @@ -158,7 +158,7 @@
     // => 2d:  [[0 1 2] [1 2 3]]
     fmt.Println("2d: ", twoDimension)
     
    -

    指针(Pointers)

    +

    指针(Pointers)

    func main () {
       b := *getPointer()
       fmt.Println("Value is", b)
    @@ -173,7 +173,7 @@
     *a = 234
     

    参见:指针(Pointers)

    -

    切片(Slices)

    +

    切片(Slices)

    s := make([]string, 3)
     s[0] = "a"
     s[1] = "b"
    @@ -186,28 +186,28 @@
     slice := []int{2, 3, 4}
     

    另见:切片示例

    -

    常量(Constants)

    +

    常量(Constants)

    const s string = "constant"
     const Phi = 1.618
     const n = 500000000
     const d = 3e20 / n
     fmt.Println(d)
     
    -

    类型转换

    +

    类型转换

    i := 90
     f := float64(i)
     u := uint(i)
     // 将等于字符Z
     s := string(i)
     
    -

    如何获取int字符串?

    +

    如何获取int字符串?

    i := 90
     // 需要导入“strconv”
     s := strconv.Itoa(i)
     fmt.Println(s) // Outputs: 90
     
    -

    Golang 字符串

    -

    字符串函数

    +

    Golang 字符串

    +

    字符串函数

    package main
     import (
     	"fmt"
    @@ -224,7 +224,7 @@
     	fmt.Println(string("hello"[1]))
     }
     
    -

    fmt.Printf

    +

    fmt.Printf

    package main
     import (
    @@ -263,7 +263,7 @@
     }
     

    另见:fmt

    -

    函数实例

    +

    函数实例

    @@ -322,8 +322,8 @@
    实例Result
    Contains("test", "es")true
    Count("test", "t")2
    HasPrefix("test", "te")true
    HasSuffix("test", "st")true
    Index("test", "e")1
    Join([]string{"a", "b"}, "-")a-b
    Repeat("a", 5)aaaaa
    Replace("foo", "o", "0", -1)f00
    Replace("foo", "o", "0", 1)f0o
    Split("a-b-c-d-e", "-")[a b c d e]
    ToLower("TEST")test
    ToUpper("test")TEST
    -

    Golang 条件控制

    -

    有条件的

    +

    Golang 条件控制

    +

    有条件的

    a := 10
     if a > 20 {
         fmt.Println(">")
    @@ -333,7 +333,7 @@
         fmt.Println("=")
     }
     
    -

    if 中的语句

    +

    if 中的语句

    x := "hello go!"
     if count := len(x); count > 0 {
         fmt.Println("Yes")
    @@ -344,7 +344,7 @@
         fmt.Println("Uh oh")
     }
     
    -

    Switch

    +

    Switch

    x := 42.0
     switch x {
       case 0:
    @@ -359,12 +359,12 @@
     }
     

    参见:Switch

    -

    For loop

    +

    For loop

    for i := 0; i <= 10; i++ {
       fmt.Println("i: ", i)
     }
     
    -

    对于 Range 循环

    +

    对于 Range 循环

    nums := []int{2, 3, 4}
     sum := 0
     for _, num := range nums {
    @@ -372,14 +372,14 @@
     }
     fmt.Println("sum:", sum)
     
    -

    While 循环

    +

    While 循环

    i := 1
     for i <= 3 {
       fmt.Println(i)
       i++
     }
     
    -

    Continue 关键字

    +

    Continue 关键字

    for i := 0; i <= 5; i++ {
       if i % 2 == 0 {
           continue
    @@ -387,14 +387,14 @@
       fmt.Println(i)
     }
     
    -

    Break 关键字

    +

    Break 关键字

    for {
       fmt.Println("loop")
       break
     }
     
    -

    Golang 结构和映射

    -

    定义

    +

    Golang 结构和映射

    +

    定义

    package main
     import (
    @@ -411,7 +411,7 @@
     }
     

    参见:结构(Structs)

    -

    字面量

    +

    字面量

    v := Vertex{X: 1, Y: 2}
     // Field names can be omitted
     v := Vertex{1, 2}
    @@ -419,7 +419,7 @@
     v := Vertex{X: 1}
     

    您还可以输入字段名

    -

    映射

    +

    映射

    m := make(map[string]int)
     m["k1"] = 7
    @@ -435,13 +435,13 @@
     n := map[string]int{"foo": 1, "bar": 2}
     fmt.Println(n) // => map[bar:2 foo:1]
     
    -

    指向结构的指针

    +

    指向结构的指针

    v := &Vertex{1, 2}
     v.X = 2
     

    Doing v.X is the same as doing (*v).X, when v is a pointer.

    -

    Golang 函数

    -

    多个参数

    +

    Golang 函数

    +

    多个参数

    func plus(a int, b int) int {
         return a + b
     }
    @@ -451,7 +451,7 @@
     fmt.Println(plus(1, 2))
     fmt.Println(plusPlus(1, 2, 3))
     
    -

    多次返回

    +

    多次返回

    func vals() (int, int) {
       return 3, 7
     }
    @@ -459,7 +459,7 @@
     fmt.Println(a)    // => 3
     fmt.Println(b)    // => 7
     
    -

    匿名函数

    +

    匿名函数

    r1, r2 := func() (string, string) {
         x := []string{"hello", "world"}
         return x[0], x[1]
    @@ -467,7 +467,7 @@
     // => hello world
     fmt.Println(r1, r2)
     
    -

    命名返回

    +

    命名返回

    func split(sum int) (x, y int) {
       x = sum * 4 / 9
       y = sum - x
    @@ -477,7 +477,7 @@
     fmt.Println(x)   // => 7
     fmt.Println(y)   // => 10
     
    -

    变量函数

    +

    变量函数

    func sum(nums ...int) {
       fmt.Print(nums, " ")
       total := 0
    @@ -491,7 +491,7 @@
     nums := []int{1, 2, 3, 4}
     sum(nums...)  // => [1 2 3 4] 10
     
    -

    初始化函数

    +

    初始化函数

    import --> const --> var --> init()
     

    @@ -506,7 +506,7 @@ fmt.Println(num) // => 0 }
    -

    作为值的函数

    +

    作为值的函数

    func main() {
       // 将函数赋给名称
       add := func(a, b int) int {
    @@ -516,7 +516,7 @@
       fmt.Println(add(3, 4)) // => 7
     }
     
    -

    关闭 1

    +

    关闭 1

    func scope() func() int{
       outer_var := 2
       foo := func() int {return outer_var}
    @@ -525,7 +525,7 @@
     // Outpus: 2
     fmt.Println(scope()())
     
    -

    关闭 2

    +

    关闭 2

    func outer() (func() int, int) {
         outer_var := 2
         inner := func() int {
    @@ -539,20 +539,20 @@
     fmt.Println(inner()) // => 200
     fmt.Println(val)     // => 101
     
    -

    Golang 包(Packages)

    -

    导入

    +

    Golang 包(Packages)

    +

    导入

    import "fmt"
     import "math/rand"
     
    -

    等同于

    +

    等同于

    import (
       "fmt"        // 给 fmt.Println
       "math/rand"  // 给 rand.Intn
     )
     

    另见:导入

    -

    别名

    +

    别名

    import r "math/rand"
     
    @@ -565,22 +565,22 @@
    r.Intn()
     
    -

    Packages

    +

    Packages

    package main
     // 一个内部包只能被另一个包导入
     // 那是在以内部目录的父级为根的树内
     package internal
     

    另见:内部包

    -

    导出名称

    +

    导出名称

    // 以大写字母开头
     func Hello () {
       ···
     }
     

    另见:导出的名称

    -

    Golang 并发

    -

    协程

    +

    Golang 并发

    +

    协程

    package main
     import (
    @@ -603,7 +603,7 @@
     }
     

    参见:Goroutines, Channels

    -

    WaitGroup

    +

    WaitGroup

    package main
     import (
    @@ -627,7 +627,7 @@
     }
     

    参见:WaitGroup

    -

    Closing channels

    +

    Closing channels

    ch <- 1
     ch <- 2
     ch <- 3
    @@ -644,7 +644,7 @@
     v, ok := <- ch
     

    参见:范围和关闭

    -

    缓冲通道

    +

    缓冲通道

    ch := make(chan int, 2)
     ch <- 1
     ch <- 2
    @@ -653,8 +653,8 @@
     // 所有 goroutine 都处于休眠状态 - 死锁
     

    参见:缓冲通道

    -

    Golang 错误控制

    -

    延迟函数

    +

    Golang 错误控制

    +

    延迟函数

    func main() {
       defer func() {
         fmt.Println("Done")
    @@ -662,7 +662,7 @@
       fmt.Println("Working...")
     }
     
    -

    Lambda defer

    +

    Lambda defer

    func main() {
       var d = int64(0)
       defer func(d *int64) {
    @@ -673,16 +673,16 @@
     }
     

    defer 函数使用当前值d,除非我们使用指针在 main 末尾获取最终值

    -

    Defer

    +

    Defer

    func main() {
       defer fmt.Println("Done")
       fmt.Println("Working...")
     }
     

    参见:Defer, panic and recover

    -

    Golang 方法(Methods)

    +

    Golang 方法(Methods)

    -

    接收器

    +

    接收器

    type Vertex struct {
       X, Y float64
     }
    @@ -695,7 +695,7 @@
     v.Abs()
     

    参见:Methods

    -

    Mutation

    +

    Mutation

    func (v *Vertex) Scale(f float64) {
       v.X = v.X * f
       v.Y = v.Y * f
    @@ -706,21 +706,21 @@
     // `v` 已更新
     

    参见:指针接收器

    -

    Golang 接口(Interfaces)

    +

    Golang 接口(Interfaces)

    -

    基本接口(Interfaces)

    +

    基本接口(Interfaces)

    type Shape interface {
       Area() float64
       Perimeter() float64
     }
     
    -

    结构(Struct)

    +

    结构(Struct)

    type Rectangle struct {
       Length, Width float64
     }
     

    结构 Rectangle 通过实现其所有方法隐式实现接口 Shape

    -

    方法(Methods)

    +

    方法(Methods)

    func (r Rectangle) Area() float64 {
       return r.Length * r.Width
     }
    @@ -729,15 +729,15 @@
     }
     

    Shape 中定义的方法在Rectangle中实现

    -

    接口实例

    +

    接口实例

    func main() {
       var r Shape = Rectangle{Length: 3, Width: 4}
       fmt.Printf("Type of r: %T, Area: %v, Perimeter: %v.", r, r.Area(), r.Perimeter())
     }
     
    -

    杂项

    -

    关键字(Keywords)

    +

    杂项

    +

    关键字(Keywords)

    • break
    • default
    • @@ -766,7 +766,7 @@
    • var
    -

    运算符和标点符号

    +

    运算符和标点符号

    @@ -850,7 +850,7 @@
    +&+=&=&&==!=()
    -|-=|=||<<=[]
    *^*=^=<->>={}
    /<</=<<=++=:=,;
    %>>%=>>=--!....:
    &^&^=
    -

    另见

    +

    另见

    • Devhints (devhints.io)
    • A tour of Go (tour.golang.org)
    • @@ -874,8 +874,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -886,7 +884,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/grep.html b/docs/grep.html index ad10ae52..ae22b6a5 100644 --- a/docs/grep.html +++ b/docs/grep.html @@ -34,16 +34,16 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    Grep 备忘清单

    本备忘单旨在快速提醒使用命令行程序 grep 所涉及的主要概念,并假设您已经了解其用法。

    入门

    -

    使用

    +

    使用

    搜索标准输出(即文本流)

    $ grep [options] search_string
    @@ -55,7 +55,7 @@
     
    $ grep 'mellon' myfile.txt
     

    文件名中接受通配符。

    -

    选项示例

    +

    选项示例

    @@ -133,14 +133,14 @@
    选项示例说明
    -igrep -i ^DA demo.txt忘记区分大小写
    -wgrep -w "of" demo.txt仅搜索完整的单词
    -Agrep -A 3 'Exception' error.log匹配字符串后显示 3 行
    -Bgrep -B 4 'Exception' error.log在匹配字符串前显示 4 行
    -Cgrep -C 5 'Exception' error.log在匹配字符串周围显示 5 行
    -rgrep -r 'github.io' /var/log/nginx/递归搜索 (在子目录内)
    -vgrep -v 'warning' /var/log/syslog返回所有与模式不匹配的行
    -egrep -e '^al' filename使用正则表达式 (以'al'开头的行)
    -Egrep -E 'ja(s|cks)on' filename扩展正则表达式 (包含 jason 或 jackson 的行)
    -cgrep -c 'error' /var/log/syslog计算匹配数
    -lgrep -l 'robot' /var/log/*打印匹配文件的名称
    -ogrep -o search_string filename只显示字符串的匹配部分
    -ngrep -n "go" demo.txt显示匹配的行号
    -

    Grep 正则表达式

    -

    参考

    +

    Grep 正则表达式

    +

    参考

    有关更复杂的要求,请参阅完整版的正则表达式备忘单。

    -

    通配符(Wildcards)

    +

    通配符(Wildcards)

    @@ -167,7 +167,7 @@
    :-:-
    .任何字符
    ?可选且只能出现一次
    *可选的,可以多次出现
    +必需并且可以多次出现
    -

    量词(Quantifiers)

    +

    量词(Quantifiers)

    @@ -194,7 +194,7 @@
    :-:-
    {n}前一项恰好出现 n 次
    {n,}上一个项目出现 n 次或更多
    {,m}上一个项目最多出现 n 次
    {n,m}上一项出现在 n 到 m 次之间
    -

    POSIX

    +

    POSIX

    @@ -221,7 +221,7 @@
    :-:-
    [:alpha:]任何大小写字母
    [:digit:]任何数字
    [:alnum:]任何大小写字母或数字
    [:space:]任何空格
    -

    字符串

    +

    字符串

    @@ -244,7 +244,7 @@
    :-:-
    [A-Z­a-z]任何大小写字母
    [0-9]任何数字
    [0-9­A-Z­a-z]任何大小写字母或数字
    -

    位置

    +

    位置

    @@ -275,19 +275,19 @@
    :-:-
    ^ 行的开头
    $ 行结束
    ^$空行
    \<词的开头
    \>词尾
    -

    更多示例

    -

    搜索命令行历史记录

    +

    更多示例

    +

    搜索命令行历史记录

    history | grep git
     

    输入过 git 命令的记录

    -

    搜索多个文件并查找匹配文本在哪些文件中

    +

    搜索多个文件并查找匹配文本在哪些文件中

    grep -l "text" file1 file2 file3...
     
    -

    多级目录中对文本进行递归搜索

    +

    多级目录中对文本进行递归搜索

    grep "text" . -r -n
     

    . 表示当前目录。

    -

    搜索结果中包括或者排除指定文件

    +

    搜索结果中包括或者排除指定文件

    # 目录中所有的 .php 和 .html 文件中
     # 递归搜索字符 "main()"
    @@ -299,7 +299,7 @@
     # 在搜索结果中排除 filelist 文件列表里的文件
     grep "main()" . -r --exclude-from filelist
     
    -

    输出包含匹配字符串的行数 -n 选项

    +

    输出包含匹配字符串的行数 -n 选项

    grep "text" -n file_name
     # 或
    @@ -308,14 +308,14 @@
     #多个文件
     grep "text" -n file_1 file_2
     
    -

    忽略匹配样式中的字符大小写

    +

    忽略匹配样式中的字符大小写

    echo "hello world" | grep -i "HELLO"
     # hello
     
    -

    统计文件或文本中包含匹配字符串的行数 -c 选项

    +

    统计文件或文本中包含匹配字符串的行数 -c 选项

    grep -c "text" file_name
     
    -

    另见

    +

    另见

    @@ -332,8 +332,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -344,7 +342,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/homebrew.html b/docs/homebrew.html index a9b8b2a8..07f11e51 100644 --- a/docs/homebrew.html +++ b/docs/homebrew.html @@ -34,15 +34,15 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    Homebrew 备忘清单

    Homebrew 是 macOS(或Linux)缺少的包管理器,备忘清单包含 brew 命令的使用与安装

    Homebrew

    -

    Homebrew

    +

    安装

    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
     
    @@ -60,7 +60,7 @@ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
    -

    命令

    +

    命令

    @@ -115,7 +115,7 @@
    brew switch git 2.5.0更改版本
    brew list --versions git看看你有什么版本
    -

    更多包命令

    +

    更多包命令

    @@ -150,7 +150,7 @@
    命令说明
    brew info git列出版本、注意事项等
    brew cleanup git删除旧版本
    brew edit git编辑此软件包
    brew cat git打印这个软件包
    brew home git打开主页
    brew search git搜索公式
    -

    Brew Cask 命令

    +

    Brew Cask 命令

    @@ -170,7 +170,7 @@
    命令说明
    brew install --cask firefox安装火狐浏览器
    brew list --cask列出已安装应用

    Cask 命令用于与图形应用程序交互

    -

    全局命令

    +

    全局命令

    @@ -210,13 +210,13 @@
    命令说明
    brew update更新 brewcask
    brew upgrade升级所有软件包
    brew list已安装列表
    brew outdated升级需要什么?
    brew doctor诊断冲泡问题
    brew pin <formula>防止指定软件包升级
    brew unpin <formula>允许升级指定的软件包
    -

    Brew 清理

    +

    Brew 清理

    $ brew cleanup # 删除旧版本的已安装软件包
     $ brew cleanup <formula> # 删除旧版本指定软件包
     # 显示所有将被删除的软件包(试运行)
     $ brew cleanup -n 
     
    -

    brew 源码仓库

    +

    brew 源码仓库

    # 列出所有当前点击的源码仓库(点击)
     $ brew tap
     # 使用 https 从 Github 中点击软件包源码仓库以点击
    @@ -227,7 +227,7 @@
     # 从存储库中删除给定的源码仓库
     $ brew untap <user/repo>
     
    -

    搜索查看

    +

    搜索查看

    # 列出所有已安装的软件包
     $ brew list
     # 显示所有本地可用的 brew 配方
    @@ -237,7 +237,7 @@
     # 显示有关软件包的信息
     $ brew info <formula>
     
    -

    帮助命令

    +

    帮助命令

    @@ -256,7 +256,7 @@
    命令说明
    brew help打印帮助信息
    brew help <sub-command>打印子命令的帮助信息
    -

    另见

    +

    另见

    • Homebrew 官网 (brew.sh)
    • Homebrew brew 源码 (github.com)
    • @@ -275,8 +275,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -287,7 +285,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/html-char.html b/docs/html-char.html index e1c32bb6..45c29f29 100644 --- a/docs/html-char.html +++ b/docs/html-char.html @@ -34,15 +34,15 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    HTML 字符实体备忘清单

    此备忘清单是 HTML 实体及其编号和名称的完整列表。还包括可以用 HTML 表示的 ASCII 字符的完整列表。

    HTML 字符实体引用

    -

    HTML 特殊字符

    +

    HTML 特殊字符

    @@ -338,7 +338,7 @@
    HTMLSymbolNumeric描述HexCSS (ISO)JS (Octal)
    &quot;"&#34;引号u+0022 ISOnum\0022\42
    &num;#&#35;数字符号u+0023 ISOnum\0023\43
    &dollar;$&#36;美元符号u+0024 ISOnum\0024\44
    &percnt;%&#37;百分号u+0025 ISOnum\0025\45
    &amp;&&#38;和号u+0026 ISOnum\0026\46
    &apos;'&#39;撇号u+0027 ISOnum\0027\47
    &lpar;(&#40;左括号u+0028 ISOnum\0028\50
    &rpar;)&#41;右括号u+0029 ISOnum\0029\51
    &ast;*&#42;星号u+002A ISOnum\002a\52
    &plus;+&#43;加号u+002B ISOnum\002b\53
    &comma;,&#44;逗号u+002C ISOnum\002c\54
    &minus;-&#45;连字符减号u+002D ISOnum\002d\55
    &period;.&#46;句号u+002E ISOnum\002e\56
    &sol;/&#47;固相线u+002F ISOnum\002f\57
    &colon;:&#58;冒号u+003A ISOnum\003a\72
    &semi;;&#59;分号u+003B ISOnum\003b\73
    &lt;<&#60;少于u+003C ISOnum\003c\74
    &equals;=&#61;等于u+003D ISOnum\003d\75
    &gt;>&#62;大于号u+003E ISOnum\003e\76
    &quest;?&#63;问号u+003F ISOnum\003f\77
    &commat;@&#64;在标志处u+0040 ISOnum\0040\100
    &lsqb;[&#91;左方括号u+005B ISOnum\005b\133
    &bsol;\&#92;反斜杠u+005C ISOnum\005c\134
    &rsqb;]&#93;右方括号u+005D ISOnum\005d\135
    &Hat;^&#94;抑扬顿挫u+005E ISOnum\005e\136
    &lowbar;_&#95;低线u+005F ISOnum\005f\137
    &grave;`&#96;重音u+0060 ISOnum\0060\u0060
    &lcub;{&#123;左大括号u+007b ISOnum\007b\173
    &verbar;|&#124;竖线u+007c ISOnum\007c\174
    &rcub;}&#125;右大括号u+007d ISOnum\007d\175
    ~&#126;波浪号u+007e ISOnum\007e\176
    -

    HTML 拉丁语

    +

    HTML 拉丁语

    @@ -1228,7 +1228,7 @@
    HTMLSymbolNumeric描述HexCSS (ISO)JS (Octal)
    &nbsp;&#160;no-break space%A0\00a0\240
    &iexcl;¡&#161;inverted exclamation mark%A1\00a1\241
    &cent;¢&#162;cent sign%A2\00a2\242
    &pound;£&#163;pound sterling sign%A3\00a3\243
    &curren;¤&#164;general currency sign%A4\00a4\244
    &yen;¥&#165;yen sign%A5\00a5\245
    &#x20B9;&#x20B9;Indian Rupee (INR) signU+20B9\20B9\u20B9
    &brvbar;¦&#166;broken (vertical) bar%A6\00a6\246
    &sect;§&#167;section sign%A7\00a7\247
    &uml;¨&#168;umlaut (dieresis)%A8\00a8\250
    &copy;©&#169;copyright sign%A9\00a9\251
    &ordf;ª&#170;ordinal indicator, feminine%AA\00aa\252
    &laquo;«&#171;angle quotation mark, left%AB\00ab\253
    &not;¬&#172;not sign%AC\00ac\254
    &shy;­&#173;soft hyphen%AD\00ad\255
    &reg;®&#174;registered sign%AE\00ae\256
    &macr;¯&#175;macron%AF\00af\257
    &deg;°&#176;degree sign%B0\00b0\260
    &plusmn;±&#177;plus-or-minus sign%B1\00b1\261
    &sup2;²&#178;superscript two%B2\00b2\262
    &sup3;³&#179;superscript three%B3\00b3\263
    &acute;´&#180;acute accent%B4\00b4\264
    &micro;µ&#181;micro sign%B5\00b5\265
    &para;&#182;pilcrow (paragraph sign)%B6\00b6\266
    &middot;·&#183;middle dot%B7\00b7\267
    &cedil;¸&#184;cedilla%B8\00b8\270
    &sup1;¹&#185;superscript one%B9\00b9\271
    &ordm;º&#186;ordinal indicator, masculine%BA\00ba\272
    &raquo;»&#187;angle quotation mark, right%BB\00bb\273
    &frac14;¼&#188;fraction one-quarter%BC\00bc\274
    &frac12;½&#189;fraction one-half%BD\00bd\275
    &frac34;¾&#190;fraction three-quarters%BE\00be\276
    &iquest;¿&#191;inverted question mark%BF\00bf\277
    &Agrave;À&#192;capital A, grave accent%C0\00c0\300
    &Aacute;Á&#193;capital A, acute accent%C1\00c1\301
    &Acirc;Â&#194 ;capital A, circumflex accent%C2\00c2\302
    &Atilde;Ã&#195;capital A, tilde%C3\00c3\303
    &Auml;Ä&#196;capital A, dieresis or umlaut mark%C4\00c4\304
    &Aring;Å&#197;capital A, ring%C5\00c5\305
    &AElig;Æ&#198;capital AE diphthong (ligature)%C6\00c6\306
    &Ccedil;Ç&#199;capital C, cedilla%C7\00c7\307
    &Egrave;È&#200;capital E, grave accent%C8\00c8\310
    &Eacute;É&#201;capital E, acute accent%C9\00c9\311
    &Ecirc;Ê&#202;capital E, circumflex accent%CA\00ca\312
    &Euml;Ë&#203;capital E, dieresis or umlaut mark%CB\00cb\313
    &Igrave;Ì&#204;capital I, grave accent%CC\00cc\314
    &Iacute;Í&#205;capital I, acute accent%CD\00cd\315
    &Icirc;Î&#206;capital I, circumflex accent%CE\00ce\316
    &Iuml;Ï&#207;capital I, dieresis or umlaut mark%CF\00cf\317
    &ETH;Ð&#208;capital Eth, Icelandic%D0\00d0\320
    &Ntilde;Ñ&#209;capital N, tilde%D1\00d1\321
    &Ograve;Ò&#210;capital O, grave accent%D2\00d2\322
    &Oacute;Ó&#211;capital O, acute accent%D3\00d3\323
    &Ocirc;Ô&#212;capital O, circumflex accent%D4\00d4\324
    &Otilde;Õ&#213;capital O, tilde%D5\00d5\325
    &Ouml;Ö&#214;capital O, dieresis or umlaut mark%D6\00d6\326
    &times;×&#215;multiply sign%D7\00d7\327
    &Oslash;Ø&#216;capital O, slash%D8\00d8\330
    &Ugrave;Ù&#217;capital U, grave accent%D9\00d9\331
    &Uacute;Ú&#218;capital U, acute accent%DA\00da\332
    &Ucirc;Û&#219;capital U, circumflex accent%DB\00db\333
    &Uuml;Ü&#220;capital U, dieresis or umlaut mark%DC\00dc\334
    &Yacute;Ý&#221;capital Y, acute accent%DD\00dd\335
    &THORN;Þ&#222;capital THORN, Icelandic%DE\00de\336
    &szlig;ß&#223;small sharp s, German (sz ligature)%DF\00df\337
    &agrave;à&#224;small a, grave accent%E0\00e0\340
    &aacute;á&#225;small a, acute accent%E1\00e1\341
    &acirc;â&#226;small a, circumflex accent%E2\00e2\342
    &atilde;ã&#227;small a, tilde%E3\00e3\343
    &auml;ä&#228;small a, dieresis or umlaut mark%E4\00e4\344
    &aring;å&#229;small a, ring%E5\00e5\345
    &aelig;æ&#230;small ae diphthong (ligature)%E6\00e6\346
    &ccedil;ç&#231;small c, cedilla%E7\00e7\347
    &egrave;è&#232;small e, grave accent%E8\00e8\350
    &eacute;é&#233;small e, acute accent%E9\00e9\351
    &ecirc;ê&#234;small e, circumflex accent%EA\00ea\352
    &euml;ë&#235;small e, dieresis or umlaut mark%EB\00eb\353
    &igrave;ì&#236;small i, grave accent%EC\00ec\354
    &iacute;í&#237;small i, acute accent%ED\00ed\355
    &icirc;î&#238;small i, circumflex accent%EE\00ee\356
    &iuml;ï&#239;small i, dieresis or umlaut mark%EF\00ef\357
    &eth;ð&#240;small eth, Icelandic%F0\00f0\360
    &ntilde;ñ&#241;small n, tilde%F1\00f1\361
    &ograve;ò&#242;small o, grave accent%F2\00f2\362
    &oacute;ó&#243;small o, acute accent%F3\00f3\363
    &ocirc;ô&#244;small o, circumflex accent%F4\00f4\364
    &otilde;õ&#245;small o, tilde%F5\00f5\365
    &ouml;ö&#246;small o, dieresis or umlaut mark%F6\00f6\366
    &divide;÷&#247;divide sign%F7\00f7\367
    &oslash;ø&#248;small o, slash%F8\00f8\370
    &ugrave;ù&#249;small u, grave accent%F9\00f9\371
    &uacute;ú&#250;small u, acute accent%FA\00fa\372
    &ucirc;û&#251;small u, circumflex accent%FB\00fb\373
    &uuml;ü&#252;small u, dieresis or umlaut mark%FC\00fc\374
    &yacute;ý&#253;small y, acute accent%FD\00fd\375
    &thorn;þ&#254;small thorn, Icelandic%FE\00fe\376
    &yuml;ÿ&#255;small y, dieresis or umlaut mark%FF\00ff\377
    -

    HTML 拉丁文扩展

    +

    HTML 拉丁文扩展

    @@ -1299,7 +1299,7 @@
    HTMLSymbolNumeric描述HexCSS (ISO)JS (Octal)
    &OElig;Œ&#338;latin capital ligature oeu+0152 ISOlat2\0152\u0152
    &oelig;œ&#339;latin small ligature oeu+0153 ISOlat2\0153\u0153
    &Scaron;Š&#352;latin capital letter s with caronu+0160 ISOlat2\0160\u0160
    &scaron;š&#353;latin small letter s with caronu+0161 ISOlat2\0161\u0161
    &Yuml;Ÿ&#376;latin capital letter y with diaeresisu+0178 ISOlat2\0178\u0178
    &fnof;ƒ&#402;latin small f with hooku+0192 ISOtech\0192\u0192
    -

    HTML 间距修饰符字母

    +

    HTML 间距修饰符字母

    @@ -1334,7 +1334,7 @@
    HTMLSymbolNumericDescriptionHexCSS (ISO)JS (Octal)
    &circ;ˆmodifier letter circumflex accentu+02C6 ISOpub\02c6\u02c6
    &tilde;˜small tildeu+02DC ISOdia\02dc\u02dc
    -

    HTML 希腊语

    +

    HTML 希腊语

    @@ -1819,7 +1819,7 @@
    HTMLSymbolNumeric描述HexCSS (ISO)JS (Octal)
    &Alpha;Α&#913;greek capital letter alphau+0391\0391\u0391
    &Beta;Β&#914;greek capital letter betau+0392\0392\u0392
    &Gamma;Γ&#915;greek capital letter gammau+0393 ISOgrk3\0393\u0395
    &Delta;Δ&#916;greek capital letter deltau+0394 ISOgrk3\0394\u0394
    &Epsilon;Ε&#917;greek capital letter epsilonu+0395\0395\u0395
    &Zeta;Ζ&#918;greek capital letter zetau+0396\0396\u0396
    &Eta;Η&#919;greek capital letter etau+0397\0397\u0397
    &Theta;Θ&#920;greek capital letter thetau+0398 ISOgrk3\0398\u0398
    &Iota;Ι&#921;greek capital letter iotau+0399\0399\u0399
    &Kappa;Κ&#922;greek capital letter kappau+039A\039a\u039a
    &Lambda;Λ&#923;greek capital letter lambdau+039B ISOgrk3\039b\u039b
    &Mu;Μ&#924;greek capital letter muu+039C\039c\u039c
    &Nu;Ν&#925;greek capital letter nuu+039D\039d\u039D
    &Xi;Ξ&#926;greek capital letter xiu+039E ISOgrk3\039e\u039e
    &Omicron;Ο&#927;greek capital letter omicronu+039F\039f\u039f
    &Pi;Π&#928;greek capital letter piu+03A0 ISOgrk3\03a0\u03a0
    &Rho;Ρ&#929;greek capital letter rhou+03A1\03a1\u03a1
    &Sigma;Σ&#931;greek capital letter sigmau+03A3 ISOgrk3\03a3\u03A3
    &Tau;Τ&#932;greek capital letter tauu+03A4\03a4\u03A4
    &Upsilon;Υ&#933;greek capital letter upsilonu+03A5 ISOgrk3\03a5\u03A5
    &Phi;Φ&#934;greek capital letter phiu+03A6 ISOgrk3\03a6\u03A6
    &Chi;Χ&#935;greek capital letter chiu+03A7\03a7\u03A7
    &Psi;Ψ&#936;greek capital letter psiu+03A8 ISOgrk3\03a8\u03A8
    &Omega;Ω&#937;greek capital letter omegau+03A9 ISOgrk3\03a9\u03A9
    &alpha;α&#945;greek small letter alphau+03B1 ISOgrk3\03b1\u03b1
    &beta;β&#946;greek small letter betau+03B2 ISOgrk3\03b2\u03b2
    &gamma;γ&#947;greek small letter gammau+03B3 ISOgrk3\03b3\u03b3
    &delta;δ&#948;greek small letter deltau+03B4 ISOgrk3\03b4\u03b4
    &epsilon;ε&#949;greek small letter epsilonu+03B5 ISOgrk3\03b5\u03b5
    &zeta;ζ&#950;greek small letter zetau+03B6 ISOgrk3\03b6\u03b6
    &eta;η&#951;greek small letter etau+03B7 ISOgrk3\03b7\u03b7
    &theta;θ&#952;greek small letter thetau+03B8 ISOgrk3\03b8\u03b8
    &iota;ι&#953;greek small letter iotau+03B9 ISOgrk3\03b9\u03b9
    &kappa;κ&#954;greek small letter kappau+03BA ISOgrk3\03ba\u03ba
    &lambda;λ&#955;greek small letter lambdau+03BB ISOgrk3\03bb\u03bb
    &mu;μ&#956;greek small letter muu+03BC ISOgrk3\03bc\u03bc
    &nu;ν&#957;greek small letter nuu+03BD ISOgrk3\03bd\u03bd
    &xi;ξ&#958;greek small letter xiu+03BE ISOgrk3\03be\u03be
    &omicron;ο&#959;greek small letter omicronu+03BF NEW\03bf\u03bf
    &pi;π&#960;greek small letter piu+03C0 ISOgrk3\03c0\u03c0
    &rho;ρ&#961;greek small letter rhou+03C1 ISOgrk3\03c1\u03c1
    &sigmaf;ς&#962;greek small letter final sigmau+03C2 ISOgrk3\03C2\u03c2
    &sigma;σ&#963;greek small letter sigmau+03C3 ISOgrk3\03C3\u03c3
    &tau;τ&#964;greek small letter tauu+03C4 ISOgrk3\03C4\u03c4
    &upsilon;υ&#965;greek small letter upsilonu+03C5 ISOgrk3\03C5\u03c5
    &phi;φ&#966;greek small letter phiu+03C6 ISOgrk3\03C6\03c6
    &chi;χ&#967;greek small letter chiu+03C7 ISOgrk3\03C7\u03c7
    &psi;ψ&#968;greek small letter psiu+03C8 ISOgrk3\03C8\u03c8
    &omega;ω&#969;greek small letter omegau+03C9 ISOgrk3\03C9\u03c9
    &thetasym;ϑ&#977;greek small letter theta symbolu+03D1 NEW\03D1\u03D1
    &upsih;ϒ&#978;greek upsilon with hook symbolu+03D2 NEW\03D2\u03D2
    &piv;ϖ&#982;greek pi symbolu+03D6 ISOgrk3\03D6\u03D6
    -

    HTML Punctuation

    +

    HTML Punctuation

    @@ -2070,7 +2070,7 @@
    HTMLSymbolNumeric描述HexCSS (ISO)JS (Octal)
    &ensp;&#8194;en spaceu+2002 ISOpub\2002\u2002
    &emsp;&#8195;em spaceu+2003 ISOpub\2003\u2003
    &thinsp;&#8201;thin spaceu+2009 ISOpub\2009\u2009
    &zwnj;&#8204;zero width non-joineru+200C NEW RFC 2070\200C\u200C
    &zwj;&#8205;zero width joineru+200D NEW RFC 2070\200D\u200d
    &lrm;&#8206;left-to-right marku+200E NEW RFC 2070\200E\u200e
    &rlm;&#8207;right-to-left marku+200F NEW RFC 2070\200F\u200f
    &ndash;&#8211;en dashu+2013 ISOpub\2013\u2013
    &mdash;&#8212;em dashu+2014 ISOpub\2014\u2014
    &lsquo;&#8216;left single quotation marku+2018 ISOnum\2018\u2018
    &rsquo;&#8217;right single quotation marku+2019 ISOnum\2019\u2019
    &sbquo;&#8218;single low-9 quotation marku+201A NEW\201A\u201a
    &ldquo;&#8220;left double quotation marku+201C ISOnum\201C\u201c
    &rdquo;&#8221;right double quotation marku+201D ISOnum\201D\u201d
    &bdquo;&#8222;double low-9 quotation marku+201E NEW\201E\u201e
    &dagger;&#8224;daggeru+2020 ISOpub\2020\u2020
    &Dagger;&#8225;double daggeru+2021 ISOpub\2021\u2021
    &permil;&#8240;per mille signu+2030 ISOtech\2030\u2030
    &lsaquo;&#8249;single left-pointing angle quotation marku+2039 ISO proposed\2039\u2039
    &rsaquo;&#8250;single right-pointing angle quotation marku+203A ISO proposed\203A\u203a
    &bull;&#8226;bullet, aka. black small circleu+2022 ISOpub\2022\u2219
    &hellip;&#8230;horizontal ellipsis, aka three dot leaderu+2026 ISOpub\2026\u2026
    &prime;&#8242;prime, aka minutes, aka feetu+2032 ISOtech\2032\u2032
    &Prime;&#8243;double prime, aka seconds, aka inchesu+2033 ISOtech\2033\u2033
    &oline;&#8254;overline, aka spacing overscoreu+203E NEW\203E\u203e
    &frasl;&#8260;fraction slashu+2044 NEW\2044\u8260
    -

    HTML Letter-like Symbols

    +

    HTML Letter-like Symbols

    @@ -2132,7 +2132,7 @@
    HTMLSymbolNumeric描述HexCSS (ISO)JS (Octal)
    &weierp;&#8472;script capital P, aka power set, aka Weierstrass pu+2118 ISOamso\2118\u2118
    &image;&#8465;blackletter capital I, aka imaginary partu+2111 ISOamso\2111\u2111
    &real;&#8476;blackletter capital R, aka real part symbolu+211C ISOamso\211C\u211c
    &trade;&#8482;trade mark signu+2122 ISOnum\2122\u2122
    &alefsym;&#8501;alef symbolu+2135 NEW\2135\u
    -

    HTML Arrows

    +

    HTML Arrows

    @@ -2284,7 +2284,7 @@
    HTMLSymbolNumeric描述HexCSS (ISO)JS (Octal)
    &larr;&#8592;leftwards arrowu+2190 ISOnum\2190\u2190
    &uarr;&#8593;upwards arrowu+2191 ISOnum\2191\u2191
    &rarr;&#8594;rightwards arrowu+2192 ISOnum\2192\u2192
    &darr;&#8595;downwards arrowu+2193 ISOnum\2193\u2193
    &harr;&#8596;left right arrowu+2194 ISOamsa\2194\u2194
    &crarr;&#8629;downwards arrow with corner leftwards, aka carriage returnu+21B5 NEW\21B5\u21b5
    &lArr;&#8656;leftwards double arrow can be used for ‘is implied by’u+21D0 ISOtech\21D0\u21d0
    &uArr;&#8657;upwards double arrowu+21D1 ISOamsa\21D1\u21d1
    &rArr;&#8658;rightwards double arrowu+21D2 ISOtech\21D2\u21d2
    &dArr;&#8659;downwards double arrowu+21D3 ISOamsa\21D3\ud1d3
    &hArr;&#8660;left right double arrowu+21D4 ISOamsa\21D4\u21d4
    &#9668;black left pointing triangleU+25C0\25C0\u25c0
    &#9658;black right pointing triangleu+25B6\25b6\u25b6
    &#9650;black up pointing triangleu+25B2\25b2\25b2
    &#9660;black down pointing triangleu+25BC\25bc\25bc
    -

    HTML 数学运算符

    +

    HTML 数学运算符

    @@ -2643,7 +2643,7 @@
    HTMLSymbolNumeric描述HexCSS (ISO)JS (Octal)
    &forall;&#8704;for allu+2200 ISOtech\2200\u2200
    &part;&#8706;partial differentialu+2202 ISOtech\2202\u2202
    &exist;&#8707;there existsu+2203 ISOtech\2203\u2203
    &empty;&#8709;empty set, aka null set, aka diameteru+2205 ISOamso\2205\u2205
    &nabla;&#8711;nabla, aka bakad differenceu+2207 ISOtech\2207\u2207
    &isin;&#8712;element ofu+2208 ISOtech\2208\u2208
    &notin;&#8713;not an element ofu+2209 ISOtech\2209\u2209
    &ni;&#8715;contains as memberu+220B ISOtech\220B\u220b
    &prod;&#8719;n-ary product, aka product signu+220F ISOamsb\220F\u03a0
    &sum;&#8721;n-ary sumationu+2211 ISOamsb\2211\u03a3
    &minus;&#8722;minus signu+2212 ISOtech\2212\u2212
    &lowast;&#8727;asterisk operatoru+2217 ISOtech\2217\u2217
    &radic;&#8730;square root, aka radical signu+221A ISOtech\221A\u221a
    &prop;&#8733;proportional tou+221D ISOtech\221D\u221d
    &infin;&#8734;infinityu+221E ISOtech\221E\u221e
    &ang;&#8736;angleu+2220 ISOamso\2220\u2220
    &and;&#8869;logical and, aka wedgeu+2227 ISOtech\2227\u2227
    &or;&#8870;logical or, aka veeu+2228 ISOtech\2228\u2228
    &cap;&#8745;intersection, aka capu+2229 ISOtech\2229\u2229
    &cup;&#8746;union, aka cupu+222A ISOtech\222A\u222a
    &int;&#8747;integralu+222B ISOtech\222B\u222b
    &there4;&#8756;thereforeu+2234 ISOtech\2234\u2234
    &sim;&#8764;tildeu+223C ISOtech\223C\u223c
    &cong;&#8773;approximately equal tou+2245 ISOtech\2245\u2245
    &asymp;&#8776;almost equal to, aka asymptotic tou+2248 ISOamsr\2248\u2248
    &ne;&#8800;not equal tou+2260 ISOtech\2260\u2260
    &equiv;&#8801;identical tou+2261 ISOtech\2261\u2261
    &le;&#8804;less-than or equal tou+2264 ISOtech\2264\u2264
    &ge;&#8805;greater-than or equal tou+2265 ISOtech\2265\u2265
    &sub;&#8834;subset ofu+2282 ISOtech\2282\u2282
    &sup;&#8835;superset ofu+2283 ISOtech\2283\u2283
    &nsub;&#8836;not a subset ofu+2284 ISOamsn\2284\u2284
    &sube;&#8838;subset of or equal tou+2286 ISOtech\2286\u2286
    &supe;&#8839;superset of or equal tou+2287 ISOtech\2287\u2287
    &oplus;&#8853;circled plus, aka direct sumu+2295 ISOamsb\2295\u2295
    &otimes;&#8855;circled times, aka vector productu+2297 ISOamsb\2297\u2297
    &perp;&#8869;up tacku+22A5 ISOtech\22A5\u22a5
    &sdot;&#8901;dot operatoru+22C5 ISOamsb\22C5\u22c5
    -

    HTML 技术

    +

    HTML 技术

    @@ -2714,7 +2714,7 @@
    HTMLSymbolNumeric描述HexCSS (ISO)JS (Octal)
    &lceil;&#8968;left ceiling, aka apl upstileu+2308 ISOamsc\2308\u2308
    &rceil;&#8969;right ceilingu+2309 ISOamsc\2309\u2309
    &lfloor;&#8970;left floor, aka apl downstileu+230A ISOamsc\230A\u230a
    &rfloor;&#8971;right flooru+230B ISOamsc\230B\u230b
    &lang;&#9001;left-pointing angle bracketu+2329 ISOtech\2329\u2329
    &rang;&#9002;right-pointing angle bracketu+232A ISOtech\232A\u232a
    -

    HTML 杂项

    +

    HTML 杂项

    @@ -2776,7 +2776,7 @@
    HTMLSymbolNumeric描述HexCSS (ISO)JS (Octal)
    &loz;&#9674;菱形u+25CA ISOpub\25CA\u25ca
    &spades;&#9824;黑桃u+2660 ISOpub\2660\u2660
    &clubs;&#9827;梅花u+2663 ISOpub\2663\u2663
    &hearts;&#9829;黑心套装,又名情人节u+2665 ISOpub\2665\u2665
    &diams;&#9830;方块u+2666 ISOpub\2666\u2666
    -

    另见

    +

    另见

    @@ -2793,8 +2793,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -2805,7 +2803,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/html.html b/docs/html.html index b04a5d1d..fbde61cf 100644 --- a/docs/html.html +++ b/docs/html.html @@ -34,15 +34,15 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    HTML 备忘清单

    此 HTML 快速参考备忘单以可读布局列出了常见的 HTMLHTML5 标记。

    入门

    -

    入门

    +

    hello.html

    <!DOCTYPE html>
     <html lang="en">
    @@ -58,7 +58,7 @@
     </html>
     

    或者在 jsfiddle

    -

    注释 Comment

    +

    注释 Comment

    <!-- 这是代码注释 -->
     
     <!--
    @@ -66,12 +66,12 @@
       大量的行。
     -->
     
    -

    段落 Paragraph

    +

    段落 Paragraph

    <p>我来自快速参考</p>
     <p>分享快速参考备忘单。</p>
     

    请参阅:段落元素

    -

    HTML 链接

    +

    HTML 链接

    <a href="https://github.com/jaywcjlove/reference">
       Github
     </a>
    @@ -105,7 +105,7 @@
     
     
    :-:-
    href超链接指向的 URL
    rel链接 URL 的关系
    target链接目标位置:_self/_blank/_top/_parent

    请参阅:<a> 属性

    -

    Image 标签

    +

    Image 标签

    <img loading="lazy"
       src="https://xxx.png"
       alt="在此处描述图像"
    @@ -150,7 +150,7 @@
     
     
    src (URL/路径)必填,图片位置
    alt描述图像
    width图像宽度
    height图像高度
    loading浏览器应该如何加载

    请参阅:图像嵌入元素

    -

    文本格式标签

    +

    文本格式标签

    <b>粗体文字</b>
     <strong>这段文字很重要</strong>
     <i>斜体文本</i>
    @@ -168,7 +168,7 @@
     <kbd>Ctrl</kbd>
     <blockquote>文本块引用</blockquote>
     
    -

    标题

    +

    标题

    <h1> 这是标题 1 </h1>
     <h2> 这是标题 2 </h2>
     <h3> 这是标题 3 </h3>
    @@ -177,7 +177,7 @@
     <h6> 这是标题 6 </h6>
     

    您的页面上应该只有一个 h1

    -

    Section Divisions

    +

    Section Divisions

    @@ -209,7 +209,7 @@
    :-:-
    <div></div>页面内容的划分或部分
    <span></span>其他内容中的文本部分
    <p></p>文本段落
    <br>换行
    <hr>水平分割线

    这些标签用于将页面划分为多个部分

    -

    内部框架

    +

    内部框架

    <iframe
       id="inlineFrameExample"
    @@ -221,37 +221,37 @@
     </iframe>
     
    -

    ↓ 预览

    +

    ↓ 预览

    请参阅:内联框架元素

    -

    HTML 中的 JavaScript

    +

    HTML 中的 JavaScript

    <script type="text/javascript">
       let text = "Hello 快速参考";
       alert(text);
     </script>
     
    -

    外部 JavaScript

    +

    外部 JavaScript

    <body>
       ...
       <script src="app.js"></script>
     </body>
     
    -

    HTML 中的 CSS

    +

    HTML 中的 CSS

    <style type="text/css">
         h1 {
             color: purple;
         }
     </style>
     
    -

    外部样式表

    +

    外部样式表

    <head>
       ...
       <link rel="stylesheet" href="style.css"/>
     </head>
     
    -

    HTML5 标签

    -

    页面

    +

    HTML5 标签

    +

    页面

    <body>
       <header>
         <nav>...</nav>
    @@ -264,7 +264,7 @@
       </footer>
     </body>
     
    -

    标题导航

    +

    标题导航

    <header>
       <nav>
         <ul>
    @@ -275,7 +275,7 @@
       </nav>
     </header>
     
    -

    HTML5 Tags

    +

    HTML5 Tags

    @@ -415,19 +415,19 @@
    :-:-
    article独立的内容
    aside次要内容
    audio嵌入声音或音频流
    bdi双向隔离元件
    canvas通过JavaScript绘制图形
    data机器可读内容
    datalist一组预定义选项
    details其他信息
    dialog对话框或子窗口
    embed嵌入外部应用程序
    figcaption图形的标题或图例
    figure插图
    footer页脚或最不重要的
    header刊头或重要信息
    main文件的主要内容
    mark突出显示的文本
    meter已知范围内的标量值
    nav导航链接的一部分
    output计算的结果
    picture用于多个图像源的容器
    progress任务的完成进度
    rp提供回退括号
    rt定义字符的发音
    ruby表示ruby注释
    section一系列相关内容中的组
    source媒体元素的资源
    summary元素的摘要
    template定义HTML片段
    time时间或日期
    track媒体元素的字幕信息
    video嵌入视频
    wbr换行机会
    -

    HTML5 Video

    +

    HTML5 Video

    <video controls="" width="100%">
         <source src="https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4" type="video/mp4">
         很抱歉,您的浏览器不支持嵌入式视频。
     </video>
     
    -

    ↓ 预览

    +

    ↓ 预览

    -

    HTML5 Audio

    +

    HTML5 Audio

    <audio
       controls
       src="https://interactive-examples.mdn.mozilla.net/media/cc0-audio/t-rex-roar.mp3">
    @@ -435,11 +435,11 @@
     </audio>
     
    -

    ↓ 预览

    +

    ↓ 预览

    -

    HTML5 Ruby

    +

    HTML5 Ruby

    <ruby>
     <rp>(</rp><rt>hàn</rt><rp>)</rp>
     <rp>(</rp><rt></rt><rp>)</rp>
    @@ -448,7 +448,7 @@
     </ruby>
     
    -

    ↓ 预览

    +

    ↓ 预览

    (hàn) @@ -456,29 +456,29 @@ 拼 (pīn)(yīn) -

    HTML5 kdi

    +

    HTML5 kdi

    <ul>
      <li>User <bdi>hrefs</bdi>: 60 points</li>
      <li>User <bdi>jdoe</bdi>: 80 points</li>
      <li>User <bdi>إيان</bdi>: 90 points</li>
     </ul>
     
    -

    ↓ 预览

    +

    ↓ 预览

    • User hrefs: 60 points
    • User jdoe: 80 points
    • User إيان: 90 points
    -

    HTML5 progress

    +

    HTML5 progress

    <progress value="50" max="100"></progress>
     

    -

    HTML5 mark

    +

    HTML5 mark

    <p>我爱<mark>备忘清单</mark></p>
     

    我爱备忘清单

    -

    HTML 表格

    -

    Table 示例

    +

    HTML 表格

    +

    Table 示例

    <table>
       <thead>
    @@ -499,7 +499,7 @@
       </tbody>
     </table>
     
    -

    HTML表格标签

    +

    HTML表格标签

    @@ -551,7 +551,7 @@
    标签说明
    <table>定义表格
    <th>定义表格中的标题单元格
    <tr>定义表中的行
    <td>定义表格中的单元格
    <caption>定义表格标题
    <colgroup>定义一组列
    <col>定义表中的列
    <thead>对标题内容进行分组
    <tbody>将正文内容分组
    <tfoot>对页脚内容进行分组
    -

    <td> 属性

    +

    <td> 属性

    @@ -575,7 +575,7 @@
    属性说明
    colspan单元格应跨越的列数
    headers单元格与一个或多个标题单元格相关
    rowspan单元格应跨越的行数

    请参阅:td#属性

    -

    <th> 属性

    +

    <th> 属性

    @@ -607,8 +607,8 @@
    属性说明
    colspan单元格应跨越的列数
    headers单元格与一个或多个标题单元格相关
    rowspan单元格应跨越的行数
    abbr单元格内容的描述
    scope表头元素(在<th>中定义)关联的单元格

    请参阅:th#属性

    -

    HTML 列表

    -

    无序列表

    +

    HTML 列表

    +

    无序列表

    <ul>
       <li>I'm an item</li>
       <li>I'm another item</li>
    @@ -616,7 +616,7 @@
     </ul>
     

    请参阅:无序列表元素

    -

    有序列表

    +

    有序列表

    <ol>
       <li>I'm the first item</li>
       <li>I'm the second item</li>
    @@ -624,7 +624,7 @@
     </ol>
     

    请参阅:有序列表元素

    -

    定义列表

    +

    定义列表

    <dl>
       <dt>A Term</dt>
       <dd>Definition of a term</dd>
    @@ -633,8 +633,8 @@
     </dl>
     

    请参阅:描述列表元素

    -

    HTML 表单

    -

    Form 标签

    +

    HTML 表单

    +

    Form 标签

    <form method="POST" action="api/login">
       <label for="mail">邮箱: </label>
    @@ -649,7 +649,7 @@
       <label for="ck">记住我</label>
     </form>
     
    -

    ↓ 预览

    +

    ↓ 预览

    @@ -663,7 +663,7 @@

    HTML <form> 元素用于收集信息并将其发送到外部源。

    -

    Form 属性

    +

    Form 属性

    @@ -698,7 +698,7 @@
    属性说明
    name脚本形式的名称
    action表单脚本的URL
    methodHTTP方法,POST/GET (默认)
    enctype介质类型,请参见enctype
    onsubmit提交表单时运行
    onreset在窗体重置时运行
    -

    Label 标签

    +

    Label 标签

    <!-- 嵌套标签 -->
     <label>Click me 
     <input type="text" id="user" name="name"/>
    @@ -710,32 +710,32 @@
     <input id="user" type="text" name="name"/>
     

    for在标签中引用输入的id属性

    -

    Input 标签

    +

    Input 标签

    <label for="Name">Name:</label>
     <input type="text" name="Name" id="">
     
    -

    ↓ 预览

    +

    ↓ 预览

    请参阅:HTML输入标记

    -

    Textarea 标签

    +

    Textarea 标签

    <textarea rows="2" cols="30" name="address" id="address"></textarea>
     
    -

    ↓ 预览

    +

    ↓ 预览

    Textarea 是一个多行文本输入控件

    -

    Radio Buttons

    +

    Radio Buttons

    <input type="radio" name="gender" id="m">
     <label for="m">Male</label>
     <input type="radio" name="gender" id="f">
     <label for="f">Female</label>
     
    -

    ↓ 预览

    +

    ↓ 预览

    @@ -743,13 +743,13 @@

    单选按钮用于让用户只选择一个

    -

    Checkboxes

    +

    Checkboxes

    <input type="checkbox" name="s" id="soc">
     <label for="soc">Soccer</label>
     <input type="checkbox" name="s" id="bas">
     <label for="bas">Baseball</label>
     
    -

    ↓ 预览

    +

    ↓ 预览

    @@ -757,7 +757,7 @@

    复选框允许用户选择一个或多个

    -

    Select 标签

    +

    Select 标签

    <label for="city">City:</label>
     <select name="city" id="city">
       <option value="1">Sydney</option>
    @@ -765,7 +765,7 @@
       <option value="3">Cromwell</option>
     </select>
     
    -

    ↓ 预览

    +

    ↓ 预览

    选择框是选项的下拉列表

    -

    Fieldset 标签

    +

    Fieldset 标签

    <fieldset>
       <legend>Your favorite monster</legend>
       <input type="radio" id="kra" name="m">
    @@ -784,7 +784,7 @@
       <label for="sas">Sasquatch</label>
     </fieldset>
     
    -

    ↓ 预览

    +

    ↓ 预览

    Your favorite monster @@ -794,7 +794,7 @@
    -

    数据列表标签(HTML5)

    +

    数据列表标签(HTML5)

    <label for="b">Choose a browser: </label>
     <input list="list" id="b" name="browser"/>
     <datalist id="list">
    @@ -806,7 +806,7 @@
       <option value="Microsoft Edge">
     </datalist>
     
    -

    ↓ 预览

    +

    ↓ 预览

    @@ -819,7 +819,7 @@
    -

    提交和重置按钮

    +

    提交和重置按钮

    <form action="register.php" method="post">
       <label for="foo">Name:</label>
       <input type="text" name="name" id="foo">
    @@ -827,7 +827,7 @@
       <input type="reset" value="重置">
     </form>
     
    -

    ↓ 预览

    +

    ↓ 预览

    @@ -835,9 +835,9 @@

    将数据提交到服务器 重置为默认值

    -

    HTML input 标签

    +

    HTML input 标签

    -

    Input 属性

    +

    Input 属性

    输入标记是一个空元素,用于标识要从用户处获取的特定类型的字段信息。

    <input type="text" name="?" value="?" minlength="6"	 required />
    @@ -946,7 +946,7 @@
     
     
    :-:-
    type="…"正在输入的数据类型
    value="…"默认值
    name="…"用于在 HTTP 请求中描述此数据
    id="…"其他 HTML 元素的唯一标识符
    readonly停止用户修改
    disabled停止任何交互
    checked单选或复选框是否选中
    required是强制性的,参阅必填
    placeholder="…"添加临时,请参阅::placeholder
    autocomplete="off"禁用自动完成
    autocapitalize="none"禁用自动大写
    inputmode="…"显示特定键盘,请参阅inputmode
    list="…"关联的datalist的id
    maxlength="…"最大字符数
    minlength="…"最小字符数
    min="…"范围和编号上的最小数值
    max="…"范围和编号上的最大数值
    step="…"数字如何在范围和数字中递增
    pattern="…"指定一个正则表达式,请参阅pattern
    autofocus集中精力
    spellcheck执行拼写检查
    multiple是否允许多个
    accept=""file 中需要文件类型上载控件

    请参阅:<input>元素 的属性

    -

    Input 类型

    +

    Input 类型

    @@ -997,7 +997,7 @@
    type="checkbox"
    type="radio"
    type="file"
    type="hidden"
    type="text"
    type="password"
    type="image"
    type="reset"
    type="button"
    type="submit"
    -

    HTML5 中的新输入类型

    +

    HTML5 中的新输入类型

    @@ -1056,7 +1056,7 @@
    type="color"
    type="date"
    type="time"
    type="month"
    type="datetime-local"
    type="week"
    type="email"
    type="tel"
    type="url"
    type="number"
    type="search"
    type="range"
    -

    Input CSS 选择器

    +

    Input CSS 选择器

    @@ -1071,9 +1071,9 @@
    input:focus当键盘聚焦时
    -

    HTML meta 标签

    +

    HTML meta 标签

    -

    Meta 标签

    +

    Meta 标签

    meta 标记描述 HTML 文档中的元数据。它解释了关于 HTML 的其他材料。

    <meta charset="utf-8">
    @@ -1109,7 +1109,7 @@
     <meta name="viewport" content="width=device-width">
     <meta name="viewport" content="width=1024">
     
    -

    Open Graph

    +

    Open Graph

    <meta property="og:type" content="website">
     <meta property="og:locale" content="en_CA">
     <meta property="og:title" content="HTML cheatsheet">
    @@ -1119,7 +1119,7 @@
     <meta property="og:description" content="Description of this page">
     

    Facebook、Instagram、Pinterest、LinkedIn 等使用。

    -

    Twitter 卡片

    +

    Twitter 卡片

    <meta name="twitter:card" content="summary">
     <meta name="twitter:site" content="@QuickRef_ME">
     <meta name="twitter:title" content="HTML cheatsheet">
    @@ -1128,14 +1128,14 @@
     <meta name="twitter:image" content="https://xxx.com/image.jpg">
     

    请参阅:Twitter 卡片文档

    -

    Geotagging

    +

    Geotagging

    <meta name="ICBM" content="45.416667,-75.7">
     <meta name="geo.position" content="45.416667;-75.7">
     <meta name="geo.region" content="ca-on">
     <meta name="geo.placename" content="Ottawa">
     

    请参阅:Geotagging

    -

    另见

    +

    另见

    • HTML 4.01 Specification (w3.org)
    • HTML Tutorial (jaywcjlove.github.io)
    • @@ -1154,8 +1154,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -1166,7 +1164,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/htop.html b/docs/htop.html index 83268e12..7446765d 100644 --- a/docs/htop.html +++ b/docs/htop.html @@ -34,22 +34,22 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    htop 备忘清单

    htop 是一个交互式流程查看器,此 htop 备忘清单包含 htop 命令

    入门

    -

    入门

    +

    htop 用法

    htop 是一个互动的进程查看器,动态观察系统进程状况

    $ htop [-dChustv]
     
    -

    安装

    +

    安装

    $ apt install htop        # Debian
     $ dnf install htop        # Fedora
     $ emerge sys-process/htop # Gentoo
    @@ -57,7 +57,7 @@
     $ Compile htop            # GoboLinux
     

    htop 的软件包在大多数发行版中都可用下载

    -

    选项示例

    +

    选项示例

    长选项的强制参数对于短选项也是强制的

    @@ -102,7 +102,7 @@
    :-:-
    -d --delay=DELAY更新之间的延迟,以十分之一秒为单位
    -C --no-color --no-colour以单色模式启动 htop
    -h --help显示帮助消息并退出
    -p --pid=PID,PID...仅显示给定的PID
    -s --sort-key COLUMN按此列排序(对列列表使用--sort-key帮助)
    -u --user=USERNAME仅显示给定用户的进程
    -v --version输出版本信息并退出
    -t --tree在树状视图中显示流程
    -

    状态

    +

    状态

    @@ -134,7 +134,7 @@
    :-:-
    R运行中
    S休眠
    T追踪/停止
    Z僵尸
    D磁盘睡眠
    -

    交互式命令

    +

    交互式命令

    @@ -231,7 +231,7 @@
    :-:-
    F1, h, ?转到帮助屏幕
    F10, q退出
    Space标记或取消标记进程
    U取消标记所有进程(删除所有使用 Space 键添加的标记)
    s跟踪进程系统调用:如果安装了 strace(1),按下此键会将其附加到当前选定的进程,呈现进程发出的系统调用的实时更新
    l显示进程打开的文件:如果安装了 lsof(1),按下该键将显示进程打开的文件描述符列表
    F2, S转到设置屏幕,您可以在其中配置屏幕顶部显示的仪表,设置各种显示选项,在配色方案中进行选择,并选择显示的列,以何种顺序显示
    F3, /逐步搜索所有显示进程的命令行。当前选定(突出显示)的命令将在您键入时更新。在搜索模式下,按 F3 将循环匹配出现的事件
    F4, \增量进程过滤:输入部分进程命令行,仅显示名称匹配的进程。要取消过滤,请再次输入过滤选项并按 Esc
    F5, t树视图:按父级组织进程,并将它们之间的关系布局为树。切换键将在树和您之前选择的排序视图之间切换。选择排序视图将退出树视图
    F6在排序视图上,选择一个字段进行排序,也可以通过 < 和 > 访问。当前排序字段由标题中的突出显示。在树视图中,展开或折叠当前子树。树节点中的“+”指示符表示它已折叠
    F7, ]增加所选进程的优先级(从“nice”值中减去)。这只能由超级用户完成
    F8, [降低选定进程的优先级(添加到“nice”值)
    F9, k“杀死”进程:向一个或一组进程发送一个在菜单中选择的信号。如果进程被标记,则将信号发送到所有标记的进程。如果没有标记,则发送到当前选定的进程
    +, -在树视图模式下,展开或折叠子树。
    a(在多 CPU 机器上)设置 CPU 亲和性:标记允许进程使用的 CPU
    u仅显示指定用户拥有的进程
    F“跟随”进程:如果排序顺序导致当前选定的进程在列表中移动,则使选择栏跟随它。这对于监控进程很有用:这样,您可以使进程始终在屏幕上可见。使用移动键时,“跟随”失效。
    p在适用的情况下显示运行程序的完整路径(这是一个切换键)
    Ctrl-L刷新:重绘屏幕并重新计算数值
    NumbersPID搜索:输入进程ID,选择突出显示将移至它
    -

    排序/线程

    +

    排序/线程

    @@ -267,7 +267,7 @@
    :-:-
    M内存使用情况排序 (最高兼容性键)
    PCPU使用情况排序 (最高兼容性键)
    T时间排序 (最高兼容性键)
    I反转排序顺序
    K隐藏内核线程
    H隐藏用户线程
    -

    滚动

    +

    滚动

    @@ -328,8 +328,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -340,7 +338,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/http-status-code.html b/docs/http-status-code.html index 76cb8860..43f762e7 100644 --- a/docs/http-status-code.html +++ b/docs/http-status-code.html @@ -34,14 +34,14 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    HTTP 状态码备忘清单

    HTTP 状态码备忘清单。 每个 HTTP 状态代码的快速参考。

    HTTP 状态码

    -

    HTTP 状态码

    +

    2xx. 成功的

    +

    4xx. 客户端错误

    +

    1xx. 信息

    +

    3xx. 重定向

    +

    5xx. 服务器错误

    +

    RESTful API

    +

    RESTful API

    @@ -193,7 +193,7 @@
    :--
    200返回成功,GET,DELETE 请求成功
    204无内容,POST 请求成功
    301永久重定向
    302/307临时重定向
    304未修改,自上次请求以来
    331用户名正确,需要密码
    332需要登录帐户
    400错误请求,缺少 API 请求的必需属性
    401未授权,无效凭据进行身份验证将
    403禁地,该请求不被允许
    404未找到,无法访问资
    405方法不允许,不支持该请求
    409冲突,冲突资源已存在
    412该请求被拒绝
    422无法处理,无法处理该实体
    429请求过多,用户超出了应用速率限制
    500服务器错误,在处理请求时,服务器出现问题
    530未登录
    -

    5xx 永久性否定

    +

    5xx 永久性否定

    @@ -250,7 +250,7 @@
    :--
    500语法错误,命令无法识别。这可能包括诸如命令行太长之类的错误
    501在参数中有语法错误
    502未执行命令
    503错误的命令序列
    504未执行该参数的命令
    530未登录
    532存储文件需要帐户
    550未执行请求的操作。文件不可用(例如,未找到文件,没有访问权限)
    551请求的操作异常终止:未知的页面类型
    552请求的文件操作异常终止:超出存储分配(对于当前目录或数据集)
    553未执行请求的操作。不允许的文件名

    永久性否定的完成答复,该命令不成功,错误是永久性的。如果客户端重试命令,将再次出现同样的错误。

    -

    另见

    +

    另见

    • 常见 HTTP/FTP/WebSocket 错误代码大全 (github.io)
    • HTTP 状态码列表 (wikipedia.org)
    • @@ -275,8 +275,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -287,7 +285,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/ini.html b/docs/ini.html index b5b19923..1f700227 100644 --- a/docs/ini.html +++ b/docs/ini.html @@ -34,14 +34,14 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    INI 备忘清单

    这是理解和编写 INI 格式配置文件的快速参考备忘单,此清单包含配置的内容,结构和语法等内容。

    入门

    -

    入门

    +

    介绍

    INI 是一种固定标准格式的配置文件,INI配置方法来自 MS-DOS 操作系统

    ; 这里是注释
     [owner]
    @@ -55,7 +55,7 @@
     file="acme payroll.dat"
     

    现在已成为许多配置的非正式标准,其它操作系统可能使用 .conf.cfg 作为后缀

    -

    稳定的特性

    +

    稳定的特性

    • 基本元素是键或属性
    • 每个键由名称构成,等号 (=) 分隔
    • @@ -70,7 +70,7 @@ "name": "value" }
      -

    注释

    +

    注释

    注释 (;)

    ; 这里是注释文本,将被忽略
     
    @@ -82,7 +82,7 @@ foo = bar # 这是另一个内联注释

    在某些情况下注释必须单独出现在行上

    -

    部分(Sections)

    +

    部分(Sections)

    • 名称单独出现在一行中
    • 名称在方括号 []
    • @@ -103,7 +103,7 @@ } }
      -

    嵌套(部分解析器支持)

    +

    嵌套(部分解析器支持)

    [section]
     domain = jaywcjlove.github.io
     
    @@ -126,7 +126,7 @@
     [.subsection]
     foo = bar
     
    -

    转义字符

    +

    转义字符

    @@ -193,7 +193,7 @@
    序列意思
    \\\ (单个反斜杠,转义转义字符)
    \'撇号
    \"双引号
    \0空字符
    \a铃声/警报/声音
    \b退格键,某些应用程序的贝尔字符
    \t制表符
    \r回车
    \n换行
    \;分号
    \#数字符号
    \=等号
    \:冒号
    \x????十六进制代码点的 Unicode 字符对应于 ????
    -

    数组

    +

    数组

    [section]
     domain = jaywcjlove.github.io
     array[]=first value
    @@ -209,7 +209,7 @@
       }
     }
     
    -

    解释器

    +

    解释器

    -

    另见

    +

    另见

    • INI 文件配置 (wikipedia.org)
    • YAML 格式配置文件备忘清单 (jaywcjlove.github.io)
    • @@ -238,8 +238,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -250,7 +248,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/iso-639-1.html b/docs/iso-639-1.html index 2f7bf9d5..244a0283 100644 --- a/docs/iso-639-1.html +++ b/docs/iso-639-1.html @@ -34,14 +34,14 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    ISO 639-1 Language Code 备忘清单

    这是一个符合 ISO 639-1 标准的 ISO 语言代码列表,它为多语言网站提供参考。

    入门

    -

    入门

    +
    • ISO 639-1 是用于对语言进行分类的标准化命名法
    • @@ -52,8 +52,8 @@
    • i18n 语言代码
    -

    ISO 639-1 代码列表

    -

    完整代码

    +

    ISO 639-1 代码列表

    +

    完整代码

    @@ -1184,7 +1184,7 @@
    639-1 代码ISO 语言(中文)名称ISO 语言名称本地名称 (地名)
    aa阿法尔语AfarAfaraf
    ab阿布哈兹语Abkhazаҧсуа бызшәа
    ae阿维斯陀语Avestanavesta
    af南非語AfrikaansAfrikaans
    ak阿坎语AkanAkan
    am阿姆哈拉语Amharicአማርኛ
    an阿拉贡语Aragonesearagonés
    ar阿拉伯语Arabicاللغة العربية
    as阿萨姆语Assameseঅসমীয়া
    av阿瓦尔语Avaricавар мацӀ
    ay艾马拉语Aymaraaymar aru
    az阿塞拜疆语Azerbaijaniazərbaycan dili
    ba巴什基尔语Bashkirбашҡорт теле
    be白俄罗斯语Belarusianбеларуская мова
    bg保加利亚语Bulgarianбългарски език
    bh比哈尔语Bihariभोजपुरी
    bi比斯拉马语BislamaBislama
    bm班巴拉语Bambarabamanankan
    bn孟加拉语Bengaliবাংলা
    bo藏语Tibetanབོད་ཡིག
    br布列塔尼语Bretonbrezhoneg
    bs波斯尼亚语Bosnianbosanski jezik
    ca加泰隆语CatalanCatalà
    ce车臣语Chechenнохчийн мотт
    ch查莫罗语ChamorroChamoru
    co科西嘉语Corsicancorsu
    cr克里语Creeᓀᐦᐃᔭᐍᐏᐣ
    cs捷克语Czechčeština
    cu古教会斯拉夫语Old Church Slavonicѩзыкъ словѣньскъ
    cv楚瓦什语Chuvashчӑваш чӗлхи
    cy威尔士语WelshCymraeg
    da丹麦语Danishdansk
    de德语GermanDeutsch
    dv迪维西语DivehiDhivehi
    dz不丹语Dzongkhaརྫོང་ཁ
    ee埃维语EweEʋegbe
    el现代希腊语GreekΕλληνικά
    en英语EnglishEnglish
    eo世界语EsperantoEsperanto
    es西班牙语SpanishEspañol
    et爱沙尼亚语Estonianeesti
    eu巴斯克语Basqueeuskara
    fa波斯语Persianفارسی
    ff富拉语FulaFulfulde
    fi芬兰语Finnishsuomi
    fj斐济语FijianVakaviti
    fo法罗语Faroeseføroyskt
    fr法语FrenchFrançais
    fy弗里西亚语Western FrisianFrysk
    ga爱尔兰语IrishGaeilge
    gd苏格兰盖尔语Scottish GaelicGàidhlig
    gl加利西亚语Galiciangalego
    gn瓜拉尼语Guaraniavañe'ẽ
    gu古吉拉特语Gujaratiગુજરાતી
    gv马恩岛语ManxGaelg
    ha豪萨语Hausaهَوُسَ
    he希伯来语Hebrewעברית
    hi印地语Hindiहिन्दी
    ho希里莫图语Hiri MotuHiri Motu
    hr克罗地亚语CroatianHrvatski
    ht海地克里奥尔语HaitianKreyòl ayisyen
    hu匈牙利语Hungarianmagyar
    hy亚美尼亚语ArmenianՀայերեն
    hz赫雷罗语HereroOtjiherero
    ia因特语InterlinguaInterlingua
    id印尼语IndonesianBahasa Indonesia
    ie西方国际语InterlingueInterlingue
    ig伊博语IgboAsụsụ Igbo
    ii四川彝语(诺苏语)Nuosuꆈꌠ꒿ Nuosuhxop
    ik伊努皮克语InupiaqIñupiaq
    io伊多语IdoIdo
    is冰岛语IcelandicÍslenska
    it意大利语ItalianItaliano
    iu因纽特语Inuktitutᐃᓄᒃᑎᑐᑦ
    ja日语Japanese日本語
    jv爪哇语Javanesebasa Jawa
    ka格鲁吉亚语Georgianქართული
    kg刚果语KongoKikongo
    ki基库尤语KikuyuGĩkũyũ
    kj宽亚玛语KwanyamaKuanyama
    kk哈萨克语Kazakhқазақ тілі
    kl格陵兰语Kalaallisutkalaallisut
    km高棉语Khmerខេមរភាសា
    kn卡纳达语Kannadaಕನ್ನಡ
    ko朝鲜语、韩语Korean한국어
    kr卡努里语KanuriKanuri
    ks克什米尔语Kashmiriकश्मीरी
    ku库尔德语KurdishKurdî
    kv科米语Komiкоми кыв
    kw康沃尔语CornishKernewek
    ky吉尔吉斯语KyrgyzКыргызча
    la拉丁语Latinlatine
    lb卢森堡语LuxembourgishLëtzebuergesch
    lg卢干达语GandaLuganda
    li林堡语LimburgishLimburgs
    ln林加拉语LingalaLingála
    lo老挝语Laoພາສາ
    lt立陶宛语Lithuanianlietuvių kalba
    lu卢巴语Luba-KatangaTshiluba
    lv拉脱维亚语Latvianlatviešu valoda
    mg马达加斯加语Malagasyfiteny malagasy
    mh马绍尔语MarshalleseKajin M̧ajeļ
    mi毛利语Māorite reo Māori
    mk马其顿语Macedonianмакедонски јазик
    ml马拉雅拉姆语Malayalamമലയാളം
    mn蒙古语MongolianМонгол хэл
    mo摩尔达维亚语MoldovanЛимба молдовеняскэ
    mr马拉地语Marathiमराठी
    ms马来语MalayBahasa Malaysia
    mt马耳他语MalteseMalti
    my缅甸语Burmeseဗမာစာ
    na瑙鲁语NauruEkakairũ Naoero
    nb书面挪威语Norwegian BokmålNorsk bokmål
    nd北恩德贝莱语Northern NdebeleisiNdebele
    ne尼泊尔语Nepaliनेपाली
    ng恩敦加语NdongaOwambo
    nl荷兰语DutchNederlands
    nn新挪威语Norwegian NynorskNorsk nynorsk
    no挪威语NorwegianNorsk
    nr南恩德贝莱语Southern NdebeleisiNdebele
    nv纳瓦霍语NavajoDiné bizaad
    ny尼扬贾语ChichewachiCheŵa
    oc奥克语Occitanoccitan
    oj奥杰布瓦语Ojibweᐊᓂᔑᓈᐯᒧᐎᓐ
    om奥罗莫语OromoAfaan Oromoo
    or奥里亚语Oriyaଓଡ଼ିଆ
    os奥塞梯语Ossetianирон æвзаг
    pa旁遮普语Panjabiਪੰਜਾਬੀ
    pi巴利语Pāliपाऴि
    pl波兰语PolishPolski
    ps普什图语Pashtoپښتو
    pt葡萄牙语PortuguesePortuguês
    qu克丘亚语QuechuaRuna Simi
    rm罗曼什语Romanshrumantsch grischun
    rn基隆迪语KirundiIkirundi
    ro罗马尼亚语RomanianRomână
    ru俄语RussianРусский
    rw卢旺达语KinyarwandaIkinyarwanda
    sa梵语Sanskritसंस्कृतम्
    sc撒丁语Sardiniansardu
    sd信德语Sindhiसिन्धी
    se北萨米语Northern SamiDavvisámegiella
    sg桑戈语Sangoyângâ tî sängö
    sh塞尔维亚-克罗地亚语Serbo-CroatianСрпскохрватски језик
    si僧伽罗语Sinhalaසිංහල
    sk斯洛伐克语Slovakslovenčina
    sl斯洛文尼亚语Slovenianslovenščina
    sm萨摩亚语--
    sn修纳语ShonachiShona
    so索马里语SomaliSoomaaliga
    sq阿尔巴尼亚语AlbanianShqip
    sr塞尔维亚语Serbianсрпски језик
    ss斯威士语SwatiSiSwati
    st塞索托语Southern SothoSesotho
    su巽他语SundaneseBasa Sunda
    sv瑞典语SwedishSvenska
    sw斯瓦希里语SwahiliKiswahili
    ta泰米尔语Tamilதமிழ்
    te泰卢固语Teluguతెలుగు
    tg塔吉克语Tajikтоҷикӣ
    th泰语Thaiไทย
    ti提格雷尼亚语Tigrinyaትግርኛ
    tk土库曼语TurkmenTürkmen
    tl他加禄语TagalogWikang Tagalog
    tn茨瓦纳语TswanaSetswana
    to汤加语Tongafaka Tonga
    tr土耳其语TurkishTürkçe
    ts宗加语TsongaXitsonga
    tt塔塔尔语Tatarтатар теле
    tw特威语TwiTwi
    ty塔希提语TahitianReo Tahiti
    ug维吾尔语Uyghurئۇيغۇرچە‎
    uk乌克兰语UkrainianУкраїнська
    ur乌尔都语Urduاردو
    uz乌兹别克语UzbekЎзбек
    ve文达语VendaTshivenḓa
    vi越南语VietnameseTiếng Việt
    vo沃拉普克语VolapükVolapük
    wa瓦隆语Walloonwalon
    wo沃洛夫语WolofWollof
    xh科萨语XhosaisiXhosa
    yi依地语Yiddishייִדיש
    yo约鲁巴语YorubaYorùbá
    za壮语ZhuangSaɯ cueŋƅ
    zh汉语(中文)Chinese中文
    zu祖鲁语ZuluisiZulu
    -

    SO 639-1 新增了以下语言

    +

    SO 639-1 新增了以下语言

    @@ -1250,7 +1250,7 @@
    ISO 639-1ISO 639-2名称更改日期更改类型曾用代码
    ioido伊多语2002年1月15日新增art
    wawln瓦隆语2002年1月29日新增roa
    lilim林堡语2002年8月2日新增gem
    iiiii四川省彝语(诺苏语)2002年10月14日新增-
    anarg阿拉贡语2002年12月23日新增roa
    hthat海地克里奥尔语2003年2月26日新增cpf

    RFC 3066 出版后,ISO 639-1 新增了以上语言

    -

    另见

    +

    另见

    • 国际化与本地化 (wikipedia.org)
    • @@ -1269,8 +1269,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -1281,7 +1279,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/javascript.html b/docs/javascript.html index 89426eee..ecb1f3e0 100644 --- a/docs/javascript.html +++ b/docs/javascript.html @@ -34,22 +34,22 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    JavaScript 备忘清单

    包含最重要概念、函数、方法等的 JavaScript 备忘单。 初学者的完整快速参考。

    入门

    -

    介绍

    +

    入门

    +

    介绍

    JavaScript 是一种轻量级的解释型编程语言。

    -

    打印调试

    +

    打印调试

    // => Hello world!
     console.log('Hello world!');
     // => Hello QuickReference
    @@ -57,31 +57,31 @@
     // 将错误消息打印到 stderr
     console.error(new Error('Oops!'));
     
    -

    断点调试

    +

    断点调试

    function potentiallyBuggyCode() {
       debugger;
       // 做可能有问题的东西来检查,逐步通过等。
     }
     

    debugger 语句调用任何可用的调试功能。

    -

    数字

    +

    数字

    let amount = 6;
     let price = 4.99;
     let home = 1e2;
     let m = 0644;   // 八进制数字 420
     
    -

    let 关键字

    +

    let 关键字

    let count; 
     console.log(count); // => undefined
     count = 10;
     console.log(count); // => 10
     
    -

    const 关键字

    +

    const 关键字

    const numberOfColumns = 4;
     // TypeError: Assignment to constant...
     numberOfColumns = 8;
     
    -

    变量

    +

    变量

    let x = null;
     let name = "Tammy";
     const found = false;
    @@ -90,20 +90,20 @@
     var a;
     console.log(a); // => undefined
     
    -

    字符串

    +

    字符串

    let single = 'Wheres my bandit hat?';
     let double = "Wheres my bandit hat?";
     // => 21
     console.log(single.length);
     
    -

    算术运算符

    +

    算术运算符

    5 + 5 = 10     // 加法 Addition
     10 - 5 = 5     // 加法 Subtraction
     5 * 10 = 50    // 乘法 Multiplication
     10 / 5 = 2     // 除法 Division
     10 % 5 = 0     // 取模 Modulo
     
    -

    注释

    +

    注释

    // 此行将表示注释
     /* 
     多行配置
    @@ -111,7 +111,7 @@
     以下配置。
     */
     
    -

    赋值运算符

    +

    赋值运算符

    let number = 100;
     // 两个语句都会加 10
     number = number + 10;
    @@ -119,14 +119,14 @@
     console.log(number); 
     // => 120
     
    -

    字符串插值

    +

    字符串插值

    let age = 7;
     // 字符串拼接
     'Tommy is ' + age + ' years old.';
     // 字符串插值
     `Tommy is ${age} years old.`;
     
    -

    字符串

    +

    字符串

    var abc = "abcdefghijklmnopqrstuvwxyz";
     var esc = 'I don\'t \n know';    // \n 换行
    @@ -149,7 +149,7 @@
     // 数字转为十六进制 (16)、八进制 (8) 或二进制 (2)
     128.toString(16);             
     
    -

    数字

    +

    数字

    var pi = 3.141;
     pi.toFixed(0);    // 返回 3             
    @@ -172,7 +172,7 @@
     // 无穷
     Number.POSITIVE_INFINITY    
     
    -

    Math

    +

    Math

    const pi = Math.PI; // 3.141592653589793
     Math.round(4.4); // = 4 - 数字四舍五入
     Math.round(4.5); // = 5
    @@ -199,7 +199,7 @@
     // 随机整数,从 1
     Math.floor(Math.random() * 5) + 1;  
     
    -

    全局函数

    +

    全局函数

    // 像脚本代码一样执行字符串
     eval();                     
    @@ -226,21 +226,21 @@
     // 解析一个字符串并返回一个整数
     parseInt();                 
     
    -

    JavaScript 条件

    -

    操作符

    +

    JavaScript 条件

    +

    操作符

    true || false;       // true
     10 > 5 || 10 > 20;   // true
     false || false;      // false
     10 > 100 || 10 > 20; // false
     
    -

    逻辑运算符 &&

    +

    逻辑运算符 &&

    true && true;        // true
     1 > 2 && 2 > 1;      // false
     true && false;       // false
     4 === 4 && 3 > 1;    // true
     
    -

    比较运算符

    +

    比较运算符

    1 > 3                 // false
     3 > 1                 // true
     250 >= 250            // true
    @@ -248,32 +248,32 @@
     1 === 2               // false
     1 === '1'             // false
     
    -

    逻辑运算符 !

    +

    逻辑运算符 !

    let lateToWork = true;
     let oppositeValue = !lateToWork;
     // => false
     console.log(oppositeValue); 
     
    -

    空值合并运算符 ??

    +

    空值合并运算符 ??

    null ?? 'I win';         //  'I win'
     undefined ?? 'Me too';   //  'Me too'
     false ?? 'I lose'        //  false
     0 ?? 'I lose again'      //  0
     '' ?? 'Damn it'          //  ''
     
    -

    if Statement (if 语句)

    +

    if Statement (if 语句)

    const isMailSent = true;
     if (isMailSent) {
       console.log('Mail sent to recipient');
     }
     
    -

    Ternary Operator (三元运算符)

    +

    Ternary Operator (三元运算符)

    var age = 1;
     
     // => true
     var status = (age >= 18) ? true : false;
     
    -

    else if

    +

    else if

    const size = 10;
     if (size > 20) {
       console.log('Medium');
    @@ -284,7 +284,7 @@
     }
     // Print: Small
     
    -

    == vs ===

    +

    == vs ===

    0 == false     // true
     0 === false    // false, 不同类型
     1 == "1"       // true,  自动类型转换
    @@ -295,7 +295,7 @@
     '0' === false      // false
     

    == 只检查值,=== 检查值和类型。

    -

    switch 语句

    +

    switch 语句

    const food = 'salad';
     
     switch (food) {
    @@ -307,7 +307,7 @@
         console.log('请您用餐');
     }
     
    -

    switch 多 case - 单一操作

    +

    switch 多 case - 单一操作

    const food = 'salad';
     
     switch (food) {
    @@ -319,8 +319,8 @@
         console.log('请您用餐');
     }
     
    -

    JavaScript Functions 函数

    -

    函数

    +

    JavaScript Functions 函数

    +

    函数

    // 定义函数:
     function sum(num1, num2) {
       return num1 + num2;
    @@ -328,7 +328,7 @@
     // 调用函数:
     sum(3, 6); // 9
     
    -

    匿名函数

    +

    匿名函数

    // 命名函数
     function rocketToMars() {
       return 'BOOM!';
    @@ -338,33 +338,33 @@
       return 'BOOM!';
     }
     
    -

    箭头函数 (ES6)

    +

    箭头函数 (ES6)

    -

    有两个参数

    +

    有两个参数

    const sum = (param1, param2) => { 
       return param1 + param2; 
     }; 
     console.log(sum(2,5)); // => 7 
     
    -

    没有参数

    +

    没有参数

    const printHello = () => { 
       console.log('hello'); 
     }; 
     printHello(); // => hello
     
    -

    只有一个参数

    +

    只有一个参数

    const checkWeight = weight => { 
       console.log(`Weight : ${weight}`); 
     }; 
     checkWeight(25); // => Weight : 25 
     
    -

    简洁箭头函数

    +

    简洁箭头函数

    const multiply = (a, b) => a * b; 
     // => 60 
     console.log(multiply(2, 30)); 
     

    从 ES2015 开始提供箭头函数

    -

    返回关键字

    +

    返回关键字

    // 有 return
     function sum(num1, num2) {
       return num1 + num2;
    @@ -374,7 +374,7 @@
       num1 + num2;
     }
     
    -

    调用函数

    +

    调用函数

    // 定义函数
     function sum(num1, num2) {
       return num1 + num2;
    @@ -382,24 +382,24 @@
     // 调用函数
     sum(2, 4); // 6
     
    -

    函数表达式

    +

    函数表达式

    const dog = function() {
       return 'Woof!';
     }
     
    -

    函数参数

    +

    函数参数

    // 参数是 name
     function sayHello(name) {
       return `Hello, ${name}!`;
     }
     
    -

    函数声明

    +

    函数声明

    function add(num1, num2) {
       return num1 + num2;
     }
     
    -

    JavaScript 范围

    -

    范围

    +

    JavaScript 范围

    +

    范围

    function myFunction() {
       var pizzaName = "Margarita";
    @@ -424,7 +424,7 @@
     const x = 2;       // Global scope
     

    ES6 引入了两个重要的新 JavaScript 关键字:let 和 const。这两个关键字在 JavaScript 中提供了块作用域。

    -

    块作用域变量

    +

    块作用域变量

    const isLoggedIn = true;
     if (isLoggedIn == true) {
       const statusMessage = 'Logged in.';
    @@ -433,7 +433,7 @@
     // 未捕获的引用错误...
     console.log(statusMessage);
     
    -

    全局变量

    +

    全局变量

    // 全局声明的变量
     const color = 'blue';
     function printColor() {
    @@ -442,7 +442,7 @@
     
     printColor(); // => blue
     
    -

    let vs var

    +

    let vs var

    for (let i = 0; i < 3; i++) {
       // 这是“let”的最大范围
       // i 可以访问 ✔️
    @@ -456,7 +456,7 @@
     // i 可以访问 ✔️
     

    var 的范围是最近的函数块,而 let 的范围是最近的封闭块。

    -

    带闭包的循环

    +

    带闭包的循环

    // 打印三次,不是我们的意思。
     for (var i = 0; i < 3; i++) {
       setTimeout(_ => console.log(i), 10);
    @@ -469,8 +469,8 @@
     }
     

    变量使用 let 有自己的副本,变量有使用 var 的共享副本。

    -

    JavaScript Arrays

    -

    方法

    +

    JavaScript Arrays

    +

    方法

    @@ -630,22 +630,22 @@
    :-:-
    Array.from()类似数组对象创建一个新的 #
    Array.isArray()值是否是一个 Array #
    Array.of()创建一个新数组示例 #
    .at()返回值索引对应的元素 #
    .concat()合并两个或多个数组 #
    .copyWithin()浅复制替换某个位置 #
    .entries()新的 Array Iterator 对象 #
    .every()是否能通过回调函数的测试 #
    .fill()固定值填充一个数组中 #
    .filter()返回过滤后的数组 #
    .find()第一个元素的值 #
    .findIndex()第一个元素的索引 #
    .findLast()最后一个元素的值 #
    .findLastIndex()最后一个元素的索引 #
    .flat()扁平化嵌套数组 #
    .flatMap()与 flat 相同 #
    .forEach()升序循环执行 #
    .includes()是否包含一个指定的值 #
    .indexOf()找到给定元素的第一个索引 #
    .join()数组链接成一个字符串 #
    .keys()每个索引键 #
    .lastIndexOf()给定元素的最后一个索引 #
    .map()循环返回一个新数组 #
    .pop()删除最后一个元素 #
    .push()元素添加到数组的末尾 #
    .reduce()循环函数传递当前和上一个值 #
    .reduceRight()类似 reduce 从右往左循环 #
    .reverse()数组元素的位置颠倒 #
    .shift()删除第一个元素 #
    .slice()提取元素 #
    .some()至少有一个通过测试函数 #
    .sort()元素进行排序 #
    .splice()删除替换添加元素 #
    .toLocaleString()字符串表示数组中的元素 #
    .toString()返回字符串 #
    .unshift()元素添加到数组的开头 #
    .values()返回新的 ArrayIterator 对象 #
    -

    数组

    +

    数组

    const fruits = ["apple", "dew", "banana"];
     // 不同的数据类型
     const data = [1, 'chicken', false];
     
    -

    属性 .length

    +

    属性 .length

    const numbers = [1, 2, 3, 4];
     numbers.length // 4
     
    -

    索引

    +

    索引

    // 访问数组元素
     const myArray = [100, 200, 300];
     console.log(myArray[0]); // 100
     console.log(myArray[1]); // 200
     
    -

    可变图表

    +

    可变图表

    @@ -688,7 +688,7 @@
    添加删除开始结束
    push
    pop
    unshift
    shift
    -

    方法 .push()

    +

    方法 .push()

    // 添加单个元素:
     const cart = ['apple', 'orange'];
     cart.push('pear'); 
    @@ -697,28 +697,28 @@
     numbers.push(3, 4, 5);
     

    将项目添加到末尾并返回新的数组长度。

    -

    方法 .pop()

    +

    方法 .pop()

    const fruits = ["apple", "dew", "banana"];
     const fruit = fruits.pop(); // 'banana'
     
     console.log(fruits); // ["apple", "dew"]
     

    末尾删除一个项目并返回已删除的项目。

    -

    方法 .shift()

    +

    方法 .shift()

    const array1 = [1, 2, 3];
     const firstElement = array1.shift();
     console.log(array1); // 输出: Array [2, 3]
     console.log(firstElement); // 输出: 1
     

    从头删除一个项目并返回已删除的项目。

    -

    方法 .some()

    +

    方法 .some()

    const array = [1, 2, 3, 4, 5];
     // 检查元素是否为偶数
     const even = (element) => element % 2 === 0;
     console.log(array.some(even));
     // 预期输出: true
     
    -

    方法 .concat()

    +

    方法 .concat()

    const numbers = [3, 2, 1]
     const newFirstNumber = 4
         
    @@ -729,7 +729,7 @@
     numbers.concat(newFirstNumber)
     

    如果你想避免改变你的原始数组,你可以使用 concat。

    -

    方法 .splice()

    +

    方法 .splice()

    const months = ['Jan', 'March'];
     months.splice(1, 0, 'Feb');
     // 在索引 1 处插入
    @@ -741,7 +741,7 @@
     console.log(months);
     // 预期输出: Array ["Jan", "Feb", "May"]
     
    -

    方法 .unshift()

    +

    方法 .unshift()

    let cats = ['Bob'];
     // => ['Willy', 'Bob']
     cats.unshift('Willy');
    @@ -749,7 +749,7 @@
     cats.unshift('Puff', 'George');
     

    将项目添加到开头并返回新的数组长度。

    -

    方法 .filter()

    +

    方法 .filter()

    const words = ['js', 'java', 'golang'];
     const result = words.filter(word => {
       return  word.length > 3
    @@ -757,8 +757,8 @@
     console.log(result);
     // 预期输出: Array ["java", "golang"]
     
    -

    JavaScript 循环

    -

    While 循环

    +

    JavaScript 循环

    +

    While 循环

    while (condition) {
       // 要执行的代码块
     }
    @@ -768,7 +768,7 @@
       i++;
     }
     
    -

    反向循环

    +

    反向循环

    const fruits = ["apple", "dew", "berry"];
     for (let i = fruits.length - 1; i >= 0; i--) {
       console.log(`${i}. ${fruits[i]}`);
    @@ -777,7 +777,7 @@
     // => 1. dew
     // => 0. apple
     
    -

    Do...While 语句

    +

    Do...While 语句

    x = 0
     i = 0
     do {
    @@ -787,26 +787,26 @@
     } while (i < 5);
     // => 0 1 3 6 10
     
    -

    For 循环

    +

    For 循环

    for (let i = 0; i < 4; i += 1) {
       console.log(i);
     };
     // => 0, 1, 2, 3
     
    -

    遍历数组

    +

    遍历数组

    for (let i = 0; i < array.length; i++){
       console.log(array[i]);
     }
     // => 数组中的每一项
     
    -

    Break

    +

    Break

    for (let i = 0; i < 99; i += 1) {
       if (i > 5) break;
       console.log(i)
     }
     // => 0 1 2 3 4 5
     
    -

    Continue

    +

    Continue

    for (i = 0; i < 10; i++) {
       if (i === 3) {
         continue;
    @@ -814,14 +814,14 @@
       text += "The number is " + i + "<br>";
     }
     
    -

    嵌套循环

    +

    嵌套循环

    for (let i = 0; i < 2; i += 1) {
       for (let j = 0; j < 3; j += 1) {
         console.log(`${i}-${j}`);
       }
     }
     
    -

    for...in 循环

    +

    for...in 循环

    const fruits = ["apple", "orange", "banana"];
     for (let index in fruits) {
       console.log(index);
    @@ -830,7 +830,7 @@
     // => 1
     // => 2
     
    -

    label 语句

    +

    label 语句

    var num = 0;
     
    @@ -847,7 +847,7 @@
     alert(num);  // 95
     

    alert(num) 的值可以看出,continue outPoint; 语句的作用是跳出当前循环,并跳转到 outPoint(标签)下的 for 循环继续执行。

    -

    for...of 循环

    +

    for...of 循环

    const fruits = ["apple", "orange", "banana"];
     for (let fruit of fruits) {
       console.log(fruit);
    @@ -856,7 +856,7 @@
     // => orange
     // => banana
     
    -

    for await...of

    +

    for await...of

    async function* asyncGenerator() {
       var i = 0;
    @@ -875,7 +875,7 @@
     // 1
     // 2
     
    -

    可选的 for 表达式

    +

    可选的 for 表达式

    var i = 0;
     
     for (;;) {
    @@ -884,9 +884,9 @@
       i++;
     }
     
    -

    JavaScript 迭代器(Iterators)

    +

    JavaScript 迭代器(Iterators)

    -

    分配给变量的函数

    +

    分配给变量的函数

    let plusFive = (number) => {
       return number + 5;  
     };
    @@ -896,7 +896,7 @@
     // 由于 f 具有函数值,因此可以调用它。
     f(9); // 14
     
    -

    回调函数

    +

    回调函数

    const isEven = (n) => {
       return n % 2 == 0;
     }
    @@ -908,35 +908,35 @@
     printMsg(isEven, 4); 
     // => The number 4 is an even number: True.
     
    -

    数组方法 .reduce()

    +

    数组方法 .reduce()

    const numbers = [1, 2, 3, 4];
     const sum = numbers.reduce((accumulator, curVal) => {  
       return accumulator + curVal;
     });
     console.log(sum); // 10
     
    -

    数组方法 .map()

    +

    数组方法 .map()

    const members = ["Taylor", "Donald", "Don", "Natasha", "Bobby"];
     const announcements = members.map((member) => {
       return member + " joined the contest.";
     });
     console.log(announcements);
     
    -

    数组方法 .forEach()

    +

    数组方法 .forEach()

    const numbers = [28, 77, 45, 99, 27];
     numbers.forEach(number => {  
       console.log(number);
     }); 
     
    -

    数组方法 .filter()

    +

    数组方法 .filter()

    const randomNumbers = [4, 11, 42, 14, 39];
     const filteredArray = randomNumbers.filter(n => {  
       return n > 5;
     });
     
    -

    JavaScript 对象(Objects)

    +

    JavaScript 对象(Objects)

    -

    访问属性

    +

    访问属性

    const apple = { 
       color: 'Green',
       price: { bulk: '$3/kg', smallQty: '$4/kg' }
    @@ -944,7 +944,7 @@
     console.log(apple.color);      // => Green
     console.log(apple.price.bulk); // => $3/kg
     
    -

    命名属性

    +

    命名属性

    // 无效键名示例
     const trainSchedule = {
       // 由于单词之间的空格而无效。
    @@ -955,13 +955,13 @@
       +compartment: 'C'
     }
     
    -

    不存在的属性

    +

    不存在的属性

    const classElection = {
       date: 'January 12'
     };
     console.log(classElection.place); // undefined
     
    -

    可变的

    +

    可变的

    const student = {
       name: 'Sheldon',
    @@ -977,7 +977,7 @@
     student = {}
     // TypeError: TypeError:分配给常量变量。
     
    -

    赋值简写语法

    +

    赋值简写语法

    const person = {
       name: 'Tom',
       age: '22',
    @@ -986,7 +986,7 @@
     console.log(name); // 'Tom'
     console.log(age);  // '22'
     
    -

    删除运算符

    +

    删除运算符

    const person = {
       firstName: "Matilda",
       hobby: "knitting",
    @@ -1000,7 +1000,7 @@
       goal: "learning JavaScript"
     } */
     
    -

    对象作为参数

    +

    对象作为参数

    const origNum = 8;
     const origObj = {color: 'blue'};
     const changeItUp = (num, obj) => {
    @@ -1014,7 +1014,7 @@
     // 通过引用,因此是可变的。
     console.log(origObj.color);
     
    -

    工厂函数

    +

    工厂函数

    // 一个接受 'name','age' 和 'breed' 的工厂函数,
     //  参数返回一个自定义的 dog 对象。
    @@ -1029,12 +1029,12 @@
       };
     };
     
    -

    速记对象创建

    +

    速记对象创建

    const activity = 'Surfing';
     const beach = { activity };
     console.log(beach); // { activity: 'Surfing' }
     
    -

    this 关键字

    +

    this 关键字

    const cat = {
       name: 'Pipey',
       age: 8,
    @@ -1044,7 +1044,7 @@
     };
     console.log(cat.whatName()); // => Pipey
     
    -

    方法

    +

    方法

    const engine = {
       // 方法简写,有一个参数
       start(adverb) {
    @@ -1058,7 +1058,7 @@
     engine.start('noisily');
     engine.sputter();
     
    -

    Getters 和 setters

    +

    Getters 和 setters

    const myCat = {
       _name: 'Dottie',
       get name() {
    @@ -1073,8 +1073,8 @@
     // 赋值调用 setter
     myCat.name = 'Yankee';
     
    -

    JavaScript Classes

    -

    静态方法/字段

    +

    JavaScript Classes

    +

    静态方法/字段

    class Dog {
       constructor(name) {
    @@ -1101,7 +1101,7 @@
     // 调用静态方法
     Dog.bark();
     
    -

    公有静态字段

    +

    公有静态字段

    class ClassStaticField {
       static staticField = 'static field'
     }
    @@ -1109,7 +1109,7 @@
     console.log(ClassStaticField.staticField)
     // 预期输出值:"static field"​ 
     
    -

    Class

    +

    Class

    class Song {
       constructor() {
         this.title;
    @@ -1124,7 +1124,7 @@
     const mySong = new Song();
     mySong.play();
     
    -

    extends

    +

    extends

    // Parent class
     class Media {
       constructor(info) {
    @@ -1145,7 +1145,7 @@
       publishDate: 1975
     });
     
    -

    Class Constructor

    +

    Class Constructor

    class Song {
       constructor(title, artist) {
         this.title = title;
    @@ -1155,7 +1155,7 @@
     const mySong = new Song('Bohemian Rhapsody', 'Queen');
     console.log(mySong.title);
     
    -

    Class Methods

    +

    Class Methods

    class Song {
       play() {
         console.log('Playing!');
    @@ -1166,9 +1166,9 @@
       }
     }
     
    -

    JavaScript Modules

    +

    JavaScript Modules

    -

    Export / Import

    +

    Export / Import

    // myMath.js
     // 默认导出 Default export
     export default function add(x,y){
    @@ -1189,7 +1189,7 @@
       multiply, duplicate
     }
     
    -

    import 加载模块

    +

    import 加载模块

    // main.js
     import add, { subtract, multiply, duplicate } from './myMath.js';
     console.log(add(6, 2));      // 8 
    @@ -1199,7 +1199,7 @@
     // index.html
     <script type="module" src="main.js"></script>
     
    -

    Export Module

    +

    Export Module

    // myMath.js
     function add(x,y){
       return x + y
    @@ -1221,7 +1221,7 @@
       duplicate
     }
     
    -

    require 加载模块

    +

    require 加载模块

    // main.js
     const myMath = require('./myMath.js')
     console.log(myMath.add(6, 2));      // 8 
    @@ -1229,8 +1229,8 @@
     console.log(myMath.multiply(6, 2)); // 12
     console.log(myMath.duplicate(5))    // 10
     
    -

    JavaScript Promises

    -

    Promise

    +

    JavaScript Promises

    +

    Promise

    创建 promises

    new Promise((resolve, reject) => {
    @@ -1241,30 +1241,30 @@
       }
     })
     
    -

    使用 promises

    +

    使用 promises

    promise
       .then((result) => { ··· })
       .catch((error) => { ··· })
     
    -

    Promise 方法

    +

    Promise 方法

    Promise.all(···)
     Promise.race(···)
     Promise.reject(···)
     Promise.resolve(···)
     
    -

    执行器函数

    +

    执行器函数

    const executorFn = (resolve, reject) => {
       resolve('Resolved!');
     };
     const promise = new Promise(executorFn);
     
    -

    setTimeout()

    +

    setTimeout()

    const loginAlert = () => {
       console.log('Login');
     };
     setTimeout(loginAlert, 6000);
     
    -

    Promise 状态

    +

    Promise 状态

    const promise = new Promise((resolve, reject) => {
       const res = true;
       // 一个异步操作。
    @@ -1280,7 +1280,7 @@
       (err) => console.error(err)
     );
     
    -

    .then() 方法

    +

    .then() 方法

    const promise = new Promise((resolve, reject) => {    
       setTimeout(() => {
         resolve('Result');
    @@ -1293,7 +1293,7 @@
       console.error(err);
     });
     
    -

    .catch() 方法

    +

    .catch() 方法

    const promise = new Promise(
       (resolve, reject) => {  
       setTimeout(() => {
    @@ -1309,7 +1309,7 @@
       console.error(err);
     });
     
    -

    Promise.all()

    +

    Promise.all()

    const promise1 = new Promise((resolve, reject) => {
       setTimeout(() => {
    @@ -1326,7 +1326,7 @@
       console.log(res[1]);
     });
     
    -

    链接多个 .then()

    +

    链接多个 .then()

    const promise = new Promise(
       resolve => 
         setTimeout(() => resolve('dAlan'),100)
    @@ -1343,7 +1343,7 @@
       console.error(err)
     });
     
    -

    避免嵌套的 Promise 和 .then()

    +

    避免嵌套的 Promise 和 .then()

    const promise = new Promise((resolve, reject) => {  
       setTimeout(() => {
    @@ -1362,9 +1362,9 @@
     // 将它们链接在一起
     promise.then(twoStars).then(oneDot).then(print);
     
    -

    JavaScript Async-Await

    +

    JavaScript Async-Await

    -

    异步

    +

    异步

    function helloWorld() {
       return new Promise(resolve => {
    @@ -1389,7 +1389,7 @@
     msg(); // Message: Hello World! <-- 2 秒后
     msg1(); // Message: Hello World! <-- 2 秒后
     
    -

    解决 Promises

    +

    解决 Promises

    let pro1 = Promise.resolve(5);
     let pro2 = 44;
     let pro3 = new Promise(function(resolve, reject) {
    @@ -1400,7 +1400,7 @@
     });
     // expected => Array [5, 44, "foo"]
     
    -

    异步等待 Promises

    +

    异步等待 Promises

    function helloWorld() {
       return new Promise(resolve => {
         setTimeout(() => {
    @@ -1414,7 +1414,7 @@
     }
     msg(); // Message: Hello World! <-- 2 秒后
     
    -

    错误处理

    +

    错误处理

    // 数据不完整
     let json = '{ "age": 30 }';
     
    @@ -1425,7 +1425,7 @@
       console.error( "Invalid JSON data!" );
     }
     
    -

    异步等待运算符

    +

    异步等待运算符

    function helloWorld() {
       return new Promise(resolve => {
         setTimeout(() => {
    @@ -1439,8 +1439,8 @@
     }
     msg(); // Message: Hello World! <-- 2 秒后
     
    -

    JavaScript 请求

    -

    JSON

    +

    JavaScript 请求

    +

    JSON

    const jsonObj = {
       "name": "Rick",
       "id": "11A",
    @@ -1448,12 +1448,12 @@
     };
     

    另见:JSON 备忘单

    -

    XMLHttpRequest

    +

    XMLHttpRequest

    const xhr = new XMLHttpRequest();
     xhr.open('GET', 'mysite.com/getjson');
     

    XMLHttpRequest 是一个浏览器级别的 API,它使客户端能够通过 JavaScript 编写数据传输脚本,而不是 JavaScript 语言的一部分。

    -

    GET

    +

    GET

    const req = new XMLHttpRequest();
     req.responseType = 'json';
     req.open('GET', '/getdata?id=65');
    @@ -1462,7 +1462,7 @@
     };
     req.send();
     
    -

    POST

    +

    POST

    const data = { weight: '1.5 KG' };
     const xhr = new XMLHttpRequest();
    @@ -1481,7 +1481,7 @@
       console.log(xhr.response);
     }
     
    -

    fetch api

    +

    fetch api

    fetch(url, {
         method: 'POST',
    @@ -1499,14 +1499,14 @@
       console.log(networkError.message)
     })
     
    -

    JSON 格式

    +

    JSON 格式

    fetch('url-that-returns-JSON')
       .then(response => response.json())
       .then(jsonResponse => {
         console.log(jsonResponse);
       });
     
    -

    promise url 参数获取 API

    +

    promise url 参数获取 API

    fetch('url')
       .then(response  => {
         console.log(response);
    @@ -1514,7 +1514,7 @@
         console.error(rejection.message);
       });
     
    -

    Fetch API 函数

    +

    Fetch API 函数

    fetch('https://api-xxx.com/endpoint', {
       method: 'POST',
       body: JSON.stringify({id: "200"})
    @@ -1529,7 +1529,7 @@
       console.log(jsonResponse);
     })
     
    -

    async await 语法

    +

    async await 语法

    const getSuggestions = async () => {
       const wordQuery = inputField.value;
    @@ -1558,8 +1558,6 @@ function anchorPoint() {
       Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active'))
       if (elm?.tagName === 'H3') {
         elm?.parentElement?.parentElement?.classList.add('active');
    -    const box = elm?.parentElement?.parentElement;
    -    console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap'))
       }
     }
     anchorPoint();
    @@ -1570,7 +1568,6 @@ function updateAnchor(element) {
         tocanchor.classList.remove('is-active-link');
       });
       const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`);
    -  console.log('anchor', anchor)
       if (anchor) {
         anchor.classList.add('is-active-link');
       }
    diff --git a/docs/jest.html b/docs/jest.html
    index 74d9e83d..3eabf9d5 100644
    --- a/docs/jest.html
    +++ b/docs/jest.html
    @@ -34,16 +34,16 @@
         document.documentElement.setAttribute('data-color-mode', mode);
         localStorage.setItem(LOCAL_NANE, mode);
       }
    -

    +

    Jest 备忘清单

    Jest 是一款优雅、简洁的 JavaScript 测试框架,这里介绍了它的入门和 一些 API 的索引。

    入门

    -

    介绍

    +

    介绍

    Jest v29 是一款优雅、简洁的 JavaScript 测试框架。

      @@ -53,7 +53,7 @@
    • 快照 轻松编写持续追踪大型对象的测试,并在测试旁或代码内显示实时快照。
    • 代码覆盖 无需其他操作,您仅需添加 --coverage 参数来生成代码覆盖率报告。
    -

    快速开始

    +

    快速开始

    npm install --save-dev jest
     
    @@ -66,7 +66,7 @@
    npm test -- --watch
     

    查看: Getting started

    -

    编写测试

    +

    编写测试

    describe('My work', () => {
       test('works', () => {
    @@ -74,7 +74,7 @@
       })
     })
     
    -

    BDD 语法

    +

    BDD 语法

    describe('My work', () => {
       it('works', () => { // `it`是`test`的别名
    @@ -82,7 +82,7 @@
       })
     })
     
    -

    测试结构

    +

    测试结构

    describe('makePoniesPink', () => {
       beforeAll(() => {
    @@ -103,14 +103,14 @@
       })
     })
     
    -

    聚焦测试

    +

    聚焦测试

    describe.only(···)
     
     it.only(···)
     // 别名: fit()
     

    查看: test.only

    -

    可选参数

    +

    可选参数

    @@ -139,14 +139,14 @@
    FlagDescription
    --coverage查看测试覆盖率摘要
    --detectOpenHandles查看未关闭端口的摘要
    --runInBand一个接一个地运行所有测试
    --bail,-b失败跳出测试

    更多参数查看 Jest CLI Options

    -

    跳过测试

    +

    跳过测试

    describe.skip(···)
     
     it.skip(···)
     // 别名: xit()
     

    查看: test.skip

    -

    基本测试用例

    +

    基本测试用例

    expect(value).not.toBe(value)
       .toEqual(value)
    @@ -155,33 +155,33 @@
     expect(value).toThrow(error)
       .toThrowErrorMatchingSnapshot()
     
    -

    快照

    +

    快照

    expect(value)
       .toMatchSnapshot()
       .toMatchInlineSnapshot()
     
    -

    Errors

    +

    Errors

    expect(value)
       .toThrow(error)
       .toThrowErrorMatchingSnapshot()
     
    -

    Objects

    +

    Objects

    expect(value)
       .toBeInstanceOf(Class)
       .toMatchObject(object)
       .toHaveProperty(keyPath, value)
     
    -

    Objects

    +

    Objects

    expect(value)
       .toContain(item)
       .toContainEqual(item)
       .toHaveLength(number)
     
    -

    Numbers

    +

    Numbers

    expect(value)
       .toBeCloseTo(number, numDigits)
    @@ -190,7 +190,7 @@
       .toBeLessThan(number)
       .toBeLessThanOrEqual(number)
     
    -

    Booleans

    +

    Booleans

    expect(value)
       .toBeFalsy()
    @@ -199,19 +199,19 @@
       .toBeUndefined()
       .toBeDefined()
     
    -

    Strings

    +

    Strings

    expect(value)
       .toMatch(regexpOrString)
     
    -

    NaN

    +

    NaN

    test('当值为 NaN 时通过', () => {
       expect(NaN).toBeNaN();
       expect(1).not.toBeNaN();
     });
     
    -

    Others

    +

    Others

    expect.extend(matchers)
     expect.any(constructor)
    @@ -219,8 +219,8 @@
     
     expect.assertions(1)
     
    -

    匹配器

    -

    基本匹配器

    +

    匹配器

    +

    基本匹配器

    expect(42).toBe(42)    // 严格相等 (===)
     expect(42).not.toBe(3) // 严格相等 (!==)
     expect([1, 2]).toEqual([1, 2]) // 深度相等
    @@ -234,7 +234,7 @@
       .not.toStrictEqual({ b: 2 })
     

    Using matchers, matchers docs

    -

    真实性

    +

    真实性

    // 匹配 if 语句视为 true 的任何内容
     // (not false、0、''、null、undefined、NaN)
     expect('foo').toBeTruthy()
    @@ -250,7 +250,7 @@
     // 匹配真假
     expect(true).toEqual(expect.any(Boolean))
     
    -

    数字

    +

    数字

    // 大于
     expect(2).toBeGreaterThan(1)
     // 大于或等于
    @@ -264,7 +264,7 @@
     // 原始值的传递类型
     expect(NaN).toEqual(expect.any(Number))
     
    -

    字符串

    +

    字符串

    // 检查字符串是否与正则表达式匹配。
     expect('long string').toMatch('str')
     expect('string').toEqual(expect.any(String))
    @@ -277,7 +277,7 @@
       ]
     )
     
    -

    数组

    +

    数组

    expect([]).toEqual(expect.any(Array))
     const exampleArray = [
       'Alice', 'Bob', 'Eve'
    @@ -290,7 +290,7 @@
     expect([{ a: 1 }, { a: 2 }])
         .toContainEqual({ a: 1 }) // 包含相等
     
    -

    对象

    +

    对象

    expect({ a:1 }).toHaveProperty('a')
     expect({ a:1 }).toHaveProperty('a', 1)
     expect({ a: {b:1} }).toHaveProperty('a.b')
    @@ -306,7 +306,7 @@
       expect.anything(),
     ])
     
    -

    模拟函数

    +

    模拟函数

    // const fn = jest.fn()
     // const fn = jest.fn().mockName('Unicorn') -- 命名为 mock, Jest 22+
    @@ -337,7 +337,7 @@
     // fn.mock.calls[0][0] — 第一次调用的第一个参数
     expect(fn.mock.calls[0][0]).toBe(2)
     
    -

    别名

    +

    别名

    • toBeCalledtoHaveBeenCalled
    • toBeCalledWithtoHaveBeenCalledWith
    • @@ -348,7 +348,7 @@
    • lastReturnedWithtoHaveLastReturnedWith
    • nthReturnedWithtoHaveNthReturnedWith
    -

    杂项

    +

    杂项

    // 检查对象是否是类的实例。
     expect(new A()).toBeInstanceOf(A)
     
    @@ -360,7 +360,7 @@
     // 匹配除 null 或 undefined 之外的任何内容
     expect('pizza').toEqual(expect.anything())
     
    -

    快照

    +

    快照

    // 这可确保某个值与最近的快照匹配。
     expect(node).toMatchSnapshot()
     
    @@ -372,7 +372,7 @@
     // 确保值与最近的快照匹配。
     expect(user).toMatchInlineSnapshot()
     
    -

    Promise 匹配器(Jest 20+)

    +

    Promise 匹配器(Jest 20+)

    test('resolve to lemon', () => {
       // 验证在测试期间是否调用了一定数量的断言。
       expect.assertions(1)
    @@ -399,7 +399,7 @@
     })
     

    resolves 文档

    -

    例外

    +

    例外

    // const fn = () => {
     //    throw new Error('Out of cheese!')
     // }
    @@ -422,12 +422,12 @@
     // 测试函数在调用时是否抛出与最新快照匹配的错误。
     expect(fn).toThrowErrorMatchingSnapshot()
     
    -

    别名

    +

    别名

    • toThrowErrortoThrow
    -

    异步测试

    -

    实例

    +

    异步测试

    +

    实例

    在异步测试中指定一些预期的断言是一个很好的做法,所以如果你的断言根本没有被调用,测试将会失败。

    test('async test', () => {
    @@ -443,7 +443,7 @@
     

    这将验证每个测试用例至少存在一个断言。 它还可以与更具体的 expect.assertions(3) 声明配合使用。 请参阅 Jest 文档中的 更多示例

    -

    async/await

    +

    async/await

    test('async test', async () => {
       expect.assertions(1)
     
    @@ -451,7 +451,7 @@
       expect(result).toBe(true)
     })
     
    -

    done() 回调

    +

    done() 回调

    test('async test', (done) => {
       expect.assertions(1)
    @@ -470,7 +470,7 @@
     })
     

    将断言包装在 try/catch 块中,否则 Jest 将忽略失败

    -

    Promises

    +

    Promises

    test('async test', () => {
       expect.assertions(1)
     
    @@ -480,8 +480,8 @@
     })
     

    从你的测试中 返回 一个 Promise

    -

    模拟

    -

    模拟函数

    +

    模拟

    +

    模拟函数

    test('call the callback', () => {
       const callback = jest.fn()
    @@ -518,7 +518,7 @@
     
    const callback = jest.fn(() => true)
     

    模拟函数文档

    -

    返回、解析和拒绝值

    +

    返回、解析和拒绝值

    您的模拟可以返回值:

    const callback
    @@ -549,7 +549,7 @@
     //  call 1: false
     //  call 2+: true
     
    -

    使用 jest.mock 方法模拟模块

    +

    使用 jest.mock 方法模拟模块

    // 原来的 lodash/memoize 应该存在
     jest.mock(
       'lodash/memoize',
    @@ -563,7 +563,7 @@
     )
     

    注意:当使用 babel-jest 时,对 jest.mock 的调用将自动提升到代码块的顶部。 如果您想明确避免这种行为,请使用 jest.doMock

    -

    使用模拟文件模拟模块

    +

    使用模拟文件模拟模块

    创建一个类似 __mocks__/lodash/memoize.js 的文件:

    module.exports = (a) => a
     
    @@ -571,7 +571,7 @@
    jest.mock('lodash/memoize')
     

    注意:当使用 babel-jest 时,对 jest.mock 的调用将自动提升到代码块的顶部。 如果您想明确避免这种行为,请使用 jest.doMock手动模拟文档

    -

    模拟 getters 和 setters

    +

    模拟 getters 和 setters

    const getTitle = jest.fn(() => 'pizza')
     const setTitle = jest.fn()
     const location = {}
    @@ -580,7 +580,7 @@
       set: setTitle,
     })
     
    -

    模拟 getter 和 setter (Jest 22.1.0+)

    +

    模拟 getter 和 setter (Jest 22.1.0+)

    const location = {}
     const getTitle = jest
         .spyOn(location, 'title', 'get')
    @@ -589,7 +589,7 @@
         .spyOn(location, 'title', 'set')
         .mockImplementation(() => {})
     
    -

    定时器模拟

    +

    定时器模拟

    为使用本机计时器函数(setTimeoutsetIntervalclearTimeoutclearInterval)的代码编写同步测试。

    // 启用假计时器
    @@ -623,7 +623,7 @@
     

    对于特殊情况,请使用 jest.runOnlyPendingTimers()

    注意: 您应该在测试用例中调用 jest.useFakeTimers() 以使用其他假计时器方法。

    -

    模拟对象方法

    +

    模拟对象方法

    const spy = jest.spyOn(console, 'log')
       .mockImplementation(() => {})
     
    @@ -639,7 +639,7 @@
     expect(spy).toHaveBeenCalled()
     spy.mockRestore()
     
    -

    清除和恢复模拟

    +

    清除和恢复模拟

    对于一个模拟

    // 清除模拟使用日期
    @@ -664,15 +664,15 @@
     // 将所有模拟恢复到其原始值。
     jest.restoreAllMocks()
     
    -

    使用模拟时访问原始模块

    +

    使用模拟时访问原始模块

    jest.mock('fs')
     // 模拟模块
     const fs = require('fs')
     // 原始模块
     const fs = require.requireActual('fs')
     
    -

    数据驱动测试(Jest 23+)

    -

    使用不同的数据运行相同的测试

    +

    数据驱动测试(Jest 23+)

    +

    使用不同的数据运行相同的测试

    test.each([
       [1, 1, 2],
       [1, 2, 3],
    @@ -681,7 +681,7 @@
       expect(a + b).toBe(expected)
     })
     
    -

    使用模板文字相同

    +

    使用模板文字相同

    test.each`
       a    | b    | expected
       ${1} | ${1} | ${2}
    @@ -691,7 +691,7 @@
       expect(a + b).toBe(expected)
     })
     
    -

    或在“describe”级别

    +

    或在“describe”级别

    describe.each([
       ['mobile'], ['tablet'], ['desktop']
     ])('checkout flow on %s', (viewport) => {
    @@ -701,19 +701,19 @@
     })
     

    describe.each() 文档、test.each() 文档

    -

    跳过测试

    +

    跳过测试

    -

    不要运行这些测试

    +

    不要运行这些测试

    describe.skip('makePoniesPink'...
     tests.skip('make each pony pink'...
     
    -

    仅运行以下测试

    +

    仅运行以下测试

    describe.only('makePoniesPink'...
     tests.only('make each pony pink'...
     
    -

    测试有副作用的模块

    +

    测试有副作用的模块

    -

    实例

    +

    实例

    const modulePath = '../module-to-test'
     afterEach(() => {
       jest.resetModules()
    @@ -730,7 +730,7 @@
     })
     

    Node.jsJest 会缓存你需要的模块。 要测试具有副作用的模块,您需要在测试之间重置模块注册表

    -

    另见

    +

    另见

    @@ -747,8 +747,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -759,7 +757,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/json.html b/docs/json.html index 93353b12..9edc4585 100644 --- a/docs/json.html +++ b/docs/json.html @@ -34,15 +34,15 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    JSON 备忘清单

    这是理解和编写 JSON 格式配置文件的快速参考备忘单。

    入门

    -

    入门

    +

    介绍

    JSON 是一种基于文本的轻量级开放标准,专为人类可读的数据交换而设计。

    • JSON 代表 JavaScript 对象表示法
    • @@ -51,7 +51,7 @@
    • JSON 文件扩展名为 .json
    • JSON Internet 媒体类型为 application/json
    -

    示例

    +

    示例

    {
       "name": "Jason",
       "age": 39,
    @@ -65,7 +65,7 @@
       ]
     }
     
    -

    类型

    +

    类型

    @@ -104,7 +104,7 @@
    类型描述
    Number双精度浮点
    String字符系列
    Boolean“true”或“false”
    Array有序的值序列
    Value字符串、数字、布尔值、空值等
    Object键/值对的无序集合
    nullNull 或 Empty
    -

    字符串

    +

    字符串

    @@ -152,18 +152,18 @@
    \"双引号 Double quote
    \\反斜杠 Backslash
    \/正斜杠 Forward slash
    \b退格 Backspace
    \f换页 Form feed
    \n换行 Newline
    \r回车 Carriage return
    \t标签 Tab
    \u后跟四个十六进制数字
    -

    示例

    +

    示例

    {
       "url": "https://quickref.me",
       "msg" : "Hi,\n\"QuickRef.ME\"",
       "intro": "Share quick reference and cheat sheet for developers."
     }
     
    -

    无效字符串

    +

    无效字符串

    { "foo": 'bar' }
     

    Have to be delimited by double quotes

    -

    数字

    +

    数字

    @@ -188,7 +188,7 @@
    类型说明
    Integer数字 1-9、0 和正数或负数
    Fraction0.3、3.9 等分数
    Exponent指数,如 e、e+、e-、E、E+、E
    -

    示例

    +

    示例

    {
       "positive" : 12,
       "negative" : -1,
    @@ -197,11 +197,11 @@
       "zero" : 0
     }
     
    -

    无效的数字

    +

    无效的数字

    { "foo": 0xFF }
     

    在JSON中,只能使用十进制文字

    -

    对象 Objects

    +

    对象 Objects

    {
       "color": "Purple",
       "id": "210",
    @@ -214,11 +214,11 @@
     }
     

    用逗号分隔的多个键/值对

    -

    数组 Arrays

    +

    数组 Arrays

    [1, 2, 3, 4, 5]
     

    [ 开始并以 ] 结束

    -

    对象数组

    +

    对象数组

    {
       "children": [
         { "name": "Jimmy Smith", "age": 15 },
    @@ -226,14 +226,14 @@
       ]
     }
     
    -

    数组对象

    +

    数组对象

    {
       "attributes": ["a1", "a2"],
       "methods": ["getter", "setter"],
       "empty_array": []
     }
     
    -

    二维阵列

    +

    二维阵列

    {
       "my_sequences": [
         [1, 2, 3],
    @@ -243,7 +243,7 @@
       ]
     }
     
    -

    对象的对象

    +

    对象的对象

    {
       "Mark McGwire": {
         "hr": 65,
    @@ -255,7 +255,7 @@
       }
     }
     
    -

    嵌套

    +

    嵌套

    {
       "Jack": {
         "id": 1,
    @@ -268,8 +268,8 @@
       }
     }
     
    -

    在 JavaScript 中访问 JSON

    -

    访问对象

    +

    在 JavaScript 中访问 JSON

    +

    访问对象

    let myObject = {
       "name": "Jason",
       "last": "Doe",
    @@ -310,7 +310,7 @@
     
     
     
    myObject.name"Jason"
    myObject["name"]"Jason"
    myObject.age39
    myObject.otherundefined
    myObject[0]undefined
    -

    访问嵌套

    +

    访问嵌套

    let myObject = {
         "ref": {
    @@ -370,7 +370,7 @@
     
     
     
    myObject.ref.age2
    myObject["ref"]["age"]2
    myObject.jdoe["Jason", "Doe", 39 ...]
    myObject.jsmith[3]"F"
    myObject[1]undefined
    -

    访问对象数组

    +

    访问对象数组

    let myArray = [
       {
    @@ -430,7 +430,7 @@
     
     
     
    myArray[0]{"name": "Jason", ...}
    myArray[1].name"Tom"
    myArray[1][2]42
    myArray[3]undefined
    myArray[3].genderTypeError: Cannot read...
    -

    访问阵列

    +

    访问阵列

    let myArray = [
       "Jason",
       "Doe",
    @@ -463,7 +463,7 @@
     
     
     
    myArray[1]"Doe"
    myArray[5]true
    myArray[6]undefined
    -

    另见

    +

    另见

    • JSON (json.org)
    • JSON Editor Online (jsoneditoronline.org)
    • @@ -482,8 +482,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -494,7 +492,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/koajs.html b/docs/koajs.html index 71056fbb..0d37ce76 100644 --- a/docs/koajs.html +++ b/docs/koajs.html @@ -34,12 +34,12 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    Koajs 备忘清单

    +

    Koajs 备忘清单

    基于 Node.js 平台的下一代 web 开发框架,包含 Koa 的 API 参考列表和一些示例。

    入门

    -

    入门

    +

    Hello World

    Koa 需要 node v7.6.0 或更高版本来支持ES2015、异步方法,你可以安装自己支持的 node 版本

      @@ -68,7 +68,7 @@
    -

    级联

    +

    级联

    const Koa = require('koa');
     const app = new Koa();
    @@ -94,7 +94,7 @@
     });
     app.listen(3000);
     
    -

    配置

    +

    配置

    @@ -130,7 +130,7 @@
    :-:-
    app.env默认为 NODE_ENVdevelopment
    app.keys签名 cookie 密钥数组
    app.proxy何时信任真正的代理头字段
    app.subdomainOffset要忽略的 .subdomains 的偏移量,默认为 2
    app.proxyIpHeader代理 ip 头,默认为 X-Forwarded-For
    app.maxIpsCount从代理 ip 头读取的最大 ips 数,默认为 0(表示无穷大)
    -

    app.callback()

    +

    app.callback()

    @@ -163,20 +163,20 @@
    :-:-
    app.listen(...) #为一个绑定 3000 端口的简单 Koa 应用
    app.callback() #返回一个适合 http.createServer() 方法的回调函数用来处理请求
    app.use(function) #添加指定的中间件,详情请看 Middleware
    app.keys #设置签名 cookie 密钥
    app.context #从中创建 ctx 的原型
    -

    错误处理

    +

    错误处理

    app.on('error', (err, ctx) => {
       log.error('server error', err, ctx)
     });
     

    默认情况下 Koa 会将所有错误信息输出到 stderr, 除非 app.silenttrue。当 err.status404 或者 err.expose 时,默认错误处理程序也不会输出错误

    -

    Context 示例

    +

    Context 示例

    app.use(async ctx => {
       ctx; // 这是上下文 Context
       ctx.request;  // 这是 koa Request
       ctx.response; // 这是 koa Response
     });
     
    -

    app.listen(...)

    +

    app.listen(...)

    const Koa = require('koa');
     const app = new Koa();
    @@ -196,7 +196,7 @@
     http.createServer(app.callback()).listen(3000);
     https.createServer(app.callback()).listen(3001);
     
    -

    ctx.throw 示例

    +

    ctx.throw 示例

    ctx.throw(400);
     ctx.throw(400, 'name required');
     ctx.throw(400, 'name required', { user: user });
    @@ -207,14 +207,14 @@
     err.expose = true;
     throw err;
     
    -

    ctx.assert 示例

    +

    ctx.assert 示例

    ctx.assert(
       ctx.state.user,
       401,
       'User not found. Please login!'
     );
     
    -

    Context(上下文) API

    +

    Context(上下文) API

    @@ -275,7 +275,7 @@
    :-:-
    ctx.reqNode 的 request 对象
    ctx.resNode 的 response 对象
    ctx.requestKoa 的 Request 对象
    ctx.responseKoa 的 Response 对象
    ctx.state推荐的命名空间,用于通过中间件传递信息到前端视图
    ctx.app应用实例引用
    ctx.app.emit发出由第一个参数定义的类型的事件
    ctx.cookies.get(name, [options])获得 cookie 中名为 name 的值
    ctx.cookies.set(name, value, [options])设置 cookie 中名为 name 的值
    ctx.throw([status], [msg], [properties])抛出包含 .status 属性的错误,默认为 500
    ctx.assert(value, [status], [msg], [properties])!value 时, Helper 方法抛出一个类似 .throw() 的错误
    ctx.respond避免使用 Koa 的内置响应处理功能,您可以直接赋值 this.repond = false
    -

    ctx.cookies.set 参数

    +

    ctx.cookies.set 参数

    @@ -323,7 +323,7 @@
    :-:-
    maxAge表示从Date开始的毫秒数 now() 到期。
    expires一个 Date 对象,指示 cookie 的到期日期(默认情况下在会话结束时到期)
    path表示 cookie 路径的字符串(默认为/
    domain表示 cookie 的域的字符串(无默认值)
    secure一个布尔值,指示 cookie 是否只通过HTTPS发送(HTTP默认为false,HTTPS默认为true)。阅读有关此选项的更多信息
    httpOnly一个布尔值,指示cookie是否只通过HTTP(S)发送,而不可用于客户端 JavaScript(默认为true)
    sameSite一个布尔值或字符串,指示cookie是否为“同一站点”cookie(默认为false)。这可以设置为“strict”、“lax”、“none”或true(映射为“strect”)
    signed一个布尔值,指示是否对cookie进行签名(默认为false)。如果这是真的,还将发送另一个附加了.sig后缀的同名cookie,其中一个27字节的url安全base64 SHA1值表示cookie name=cookie值相对于第一个Keygrip键的哈希值。此签名密钥用于在下次收到cookie时检测篡改
    overwrite一个布尔值,指示是否覆盖以前设置的同名 cookie(默认为false)。如果为true,则在设置此Cookie时,将从set-Cookie标头中筛选出在同一请求期间设置的具有相同名称的所有Cookie(无论路径或域如何)
    -

    请求(Request)

    +

    请求(Request)

    @@ -496,7 +496,7 @@
    :-:-
    request.header请求头对象
    request.header=设置请求头对象
    request.headers请求头对象。等价于 request.header.
    request.headers=设置请求头对象。 等价于request.header=.
    request.method请求方法
    request.method=设置请求方法, 在实现中间件时非常有用,比如 methodOverride()
    request.length以数字的形式返回 request 的内容长度(Content-Length),或者返回 undefined。
    request.url获得请求url地址.
    request.url=设置请求地址,用于重写url地址时
    request.originalUrl获取请求原始地址
    request.origin获取URL原始地址, 包含 protocol 和 host
    request.href获取完整的请求URL, 包含 protocol, host 和 url
    request.path获取请求路径名
    request.path=设置请求路径名并保留当前查询字符串
    request.querystring获取查询参数字符串(url中?后面的部分),不包含?
    request.querystring=设置原始查询字符串
    request.search获取查询参数字符串,包含?
    request.search=设置原始查询字符串
    request.host获取 host (hostname:port)。 当 app.proxy 设置为 true 时,支持 X-Forwarded-Host
    request.hostname获取 hostname。当 app.proxy 设置为 true 时,支持 X-Forwarded-Host。
    request.URL获取 WHATWG 解析的对象.
    request.type获取请求 Content-Type,不包含像 "charset" 这样的参数。
    request.charset获取请求 charset,没有则返回 undefined
    request.query将查询参数字符串进行解析并以对象的形式返回,如果没有查询参数字字符串则返回一个空对象
    request.query=根据给定的对象设置查询参数字符串
    request.fresh检查请求缓存是否 "fresh"(内容没有发生变化)
    request.stale与 req.fresh 相反
    request.protocol返回请求协议,"https" 或者 "http"
    request.secure简化版 this.protocol == "https",用来检查请求是否通过 TLS 发送
    request.ip请求远程地址,当 app.proxy 设置为 true 时,支持 X-Forwarded-Host
    request.ips当 X-Forwarded-For 存在并且 app.proxy 有效,将会返回一个有序(从 upstream 到 downstream)ip 数组
    request.subdomains以数组形式返回子域名
    request.is(types...)检查请求所包含的 "Content-Type" 是否为给定的 type 值
    request.accepts(types)检查给定的类型 types(s) 是否可被接受,当为 true 时返回最佳匹配,否则返回 false
    request.acceptsEncodings(encodings)检查 encodings 是否可以被接受,当为 true 时返回最佳匹配,否则返回 false
    request.acceptsCharsets(charsets)检查 charsets 是否可以被接受,如果为 true 则返回最佳匹配,否则返回 false
    request.acceptsLanguages(langs)检查 langs 是否可以被接受,如果为 true 则返回最佳匹配,否则返回 false
    request.idempotent检查请求是否为幂等(idempotent)
    request.socket返回请求的socket
    request.get(field)返回请求头
    -

    响应(Response)

    +

    响应(Response)

    @@ -617,7 +617,7 @@
    :-:-
    response.headerResponse header 对象
    response.headersResponse header 对象。等价于 response.header.
    response.socketRequest socket.
    response.status获取响应状态。 默认情况下,response.status设置为404,而不像node's res.statusCode默认为200。
    response.status=通过数字设置响应状态
    response.message获取响应状态消息。默认情况下, response.message关联response.status。
    response.message=将响应状态消息设置为给定值。
    response.length=将响应Content-Length设置为给定值。
    response.length如果 Content-Length 作为数值存在,或者可以通过 ctx.body 来进行计算,则返回相应数值,否则返回 undefined。
    response.body获取响应体。
    response.body=设置响应体为如 string,Buffer,Stream,Object|Array,null
    response.get(field)获取 response header 中字段值,field 不区分大小写
    response.set(field, value)设置 response header 字段 field 的值为 value
    response.append(field, value)添加额外的字段field 的值为 val
    response.set(fields)使用对象同时设置 response header 中多个字段的值
    response.remove(field)移除 response header 中字段 filed
    response.type获取 response Content-Type,不包含像"charset"这样的参数
    response.type=通过 mime 类型的字符串或者文件扩展名设置 response Content-Type
    response.is(types...)ctx.request.is() 非常类似。用来检查响应类型是否是所提供的类型之一
    response.redirect(url, [alt])执行 [302] 重定向到对应 url
    response.attachment([filename])设置 "attachment" 的 Content-Disposition,用于给客户端发送信号来提示下载
    response.headerSent检查 response header 是否已经发送,用于在发生错误时检查客户端是否被通知。
    response.lastModified如果存在 Last-Modified,则以 Date 的形式返回。
    response.lastModified=以 UTC 格式设置 Last-Modified。您可以使用 Date 或 date 字符串来进行设置。
    response.etag=设置 包含 "s 的 ETag
    response.vary(field)不同于field.
    response.flushHeaders()刷新任何设置的响应头,并开始响应体
    -

    请求(Request)别名

    +

    请求(Request)别名

    以下访问器和别名与 Request 等价:

    • ctx.header
    • @@ -652,7 +652,7 @@
    • ctx.acceptsLanguages()
    • ctx.get()
    -

    响应(Response)别名

    +

    响应(Response)别名

    以下访问器和别名与 Response 等价:

    • ctx.body
    • @@ -674,7 +674,7 @@
    • ctx.lastModified=
    • ctx.etag=
    -

    request.fresh 示例

    +

    request.fresh 示例

    // freshness 检查需要状态 20x 或 304
     ctx.status = 200;
     ctx.set('ETag', '123');
    @@ -689,7 +689,7 @@
     // 获取新数据
     ctx.body = await db.find('something');
     
    -

    ctx.is 示例

    +

    ctx.is 示例

    // Content-Type: text/html; charset=utf-8
     ctx.is('html'); // => 'html'
     ctx.is('text/html'); // => 'text/html'
    @@ -704,7 +704,7 @@
     
     ctx.is('html'); // => false
     
    -

    ctx.accepts 示例

    +

    ctx.accepts 示例

    // 接受: text/*, application/json
     ctx.accepts('html');
     // => "html"
    @@ -715,7 +715,7 @@
     ctx.accepts('application/json');
     // => "application/json"
     
    -

    request.acceptsCharsets 示例

    +

    request.acceptsCharsets 示例

    // Accept-Charset: utf-8, iso-8859-1;q=0.2, utf-7;q=0.5
     ctx.acceptsCharsets('utf-8', 'utf-7');
     // => "utf-8"
    @@ -724,14 +724,14 @@
     // => "utf-8"
     

    检查 charsets 是否可以被接受,如果为 true 则返回最佳匹配, 否则返回 false

    -

    response.set 示例

    +

    response.set 示例

    ctx.set({
       'Etag': '1234',
       'Last-Modified': date
     });
     

    使用对象同时设置 response header 中多个字段的值

    -

    response.type 示例

    +

    response.type 示例

    const ct = ctx.type;
     // => "image/png"
     
    @@ -749,8 +749,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -761,7 +759,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/lerna.html b/docs/lerna.html index 87e4895b..a474fbca 100644 --- a/docs/lerna.html +++ b/docs/lerna.html @@ -34,15 +34,15 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    Lerna 备忘清单

    本备忘单旨在快速理解 Lerna v6 所涉及的主要概念,显示了它的常用命令使用清单。

    入门

    -

    入门

    +

    介绍

    现代构建系统,用于管理和发布来自同一存储库的多个 JavaScript/TypeScript 包。

    $ npx lerna@latest init
    @@ -65,7 +65,7 @@
     ├── lerna.json
     └── package.json
     
    -

    引导程序 (Bootstrap)

    +

    引导程序 (Bootstrap)

    它在 package.json 中依赖于它们,如下所示:

    "dependencies": {
    @@ -88,7 +88,7 @@
       );
     }
     
    -

    useWorkspaces

    +

    useWorkspaces

    {
       "$schema": "node_modules/lerna/schemas/lerna-schema.json",
       "useWorkspaces": true,
    @@ -97,7 +97,7 @@
     

    lerna.json 中配置 useWorkspaces 告诉 Lerna 将包链接过程委托给你的包管理器 (此功能由 npm、yarn 和 pnpm 支持)。

    -

    任务运行

    +

    任务运行

    npx lerna run test --scope=header # 单个
     

    多个任务运行

    @@ -106,8 +106,8 @@

    忽略 header,footer 其它包中运行任务运行

    npx lerna run build --ignore=header,footer
     
    -

    命令索引

    -

    run/exec 运行命令

    +

    命令索引

    +

    run/exec 运行命令

    # 在所有包含它的包中运行 npm run my-script
     $ lerna run <script> -- [..args]
     $ lerna run test
    @@ -165,7 +165,7 @@
     
     
    :-:-
    --npm-client <client> #必须是知道如何运行 npm 生命周期脚本的可执行文件,默认值是 npm
    --stream #立即从子进程流式输出,以原始包名称为前缀
    --parallel #类似于 --stream 但完全忽略并发和拓扑排序,立即在所有匹配的包中运行给定的命令或脚本,并带有前缀流输出
    --no-bail #默认情况下,如果任何脚本运行返回非零退出代码,lerna run 将退出并出现错误。传递 --no-bail 以禁用此行为
    --no-prefix #当输出为流式传输(--stream--parallel)时禁用包名称前缀。当将结果传送到其他进程(例如编辑器插件)时,此选项很有用
    --profile #分析脚本执行并生成性能配置文件
    --profile-location <location> #您可以为性能配置文件输出提供自定义位置。提供的路径将相对于当前工作目录进行解析。
    useNx=false #通过将 useNx 设置为 false,您可以使用 lerna 中的遗留任务运行实现 (p-mapp-queue),而不是使用由 Nx 提供支持的默认现代任务运行器实现。
    -

    publish 发布包

    +

    publish 发布包

    # 发布自上次发布以来已更改的软件包
     $ lerna publish              
    @@ -271,7 +271,7 @@
     
     
    :-:-
    --canary #使用此标志运行时,以更精细的方式(每次提交)发布包
    --contents <dir> #要发布的子目录。 必须适用于所有包,并且必须包含 package.json 文件
    --dist-tag <tag> #使用此标志运行时,将使用给定的 npm dist-tag(默认为 latest)发布到 npm
    --git-head <sha> #打包 tarball 时将显式 SHA 设置为清单上的 gitHead,仅允许使用 from-package 位置
    --graph-type <all|dependencies> #设置在构建包图时使用哪种依赖项。默认值是依赖项,即仅包含包的 package.json 的依赖项部分中列出的包
    --ignore-scripts #传递时,此标志将在 lerna 发布期间禁用运行生命周期脚本
    --ignore-prepublish #传递时,此标志将禁用在 lerna 发布期间运行已弃用预发布脚本
    --legacy-auth #发布需要身份验证的包时,您正在使用仅使用旧版 Base64 用户名:密码 的内部托管 NPM 注册表。这与 NPM 发布 _auth 标志相同
    --no-git-reset #默认情况下,lerna publish 确保对工作树的任何更改都已重置
    --no-granular-pathspec #默认情况下,lerna publish 将尝试(如果启用)git checkout 仅在发布过程中临时修改的叶包清单
    --verify-access #从历史上看,lerna 试图通过使用给定令牌执行一些抢占式 npm API 请求来快速解决授权/身份验证问题
    --otp #发布需要双重身份验证的包时,您可以使用 --otp 指定一次性密码
    --preid #与同名的 lerna 版本选项不同,该选项只适用于 --canary 版本计算
    --pre-dist-tag <tag> #--dist-tag 的工作方式相同,但仅适用于使用预发布版本发布的软件包
    --registry <url> #使用此标志运行时,转发的 npm 命令将为您的包使用指定的注册表
    --tag-version-prefix #此选项允许提供自定义前缀而不是默认前缀:v
    --temp-tag #传递时,此标志将更改默认发布过程,首先将所有更改的包发布到临时 dist-tag(lerna-temp),然后将新版本移动到 --dist-tag 配置的 dist-tag (默认latest)
    --yes #使用此标志运行时,lerna publish 将跳过所有确认提示
    -

    不推荐使用的选项

    +

    不推荐使用的选项

    @@ -291,7 +291,7 @@
    :-:-
    --no-verify-access #旧的抢先访问验证现在默认关闭,因此不需要 --no-verify-access
    --skip-npm #直接调用 lerna version
    -

    每个包中的配置

    +

    每个包中的配置

    "publishConfig": {
       "access": "public",
       "registry": "http://my-registry.com",
    @@ -327,7 +327,7 @@
     
     
    :-:-
    access #要发布具有范围的包(例如,@mycompany/rocks)
    registry #通过设置注册表来自定义每个包的注册表
    tag #您可以通过设置标签来自定义每个包的 dist-tag
    directory #这个 非标准 字段允许您像 --contents 一样自定义发布的子目录,但基于每个包
    -

    version 修改版本号

    +

    version 修改版本号

    $ lerna version 1.0.1 # 明确的
     $ lerna version patch # semver 关键字
    @@ -470,7 +470,7 @@
     
     
    :-:-
    --allow-branch <glob> #与启用 lerna versiongit 分支匹配的 glob 白名单
    --amend #使用此标志运行时,lerna version 将在当前提交上执行所有更改,而不是添加新的
    --changelog-preset #默认情况下,更改日志预设设置为 angular
    --conventional-commits #使用常规提交规范来确定版本 bump 并生成 CHANGELOG.md 文件
    --conventional-graduate #将使用 * 对指定的包(逗号分隔)或所有包进行分级
    --conventional-prerelease #预发布版本发布指定的包
    --create-release <type> #根据更改的包创建正式的 GitHubGitLab 版本
    --exact #在更新的包中精确指定更新的依赖项(没有标点符号),而不是与 semver 兼容(使用^
    --force-publish #强制发布指定的包
    --git-remote <name> #git 更改推送到指定的远程位置,而不是origin
    --ignore-changes #检测更改的包时忽略与 glob 匹配的文件中的更改
    --ignore-scripts #禁用在 lerna version 期间运行的生命周期脚本
    --include-merged-tags #在检测到更改的包时包括来自合并分支的标签
    --message <msg> #此选项别名为 -m 以与 git commit 进行奇偶校验
    --no-changelog #使用常规提交时,不要生成任何 CHANGELOG.md 文件
    --no-commit-hooks #允许 git commit hooks 在提交版本更改时运行。通过 --no-commit-hooks 禁用此行为
    --no-git-tag-version #将提交对 package.json 文件的更改并标记发布。通过 --no-git-tag-version 禁用该行为
    --no-granular-pathspec #仅添加在版本控制过程中更改的叶包清单(可能还有变更日志)。这产生了 git add --packages/*/package.json 的等价物,但针对更改的内容量身定制
    --no-private #在选择版本、提交和标记版本时包含私有包。通过 --no-private 禁用此行为
    --no-push #将已提交和标记的更改推送到配置的 git remote。通过 --no-push 禁用此行为
    --preid #使用此标志运行时,lerna 版本将使用指定的预发布标识符增加 premajorpreminorprepatchprerelease semver bumps
    --sign-git-commit #此选项类似于同名的 npm 版本选项
    --sign-git-tag #此选项类似于同名的 npm 版本选项
    --force-git-tag #此选项替换任何现有标记而不是失败
    --tag-version-prefix #此选项允许提供自定义前缀而不是默认前缀:v
    --yes #使用此标志运行时,lerna 版本将跳过所有确认提示
    -

    不推荐使用的选项

    +

    不推荐使用的选项

    @@ -494,7 +494,7 @@
    :-:-
    --cd-version #semver 关键字传递给 bump 位置
    --repo-version #将明确的版本号传递给 bump 位置
    --skip-git #请改用 --no-git-tag-version--no-push
    -

    bootstrap

    +

    bootstrap

    将本地包链接在一起,并安装其余的包依赖项

    $ lerna bootstrap -- --production \
                          --no-optional
    @@ -527,7 +527,7 @@
     
     
    :-:-
    --hoist [glob] #repo 根目录安装与 glob 匹配的外部依赖项,以便它们可用于所有包
    --strict #与提升 (hoist) 一起使用时,会在发出版本警告后抛出错误并停止引导
    --nohoist [glob] #不要在 repo 根目录安装与 glob 匹配的外部依赖项。这可用于选择不提升某些依赖项
    --ignore #当与 bootstrap 命令一起使用时,还可以在 lerna 中设置 --ignore 标志
    -

    选项

    +

    选项

    @@ -567,7 +567,7 @@
    :-:-
    --ignore-prepublish #跳过默认在引导程序包中运行的预发布生命周期脚本
    --ignore-scripts #跳过通常在引导程序包中运行(准备等)的任何生命周期脚本
    --registry <url> #指定 npm 包的仓库地址
    --npm-client <client> #必须是知道如何安装 npm 包依赖项的可执行文件
    --use-workspaces #启用与 Yarn Workspaces 的集成(从 yarn@0.27+ 开始可用)
    --no-ci #CI 环境中调用 npm ci 而不是 npm install
    --force-local #此标志会导致引导命令始终对本地依赖项进行符号链接,而不管匹配的版本范围如何
    -

    info 本地环境信息

    +

    info 本地环境信息

    $ lerna info
     
     lerna notice cli v6.0.0
    @@ -585,7 +585,7 @@
       npmPackages:
         lerna: ^6.0.0 => 6.0.0
     
    -

    过滤选项

    +

    过滤选项

    $ lerna exec --scope my-component -- ls -la
     $ lerna run --scope toolbar-* test
    @@ -609,7 +609,7 @@
     # 所有匹配 “package-util-*” 的包都将被忽略,除非它们是
     # 依赖于名称与 “package-*” 匹配的包
     
    -

    选项

    +

    选项

    @@ -652,7 +652,7 @@
    :-:-
    --scope <glob> #仅包括名称与给定 glob 匹配的包
    --ignore <glob> #排除名称与给定 glob 匹配的包
    --no-private #排除私有包
    --since [ref] #仅包括自指定 ref 以来已更改的包
    --exclude-dependents #使用 --since 运行命令时排除所有传递依赖项,覆盖默认的“changed”算法
    --include-dependents #无论 --scope--ignore--since 是什么,在运行命令时都包括所有传递依赖项
    --include-dependencies #无论 --scope--ignore--since # 是什么,在运行命令时都包括所有传递依赖项
    --include-merged-tags #使用 --since 运行命令时包括来自合并分支的标签
    -

    list

    +

    list

    列出本地程序包,也尊重所有可用的过滤选项

    # 与 lerna list 相同,它本身类似于 ls 命令
     lerna ls
    @@ -661,7 +661,7 @@
     # 相当于 lerna ls -la,显示所有包(包括私有包)
     lerna la
     
    -

    选项

    +

    选项

    @@ -700,7 +700,7 @@
    :-:-
    --json显示为 JSON #
    --ndjson换行符分隔 #
    -a,--all所有包 #
    -l,--long显示扩展信息 #
    -p,--parseable显示可解析的输出 #
    --toposort按拓扑排序 #
    --graphJSON 格式邻接依赖关系图 #
    -

    changed

    +

    changed

    列出自上次标记版本以来已更改的本地软件包

    • lerna changed 支持 lerna ls 支持的所有选项
    • @@ -734,7 +734,7 @@
      :-:-
      --conventional-graduate#
      --force-publish#
      --ignore-changes#
      --include-merged-tags#
      -

    init

    +

    init

    创建新的 Lerna 仓库或将现有仓库升级到当前版本 Lerna

    • 如果 lerna 不存在,请将其添加到 package.json 中的 devDependency
    • @@ -774,7 +774,7 @@ "version": "0.0.0" }
      -

    import

    +

    import

    将一个包导入到带有提交历史的 monorepo

    # 开始使用 Lerna
     $ git init lerna-repo && cd lerna-repo
    @@ -812,7 +812,7 @@
     
     
    :-:-
    --flatten #当导入具有冲突的合并提交的存储库时,导入命令将无法尝试应用所有提交
    --dest #导入仓库时,可以通过 lerna.json 中列出的目录来指定目标目录
    --preserve-commit #每个 git 提交都有一个作者和一个提交者
    -

    add

    +

    add

    将依赖项添加到匹配的包

    $ lerna add <package>[@version] \
    @@ -864,28 +864,28 @@
     # 在所有模块中安装 babel-core
     $ lerna add babel-core
     
    -

    diff

    +

    diff

    比较自上次发布以来的所有包或单个包

    $ lerna diff [package]
     $ lerna diff
     $ lerna diff package-name # 区分一个特定的包
     

    类似于 lerna changed,此命令运行 git diff

    -

    clean

    +

    clean

    从所有包中删除 node_modules 目录

    $ lerna clean
     

    接受所有过滤选项lerna clean 不会从根 node_modules 目录中删除模块,即使您启用了 --hoist 选项

    -

    add-caching

    +

    add-caching

    运行设置基本缓存选项的向导

    $ lerna add-caching
     
    -
    +

    将所有相互依赖的包符号链接在一起

    $ lerna link
     

    --force-local 设置会导致链接命令始终对本地依赖项进行符号链接

    -

    repair

    +

    repair

    更新配置文件以匹配当前安装的 lerna 版本

    $ npm i lerna@latest
     $ lerna repair
    @@ -904,8 +904,6 @@ function anchorPoint() {
       Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active'))
       if (elm?.tagName === 'H3') {
         elm?.parentElement?.parentElement?.classList.add('active');
    -    const box = elm?.parentElement?.parentElement;
    -    console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap'))
       }
     }
     anchorPoint();
    @@ -916,7 +914,6 @@ function updateAnchor(element) {
         tocanchor.classList.remove('is-active-link');
       });
       const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`);
    -  console.log('anchor', anchor)
       if (anchor) {
         anchor.classList.add('is-active-link');
       }
    diff --git a/docs/lessjs.html b/docs/lessjs.html
    index 101160df..18aaa1d4 100644
    --- a/docs/lessjs.html
    +++ b/docs/lessjs.html
    @@ -34,13 +34,13 @@
         document.documentElement.setAttribute('data-color-mode', mode);
         localStorage.setItem(LOCAL_NANE, mode);
       }
    -

    +

    Less 备忘清单

    本备忘单旨在快速理解 Less 所涉及的主要概念,显示了它的常用方法使用清单。

    入门

    -

    入门

    +

    介绍

    Less(Leaner Style Sheets 的缩写)是一门向后兼容的 CSS 扩展语言

    • CSS 备忘清单 (jaywcjlove.github.io)
    • @@ -55,7 +55,7 @@ <script src="https://cdn.jsdelivr.net/npm/less@4" ></script>
      -

    变量(Variables)

    +

    变量(Variables)

    @width: 10px;
     @height: @width + 10px;
     
    @@ -71,7 +71,7 @@
     }
     

    另见: 变量的更多信息

    -

    混合(Mixins)

    +

    混合(Mixins)

    .bordered {
       border-top: dotted 1px black;
       border-bottom: solid 2px black;
    @@ -88,7 +88,7 @@
     }
     

    另见: 混合(Mixin)的更多信息

    -

    嵌套(Nesting)

    +

    嵌套(Nesting)

    #header {
       color: black;
     }
    @@ -110,7 +110,7 @@
       }
     }
     
    -

    父选择器 &

    +

    父选择器 &

    .button {
       color: blue;
       &-ok {
    @@ -132,7 +132,7 @@
       color: green;
     }
     
    -

    @规则嵌套和冒泡

    +

    @规则嵌套和冒泡

    .component {
       width: 300px;
    @@ -168,7 +168,7 @@
     }
     
    -

    运算(Operations)

    +

    运算(Operations)

    算术运算符 +-*/ 对任何数字、颜色或变量进行运算

    @conversion-1: 5cm + 10mm; // 结果是 6cm
    @@ -188,13 +188,13 @@
     background-color: (#FFFFFF / 16);
     // 结果是 #101010
     
    -

    calc() 特例

    +

    calc() 特例

    为了与 CSS 保持兼容,calc() 并不对数学表达式进行计算,但是在嵌套函数中会计算变量和数学公式的值

    @var: 50vh/2;
     width: calc(50% + (@var - 20px));
     // 结果是 calc(50% + (25vh - 20px))
     
    -

    转义(Escaping)

    +

    转义(Escaping)

    @min768: ~"(min-width: 768px)";
     .element {
    @@ -219,7 +219,7 @@
     }
     

    在 Less 3.5+ 版本中,许多以前需要“引号转义”的情况就不再需要了

    -

    函数(Functions)

    +

    函数(Functions)

    @base: #f04615;
     @width: 0.5;
     
    @@ -231,7 +231,7 @@
     }
     

    Less 内置了多种函数用于转换颜色、处理字符串、算术运算等

    -

    命名空间和访问符

    +

    命名空间和访问符

    #bundle() {
       .button {
         display: block;
    @@ -252,7 +252,7 @@
       // 还可以书写为 #bundle > .button 形式
     }
     
    -

    映射(Maps)

    +

    映射(Maps)

    #colors() {
       primary: blue;
       secondary: green;
    @@ -270,7 +270,7 @@
     }
     

    另见:映射(Maps)

    -

    作用域(Scope)

    +

    作用域(Scope)

    @var: red;
     
     #page {
    @@ -291,7 +291,7 @@
     }
     

    另见:懒加载

    -

    注释(Comments)

    +

    注释(Comments)

    /* 一个块注释
      * style comment! */
     @var: red;
    @@ -300,12 +300,12 @@
     @var: white;
     

    块注释和行注释都可以使用

    -

    导入(Importing)

    +

    导入(Importing)

    @import "library"; // library.less
     @import "typo.css";
     

    另见:导入(Importing)的知识

    -

    Extend

    +

    Extend

    nav ul {
       &:extend(.inline);
    @@ -324,8 +324,8 @@
       color: red;
     }
     
    -

    函数

    -

    逻辑函数 if & boolean

    +

    函数

    +

    逻辑函数 if & boolean

    @bg: black;
     @bg-light: boolean(luma(@bg) > 50%);
     
    @@ -340,7 +340,7 @@
       color: white;
     }
     
    -

    字符串函数

    +

    字符串函数

    @@ -373,7 +373,7 @@ format-a-d: %("repetitions: %a file: %d", 1 + 2, "directory/file.less"); // 输出 format-a-d: "repetitions: 3 file: "directory/file.less""; -

    替换字符串 replace

    +

    替换字符串 replace

    replace("Hello, Mars?", "Mars\?", "Earth!");
     replace("One + one = 4", "one", "2", "gi");
    @@ -386,7 +386,7 @@
     'This is a new string.';
     bar-2;
     
    -

    length

    +

    length

    @list: "banana", "tomato", "potato", "peach";
     n: length(@list);
     
    @@ -394,7 +394,7 @@
    n: 4;
     

    返回值列表中的元素数

    -

    extract

    +

    extract

    @list: apple, pear, coconut, orange;
     value: extract(@list, 3);
     
    @@ -402,14 +402,14 @@
    value: coconut;
     

    返回列表中指定位置的值

    -

    range

    +

    range

    value: range(4);
     // 输出 value: 1 2 3 4;
     value: range(10px, 30px, 10);
     // 输出 value: 10px 20px 30px;
     

    生成跨越一系列值的列表

    -

    each

    +

    each

    @selectors: blue, green, red;
     
    @@ -450,7 +450,7 @@
     }
     

    将规则集的评估绑定到列表的每个成员

    -

    each()

    +

    each()

    set-2() {
       one: blue;
       two: green;
    @@ -470,7 +470,7 @@
       three-3: red;
     }
     
    -

    使用 rangeeach 创建一个 for 循环

    +

    使用 rangeeach 创建一个 for 循环

    each(range(4), {
       .col-@{value} {
         height: (@value * 50px);
    @@ -491,7 +491,7 @@
       height: 200px;
     }
     
    -

    数学函数

    +

    数学函数

    @@ -572,7 +572,7 @@
    :-:-
    ceil(2.4) (输出 3)向上舍入到下一个最大整数 #
    floor(2.6) (输出 2)向下舍入到下一个最小整数 #
    percentage(0.5) (输出 50%)将浮点数转换为百分比字符串 #
    round(1.67) (输出 2)应用舍入 #
    sqrt(25cm) (输出 5cm)计算数字的平方根。保持单位不变 #
    abs(25cm) (输出 25cm)计算数字的绝对值。 保持单位不变 #
    sin(1deg) (输出 0.01745240643728351)计算正弦函数 #
    asin(-0.8414709848078965) (输出 -1rad)计算反正弦(正弦的倒数)函数 #
    cos(1deg) (输出 0.9998476951563913)计算余弦函数 #
    acos(0.5403023058681398) (输出 1rad)计算反余弦(余弦的倒数)函数 #
    tan(1deg) (输出 0.017455064928217585)计算正切函数 #
    atan(-1.5574077246549023) (输出 -1rad)计算反正切(正切的倒数)函数 #
    pi() (输出 3.141592653589793)π (pi) #
    pow(0cm, 0px) (输出 1cm)返回第一个参数的第二个参数次幂的值 #
    mod(11cm, 6px) (输出 5cm)返回第一个参数模数第二个参数的值 #
    min(5, 10) (输出 5)返回一个或多个值中的最小值 #
    max(5, 10) (输出 10)返回一个或多个值中的最大值 #
    -

    颜色定义函数

    +

    颜色定义函数

    @@ -611,7 +611,7 @@
    :-:-
    rgb#
    rgba#
    argb#
    hsl#
    hsla#
    hsv#
    hsva#
    -

    类型函数

    +

    类型函数

    @@ -666,7 +666,7 @@
    :-:-
    isnumber值是否为数字 #
    isstring值是否为字符串 #
    iscolor值是否为颜色值 #
    iskeyword值是否为 keyword #
    isurl值是否为 url 值 #
    ispixel值是否为像素值 #
    isem值是否为 em 值 #
    ispercentage值是否为 百分百 值 #
    isunit值是是否为指定单位的数字 #
    isruleset值是否为规则集 #
    isdefined值是否为 defined #
    -

    杂项函数

    +

    杂项函数

    @@ -717,7 +717,7 @@
    :-:-
    color#
    image-size#
    image-width#
    image-height#
    convert#
    data-uri#
    default#
    unit#
    get-unit#
    svg-gradient#
    -

    颜色通道函数

    +

    颜色通道函数

    @@ -776,7 +776,7 @@
    :-:-
    hue#
    saturation#
    lightness#
    hsvhue#
    hsvsaturation#
    hsvvalue#
    red#
    green#
    blue#
    alpha#
    luma#
    luminance#
    -

    色彩运算函数

    +

    色彩运算函数

    @@ -839,7 +839,7 @@
    :-:-
    saturate#
    desaturate#
    lighten#
    darken#
    fadein#
    fadeout#
    fade#
    spin#
    mix#
    tint#
    shade#
    greyscale#
    contrast#
    -

    颜色混合功能

    +

    颜色混合功能

    @@ -886,7 +886,7 @@
    :-:-
    multiply#
    screen#
    overlay#
    softlight#
    hardlight#
    difference#
    exclusion#
    average#
    negation#
    -

    另见

    +

    另见

    • Less.js 官网 (lesscss.org)
    • CSS 备忘清单 (jaywcjlove.github.io)
    • @@ -906,8 +906,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -918,7 +916,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/lsof.html b/docs/lsof.html index 97eb9761..8cdfac8f 100644 --- a/docs/lsof.html +++ b/docs/lsof.html @@ -34,19 +34,19 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    Lsof 备忘清单

    这个快速参考备忘单提供了使用 lsof 命令的各种方法。

    入门

    -

    入门

    +

    介绍

    lsof 表示 List Open Files 用于查找哪个进程打开了哪些文件

    $ lsof
     $ sudo lsof -u root
     
    -

    特定于端口

    +

    特定于端口

    $ lsof -i :8080
     $ lsof -i :80 -i :22
     $ lsof -i TCP:22
    @@ -54,38 +54,38 @@
     $ lsof -i UDP
     $ lsof -i @192.168.1.5
     
    -

    特定于进程

    +

    特定于进程

    $ lsof -c mysql
     $ lsof -c java
     $ lsof -c ssh
     $ lsof -c nginx
     $ lsof -c ssh -c httpd
     
    -

    特定于用户

    +

    特定于用户

    $ lsof -u www-data
     $ lsof -u www-data -u ubuntu
     $ lsof -i -u ^root # 特定用户除外
     
    -

    特定于网络

    +

    特定于网络

    $ lsof -i 4   # 仅 IPv4
     $ lsof -i 6   # 仅 IPv6
     
    -

    特定的PID

    +

    特定的PID

    $ lsof -p 1753
     $ lsof -p ^3  # 除了某些pid
     
    -

    特定文件名

    +

    特定文件名

    $ lsof /var/log/messages
     $ lsof /etc/passwd
     
    -

    特定目录

    +

    特定目录

    $ lsof +D /var/log # 在目录内
     
    -

    Kill

    +

    Kill

    $ kill -9 `lsof -t -u apache`
     $ kill -9 $(lsof -t -i :8080)
     
    -

    参数

    +

    参数

    -a        # 列出打开文件存在的进程;
     -c<进程名> # 列出指定进程所打开的文件;
    @@ -100,17 +100,17 @@
     -h        # 显示帮助信息;
     -v        # 显示版本信息
     
    -

    列出指定进程号所打开的文件

    +

    列出指定进程号所打开的文件

    lsof -p $pid
     
    -

    获取端口对应的进程 ID=>pid

    +

    获取端口对应的进程 ID=>pid

    lsof -i:9981 -P -t -sTCP:LISTEN
     
    -

    列出打开文件的进程:

    +

    列出打开文件的进程:

    lsof $filename
     
    -

    示例

    -

    示例

    +

    示例

    +

    示例

    $ lsof
     command     PID USER   FD      type      DEVICE     SIZE       NODE NAME
    @@ -127,7 +127,7 @@
     migration     2 root  rtd       DIR         8,2     4096          2 /
     migration     2 root  txt   unknown                                 /proc/2/exe
     
    -

    文件描述符列表(FD)

    +

    文件描述符列表(FD)

    @@ -208,7 +208,7 @@
    :-:-
    cwd表示当前工作目录,即:应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改
    txt该类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序
    lnn库引用 (AIX);
    erFD 信息错误(参见名称栏)
    jldjail 目录 (FreeBSD);
    ltx共享库文本(代码和数据)
    mxx十六进制内存映射类型编号xx
    m86DOS合并映射文件
    mem内存映射文件
    mmap内存映射设备
    pd父目录
    rtd根目录
    tr内核跟踪文件 (OpenBSD)
    v86VP/ix 映射文件
    0表示标准输出
    1表示标准输入
    2表示标准错误
    -

    示例列信息

    +

    示例列信息

    @@ -243,7 +243,7 @@
    :-:-
    COMMAND进程的名称
    PID进程标识符
    PPID父进程标识符(需要指定-R参数)
    USER进程所有者
    PGID进程所属组
    FD文件描述符,应用程序通过它识别该文件
    -

    标准输出/输入/错误文件状态模式(FD)

    +

    标准输出/输入/错误文件状态模式(FD)

    @@ -275,7 +275,7 @@
    :-:-
    u表示该文件被打开并处于读取/写入模式
    r表示该文件被打开并处于只读模式
    w表示该文件被打开并处于写入模式
    空格表示该文件的状态模式为 unknow,且没有锁定
    -表示该文件的状态模式为 unknow,且被锁定

    一般在标准输出/输入/错误后还跟着文件状态模式

    -

    文件状态模锁 (FD)

    +

    文件状态模锁 (FD)

    @@ -327,7 +327,7 @@
    :-:-
    N对于未知类型的Solaris NFS锁
    r用于部分文件的读取锁定
    R对整个文件进行读取锁定
    w对文件的一部分进行写锁定(文件的部分写锁)
    W对整个文件进行写锁定(整个文件的写锁)
    u用于任何长度的读写锁
    U对于未知类型的锁
    x对于文件部分的SCO OpenServer Xenix锁
    X对于整个文件的SCO OpenServer Xenix锁
    space如果没有锁

    文件状态模式后面,还跟着相关的锁

    -

    文件类型

    +

    文件类型

    @@ -382,7 +382,7 @@
    标识说明
    DIR表示目录
    CHR表示字符类型
    BLK块设备类型
    UNIXUNIX 域套接字
    FIFO先进先出 (FIFO) 队列
    IPv4网际协议 (IP) 套接字
    DEVICE指定磁盘的名称
    SIZE文件的大小
    NODE索引节点(文件在磁盘上的标识)
    NAME打开文件的确切名称
    REG常规文件
    -

    另见

    +

    另见

    @@ -399,8 +399,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -411,7 +409,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/markdown.html b/docs/markdown.html index 8ae451ed..a41b91fd 100644 --- a/docs/markdown.html +++ b/docs/markdown.html @@ -34,14 +34,14 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    Markdown 备忘清单

    这是 Markdown 语法的快速参考备忘单。

    Markdown 快速参考

    -

    Markdown 快速参考

    +

    标题 (atx 风格)

    # h1
     ## h2
     ### h3
    @@ -49,21 +49,21 @@
     ##### h5
     ###### h6
     
    -

    标题 (setext 风格)

    +

    标题 (setext 风格)

    Header 1
     ========
     
    Header 2
     --------
     
    -

    块引用

    +

    块引用

    > 这是一个
     > 块引用
     >
     > > 嵌套
     > > 块引用
     
    -

    无序列表

    +

    无序列表

    * Item 1
     * Item 2
    @@ -82,13 +82,13 @@
     
    - [ ] Checkbox off
     - [x] Checkbox on
     
    -

    有序列表

    +

    有序列表

    1. Item 1
     2. Item 2
         a. item 3a
         b. item 3b
     
    -

    链接

    +

    链接

    [link](http://google.com)
     
     [link][google]
    @@ -96,12 +96,12 @@
     
     <http://google.com>
     
    -

    强调

    +

    强调

    *斜体*    _斜体_    **粗体**   __粗体__
     
     `内联代码`  ~~删除~~
     
    -

    水平线

    +

    水平线

    连字符

    ---
    @@ -112,13 +112,13 @@
     

    下划线

    ___
     
    -

    换行

    +

    换行

    在当前行的结尾加 2 个空格··
     这行就会新起一行\
     反斜杠也可以换行
     

    尾部添加两个空格,或者添加 \ 反斜杠

    -

    代码

    +

    代码

    ```javascript
     console.log("This is a block code")
     ```
    @@ -129,10 +129,10 @@
     
        4 空格缩进做一个代码块
     
    -

    内联代码

    +

    内联代码

    `Inline code` 周围有反引号
     
    -

    表格

    +

    表格

    |     左栏   |     中间栏     |  右栏     |
     | ----------| ------------ | --------- |
     | 单元格 1   |   居中        |     $1600 |
    @@ -145,7 +145,7 @@
     单元格 2   | 单元格 3  |     $12
     

    Markdown 表格生成器:tableconvert.com

    -

    脚注 (Footnotes)

    +

    脚注 (Footnotes)

    这是一个简单的脚注[^1]。
     
     一个脚注也可以有多行[^2]。
    @@ -159,23 +159,23 @@
         推荐使用数字命名脚注,但文本更容易识别和链接。
         脚注使用了不同的语法,使用 4 个空格作为新行。
     
    -

    图片

    +

    图片

    ![图片名称](http://图片网址/images/logo.png)
     
     ![替代文字](url)
     
    -

    带链接的图片

    +

    带链接的图片

    [![GitHub Logo](/images/logo.png)](https://github.com/)
     
     [![替代文字](image_url)](link_url)
     
    -

    参考风格

    +

    参考风格

    ![替代文字][logo]
     
     [logo]: /images/logo.png "Logo Title"
     
    -

    反斜杠转义

    +

    反斜杠转义

    @@ -248,11 +248,11 @@
    字符转义描述
    \\\backslash 反斜杠
    `\`backtick 反引号
    *\*asterisk 星号
    _\_underscore 下划线
    {}\{}curly braces 花括号
    []\[]square brackets 方括号
    ()\()parentheses 圆括号
    #\#hash mark 哈希标记
    +\+plus sign 加号
    -\-minus sign (hyphen) 减号(连字符)
    .\.dot 点
    !\!exclamation mark 感叹号
    -

    行内 HTML 元素

    +

    行内 HTML 元素

    目前只支持部分段内 HTML 元素效果,包括 <kdb>, <b>, <i>, <em>, <sup>, <sub>, <br>
     
    -

    另见

    +

    另见

    @@ -269,8 +269,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -281,7 +279,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/mime.html b/docs/mime.html index f67bacb2..c7f28e4b 100644 --- a/docs/mime.html +++ b/docs/mime.html @@ -34,14 +34,14 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    MIME 类型 备忘清单

    此备忘单列出了一些常见的 Web MIME 类型。 您可以查看包含所有已注册 MIME 类型的 IANA/MIME 媒体类型注册表

    入门

    -

    入门

    +
    • MIME 类型注册表关联特定的文件扩展名和文件名模式
    • @@ -51,8 +51,8 @@
    • 对于 Internet 上的文件格式或格式内容
    -

    MIME 类型列表

    -

    常见的 MIME(媒体)类型

    +

    MIME 类型列表

    +

    常见的 MIME(媒体)类型

    @@ -421,7 +421,7 @@
    扩展名MIME 类型(内容类型)文件种类
    .aacaudio/aacAAC 音频
    .abwapplication/x-abiwordAbiWord 文档
    .arcapplication/x-freearc存档文档(嵌入多个文件)
    .avivideo/x-msvideoAVI: 音频视频交错
    .azwapplication/vnd.amazon.ebook亚马逊 Kindle 电子书格式
    .binapplication/octet-stream任何类型的二进制数据
    .bmpimage/bmpWindows OS/2 位图图形
    .bzapplication/x-bzipBZip 存档
    .bz2application/x-bzip2BZip2 存档
    .cshapplication/x-cshC-Shell 脚本
    .csstext/css级联样式表 (CSS)
    .csvtext/csv逗号分隔值 (CSV)
    .docapplication/msword微软 Word
    .docxapplication/vnd.openxmlformats-officedocument.wordprocessingml.document微软 Word (OpenXML)
    .eotapplication/vnd.ms-fontobjectMS 嵌入式 OpenType 字体
    .epubapplication/epub+zip电子出版物 (EPUB)
    .gzapplication/gzipGZip 压缩存档
    .gifimage/gif图形交换格式 (GIF)
    .htm .htmltext/html超文本标记语言 (HTML)
    .icoimage/vnd.microsoft.icon图标格式
    .icstext/calendariCalendar 格式
    .jarapplication/java-archiveJava 存档 (JAR)
    .jpeg .jpgimage/jpegJPEG 图像
    .jstext/javascriptJavaScript
    .jsonapplication/jsonJSON格式
    .jsonldapplication/ld+jsonJSON-LD 格式
    .mid .midiaudio/midi audio/x-midi乐器数字接口 (MIDI)
    .mjstext/javascriptJavaScript 模块
    .mp3audio/mpegMP3 音频
    .mpegvideo/mpegMPEG 视频
    .mpkgapplication/vnd.apple.installer+xmlApple 安装程序包
    .odpapplication/vnd.oasis.opendocument.presentationOpenDocument 演示文档
    .odsapplication/vnd.oasis.opendocument.spreadsheetOpenDocument 电子表格文档
    .odtapplication/vnd.oasis.opendocument.textOpenDocument 文本文档
    .ogaaudio/oggOGG 音频
    .ogvvideo/oggOGG 视频
    .ogxapplication/oggOGG
    .opusaudio/opusOpus 音频
    .otffont/otfOpenType 字体
    .pngimage/png便携式网络图形
    .pdfapplication/pdfAdobe 便携式文档格式 (PDF)
    .phpapplication/php超文本预处理器(个人主页)
    .pptapplication/vnd.ms-powerpoint微软PowerPoint
    .pptxapplication/vnd.openxmlformats-officedocument.presentationml.presentation微软 PowerPoint (OpenXML)
    .rarapplication/vnd.rarRAR 存档
    .rtfapplication/rtf富文本格式 (RTF)
    .shapplication/x-shBourne shell 脚本
    .svgimage/svg+xml可缩放矢量图形 (SVG)
    .swfapplication/x-shockwave-flash小型 Web 格式 (SWF) 或 Adobe Flash 文档
    .tarapplication/x-tarTape 存档 (TAR)
    .tif .tiffimage/tiff标记图像文件格式 (TIFF)
    .tsvideo/mp2tMPEG 传输流
    .ttffont/ttfTrueType 字体
    .txttext/plain文本,(通常为 ASCII 或 ISO 8859-n)
    .vsdapplication/vnd.visio微软 Visio
    .wavaudio/wavWaveform 音频格式
    .webaaudio/webmWEBM 音频
    .webmvideo/webmWEBM视频
    .webpimage/webpWEBP图像
    .wofffont/woffWeb 开放字体格式 (WOFF)
    .woff2font/woff2Web 开放字体格式 (WOFF)
    .xhtmlapplication/xhtml+xmlXHTML
    .xlsapplication/vnd.ms-excelMicrosoft Excel
    .xlsxapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheetMicrosoft Excel (OpenXML)
    .xmlapplication/xml 如果临时用户不可读(RFC 3023,第 3 节) text/xml,如果临时用户可读(RFC 3023,第 3 节)XML
    .xulapplication/vnd.mozilla.xul+xmlXUL
    .zipapplication/zipZIP 档案
    .3gpvideo/3gpp audio/3gpp 如果它不包含视频3GPP 音视频容器
    .3g2video/3gpp2 audio/3gpp2 如果它不包含视频3GPP2 音视频容器
    .7zapplication/x-7z-compressed7-zip 存档
    .markdown .mdtext/markdownMarkdown 文件
    -

    另见

    +

    另见

    • iana mime.types (iana.org)
    • apache mime.types (svn.apache.org)
    • @@ -440,8 +440,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -452,7 +450,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/mysql.html b/docs/mysql.html index 4f28b61d..7889f043 100644 --- a/docs/mysql.html +++ b/docs/mysql.html @@ -34,13 +34,13 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    MySQL 备忘清单

    本备忘单旨在快速理解 MySQL 所涉及的主要概念,提供了最常用的SQL语句,供您参考。

    入门

    -

    入门

    +

    介绍

    MySQL 为关系型数据库(Relational Database Management System),一个关系型数据库由一个或数个表格组成,如下所示的一个表格


    @@ -62,7 +62,7 @@
  • 值(value) 行的具体信息,每个值与该列数据类型相同
  • 键(key) 用来识别某个特定的人/物的方法,有唯一性
  • -

    登录MySQL

    +

    登录MySQL

    # 默认用户名<root>,-p 是密码,
     # ⚠️参数后面不需要空格
     mysql -h 127.0.0.1 -u <用户名> -p<密码>
    @@ -70,9 +70,9 @@
     mysql -h <host> -P <端口号> -u <user> -p [db_name]
     mysql -h <host> -u <user> -p [db_name]
     
    -

    常用的

    +

    常用的

    -

    数据库 Database

    +

    数据库 Database

    @@ -103,7 +103,7 @@
    :-:-
    CREATE DATABASE db ;创建数据库
    SHOW DATABASES;列出数据库
    USE db;切换到数据库
    CONNECT db ;切换到数据库
    DROP DATABASE db;删除数据库
    -

    表 Table

    +

    表 Table

    @@ -138,7 +138,7 @@
    :-:-
    SHOW TABLES;列出当前数据库的表
    SHOW FIELDS FROM t;表的列表字段
    DESC t;显示表格结构
    SHOW CREATE TABLE t;显示创建表sql
    TRUNCATE TABLE t;删除表中的所有数据
    DROP TABLE t;删除表格
    -

    Proccess

    +

    Proccess

    @@ -157,7 +157,7 @@
    :-:-
    show processlist;列出进程
    kill pid;杀死进程
    -

    查看 MySQL 信息

    +

    查看 MySQL 信息

    # 显示当前mysql的version的各种信息
     mysql> status;
     # 显示当前mysql的version信息
    @@ -165,11 +165,11 @@
     # 查看 MySQL 端口号
     mysql> show global variables like 'port';
     
    -

    退出MySQL会话

    +

    退出MySQL会话

    mysql> exit 
     

    退出 quit;\q; 一样的效果

    -

    备份

    +

    备份

    创建备份

    mysqldump -u user -p db_name > db.sql
     
    @@ -180,8 +180,8 @@

    恢复备份

    mysql -u user -p db_name < db.sql
     
    -

    MySQL 示例

    -

    管理表格

    +

    MySQL 示例

    +

    管理表格

    创建一个包含三列的新表

    CREATE TABLE t (
         id    INT,
    @@ -214,7 +214,7 @@
     

    删除表中的所有数据

    TRUNCATE TABLE t;
     
    -

    从表中查询数据

    +

    从表中查询数据

    从表中查询列c1、c2中的数据

    SELECT c1, c2 FROM t
     
    @@ -249,7 +249,7 @@ GROUP BY c1 HAVING condition
    -

    从多个表查询

    +

    从多个表查询

    内部连接 t1 和 t2

    SELECT c1, c2 
    @@ -316,7 +316,7 @@
     
    SELECT c1, c2 FROM t
     WHERE  c1 IS [NOT] NULL
     
    -

    使用 SQL 约束

    +

    使用 SQL 约束

    将c1和c2设置为主键

    CREATE TABLE t(
         c1 INT, c2 INT, c3 VARCHAR,
    @@ -348,7 +348,7 @@
          c2 VARCHAR NOT NULL
     );
     
    -

    修改数据

    +

    修改数据

    在表格中插入一行

    INSERT INTO t(column_list)
     VALUES(value_list);
    @@ -380,7 +380,7 @@
     
    DELETE FROM t
     WHERE condition;
     
    -

    管理视图

    +

    管理视图

    创建由c1和c2组成的新视图

    CREATE VIEW v(c1,c2) 
    @@ -411,14 +411,14 @@
     

    删除视图

    DROP VIEW view_name;
     
    -

    管理触发器

    +

    管理触发器

    创建或修改触发器

    CREATE OR MODIFY TRIGGER trigger_name
     WHEN EVENT
     ON table_name TRIGGER_TYPE
     EXECUTE stored_procedure;
     
    -

    WHEN

    +

    WHEN

    @@ -437,7 +437,7 @@
    :-:-
    BEFORE在事件发生前调用
    AFTER事件发生后调用
    -

    EVENT

    +

    EVENT

    @@ -460,7 +460,7 @@
    :-:-
    INSERT为INSERT调用
    UPDATE调用UPDATE
    DELETE调用DELETE
    -

    TRIGGER_TYPE

    +

    TRIGGER_TYPE

    @@ -479,7 +479,7 @@
    :-:-
    FOR EACH ROW-
    FOR EACH STATEMENT-
    -

    管理索引

    +

    管理索引

    在t表的c1和c2上创建索引

    CREATE INDEX idx_name 
     ON t(c1,c2);
    @@ -491,8 +491,8 @@
     

    删除索引

    DROP INDEX idx_name;
     
    -

    MySQL 数据类型

    -

    Strings

    +

    MySQL 数据类型

    +

    Strings

    @@ -547,7 +547,7 @@
    --
    CHARString (0 - 255)
    VARCHARString (0 - 255)
    TINYTEXTString (0 - 255)
    TEXTString (0 - 65535)
    BLOBString (0 - 65535)
    MEDIUMTEXTString (0 - 16777215)
    MEDIUMBLOBString (0 - 16777215)
    LONGTEXTString (0 - 429496­7295)
    LONGBLOBString (0 - 429496­7295)
    ENUMOne of preset options
    SETSelection of preset options
    -

    Date & time

    +

    Date & time

    @@ -578,7 +578,7 @@
    Data TypeFormat
    DATE yyyy-MM-dd
    TIME hh:mm:ss
    DATETIME yyyy-MM-dd hh:mm:ss
    TIMESTAMPyyyy-MM-dd hh:mm:ss
    YEAR yyyy
    -

    Numeric

    +

    Numeric

    @@ -621,7 +621,7 @@
    --
    TINYINT xInteger (-128 to 127)
    SMALLINT xInteger (-32768 to 32767)
    MEDIUMINT xInteger (-8388608 to 8388607)
    INT xInteger (-2147­483648 to 214748­3647)
    BIGINT xInteger (-9223­372­036­854­775808 to 922337­203­685­477­5807)
    FLOATDecimal (precise to 23 digits)
    DOUBLEDecimal (24 to 53 digits)
    DECIMAL"­DOU­BLE­" stored as string
    -

    另见

    +

    另见

    • SQL 基础教程 (w3school.com.cn)
    • SQL 语句教程 (1keydata.com)
    • @@ -640,8 +640,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -652,7 +650,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/netcat.html b/docs/netcat.html index 1c098ac4..060902d0 100644 --- a/docs/netcat.html +++ b/docs/netcat.html @@ -34,15 +34,15 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    Netcat 备忘清单

    该备忘单提供了在 Linux 和 Unix 上使用 Netcat 的各种方法。

    入门

    -

    用法

    +

    用法

    连接到位于任何地方的主机

    $ nc [options] [host] [port]
    @@ -50,7 +50,7 @@
     

    监听传入连接

    $ nc -lp port [host] [port]
     
    -

    选项示例

    +

    选项示例

    @@ -118,7 +118,7 @@
    选项示例说明
    -hnc -h帮助
    -znc -z 192.168.1.9 1-100端口扫描主机或 IP 地址
    -vnc -zv 192.168.1.9 1-100提供详细输出
    -nnc -zn 192.168.1.9 1-100通过禁用 DNS 解析进行快速扫描
    -lnc -lp 8000TCP 侦听模式 (用于入站连接)
    -wnc -w 180 192.168.1.9 8000定义超时值
    -knc -kl 8000断线后继续收听
    -unc -u 192.168.1.9 8000使用 UDP 而不是 TCP
    -qnc -q 1 192.168.1.9 8000客户在 EOF 后熬夜
    -4nc -4 -l 8000仅限 IPv4
    -6nc -6 -l 8000仅限 IPv6
    -

    聊天客户端-服务器

    +

    聊天客户端-服务器

    服务器 Server (192.168.1.9)

    $ nc -lv 8000
    @@ -126,8 +126,8 @@
     

    客户端 Client

    $ nc 192.168.1.9 8000
     
    -

    Netcat 示例

    -
    +

    Netcat 示例

    +
    $ nc website.com 80
     GET index.html HTTP/1.1
     HEAD / HTTP/1.1
    @@ -135,21 +135,21 @@
     

    或者

    echo "" | nc -zv -wl 192.168.1.1 801-805
     
    -

    端口扫描

    +

    端口扫描

    扫描 2125 之间的端口

    $ nc -zvn 192.168.1.1 21-25
     

    扫描端口 2233068080

    $ nc -zvn 192.168.1.1 22 3306 8080
     
    -

    代理和端口转发

    +

    代理和端口转发

    $ nc -lp 8001 -c "nc 127.0.0.1 8000"
     

    或者

    $ nc -l 8001 | nc 127.0.0.1 8000
     

    创建从一个本地端口到另一个本地端口的隧道

    -

    下载文件

    +

    下载文件

    服务器 Server (192.168.1.9)

    $ nc -lv 8000 < file.txt
     
    @@ -157,7 +157,7 @@
    $ nc -nv 192.168.1.9 8000 > file.txt
     

    假设您想将文件 file.txt 从服务器 A 传输到客户端 B。

    -

    上传文件

    +

    上传文件

    服务器 Server (192.168.1.9)

    $ nc -lv 8000 > file.txt
     
    @@ -165,7 +165,7 @@
    $ nc 192.168.1.9 8000 < file.txt
     

    假设您想将文件 file.txt 从客户端 B 传输到服务器 A

    -

    目录传输

    +

    目录传输

    服务器 Server (192.168.1.9)

    $ tar -cvf – dir_name | nc -l 8000
     
    @@ -173,7 +173,7 @@
    $ nc -n 192.168.1.9 8000 | tar -xvf -
     

    假设您想通过网络将目录从 A 传输到 B

    -

    加密传输

    +

    加密传输

    服务器 Server (192.168.1.9)

    $ nc -l 8000 | openssl enc -d -des3 -pass pass:password > file.txt
    @@ -182,7 +182,7 @@
     
    $ openssl enc -des3 -pass pass:password | nc 192.168.1.9 8000
     

    在通过网络传输之前加密数据

    -

    克隆

    +

    克隆

    服务器 Server (192.168.1.9)

    $ dd if=/dev/sda | nc -l 8000
     
    @@ -190,7 +190,7 @@
    $ nc -n 192.168.1.9 8000 | dd of=/dev/sda
     

    克隆 linux PC 非常简单。假设你的系统盘是 /dev/sda

    -

    视频流

    +

    视频流

    服务器 Server (192.168.1.9)

    $ cat video.avi | nc -l 8000
     
    @@ -198,7 +198,7 @@
    $ nc 192.168.1.9 8000 | mplayer -vo x11 -cache 3000 -
     

    使用 netcat 流式传输视频

    -

    远程 shell

    +

    远程 shell

    服务器 Server (192.168.1.9)

    $ nc -lv 8000 -e /bin/bash
     
    @@ -206,7 +206,7 @@
    $ nc 192.168.1.9 8000
     

    我们已经使用 telnetssh 使用远程 Shell,但是如果它们没有安装并且我们没有安装它们的权限,那么我们也可以使用 netcat 创建远程 shell

    -

    逆转 shell

    +

    逆转 shell

    服务器 Server (192.168.1.9)

    $ nc -lv 8000
     
    @@ -227,8 +227,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -239,7 +237,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/netstat.html b/docs/netstat.html index 4cfc0206..a9455ae1 100644 --- a/docs/netstat.html +++ b/docs/netstat.html @@ -34,7 +34,7 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    @@ -45,15 +45,15 @@

    此快速参考备忘单提供了各种使用 netstat 命令的方法

    入门

    -

    入门

    +

    入门实例

    端口 80 上的所有连接

    $ netstat -anp | grep :80
     

    网络统计帮助

    $ netstat -h
     
    -

    监听

    +

    监听

    @@ -92,7 +92,7 @@
    选项说明
    netstat -ltunp所有监听端口
    netstat -ltn监听 TCP 端口
    netstat -lun监听 UDP 端口
    netstat -lx监听 Unix 端口
    netstat -lt仅列出侦听 TCP 端口
    netstat -lu仅列出侦听 UDP 端口
    netstat -l列出所有监听条件
    -

    连接

    +

    连接

    @@ -158,7 +158,7 @@
    选项说明
    netstat活动连接
    netstat -a所有连接
    netstat -at所有 TCP 连接
    netstat -au所有 UDP 连接
    netstat -ant显示没有反向 DNS 查找的 IP 地址
    netstat -tnl监听 TCP 端口
    netstat -unl监听 UDP 端口
    -

    网络

    +

    网络

    @@ -185,7 +185,7 @@
    选项说明
    netstat -i显示网络接口
    netstat -ie显示网络接口扩展信息
    netstat -n仅显示 IP 地址
    netstat -F尽可能显示 IP 地址的域名
    -

    路由

    +

    路由

    @@ -204,7 +204,7 @@
    选项说明
    netstat -r显示路由表
    netstat -rn显示路由表,不解析主机
    -

    统计数据

    +

    统计数据

    @@ -248,52 +248,52 @@
    选项说明
    netstat -s显示统计信息
    netstat -st显示 TCP 统计信息
    netstat -su显示 UDP 统计信息
    netstat -ltpe使用进程信息和扩展信息显示 TCP 的侦听连接
    netstat -tp显示带有 PID 编号的服务名称
    sudo netstat -nlpt列出进程名称/PID 和用户 ID
    netstat -nlptue所有带有 PID 和扩展信息的侦听端口
    netstat -M显示伪装的连接
    -

    显示没有域名的 TCP 连接

    +

    显示没有域名的 TCP 连接

    $ netstat --tcp --numeric
     
    -

    显示活动/已建立的连接

    +

    显示活动/已建立的连接

    $ netstat -atnp | grep ESTA
     
    -

    获取活动连接的连续列表

    +

    获取活动连接的连续列表

    $ watch -d -n0 "netstat -atnp | grep ESTA"
     
    -

    显示到特定端口的所有打开连接

    +

    显示到特定端口的所有打开连接

    $ netstat -anp | grep":"
     

    插入端口号(上图)代替冒号 :

    -

    检查服务是否正在运行

    +

    检查服务是否正在运行

    $ sudo netstat -aple | grep ntp
     

    你可以用httpsmtp代替ntp

    -

    Netstat – 安全命令

    -

    显示具有大量连接的 IP

    +

    Netstat – 安全命令

    +

    显示具有大量连接的 IP

    $ netstat -tn 2>/dev/null | grep :80 | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head
     
    -

    连接到端口 80 的 IP 地址

    +

    连接到端口 80 的 IP 地址

    $ netstat -tn 2>/dev/null | grep ':80 ' | awk '{print $5}' |sed -e 's/::ffff://' | cut -f1 -d: | sort | uniq -c | sort -rn | head
     
    -

    显示端口 80 上的活动连接数

    +

    显示端口 80 上的活动连接数

    $ netstat -an |grep :80 |wc -l
     
    -

    仅显示外部 IP 地址

    +

    仅显示外部 IP 地址

    $ netstat -antu | grep :80 | grep -v LISTEN | awk '{print $5}'
     
    -

    显示活动 SYNC_REC

    +

    显示活动 SYNC_REC

    以下命令将输出服务器上正在发生和正在发生的活动 SYNC_REC 数量。数量应该很低(小于 5)。如果该数字为两位数,则您可能正在遭受 DoS 攻击或被邮件轰炸。

    $ netstat -n -p|grep SYN_REC | wc -l
     
    -

    列出发送 SYN_REC 连接的唯一 IP 地址

    +

    列出发送 SYN_REC 连接的唯一 IP 地址

    $ netstat -n -p | grep SYN_REC | awk '{print $5}' | awk -F: '{print $1}'
     

    与上面的命令一样,该命令也列出了发送 SYN_REC 连接状态的节点的所有唯一 IP 地址

    -

    每个远程 IP 的连接数

    +

    每个远程 IP 的连接数

    $ netstat -antu | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -n
     
    @@ -302,16 +302,16 @@
    $ netstat -antu | awk '$5 ~ /[0-9]:/{split($5, a, ":"); ips[a[1]]++} END {for (ip in ips) print ips[ip], ip | "sort -k1 -nr"}'
     
    -

    检查开放端口(ipv4 和 ipv6)

    +

    检查开放端口(ipv4 和 ipv6)

    $ netstat -plntu
     
    -

    检查开放端口(ipv4 和 ipv6)

    +

    检查开放端口(ipv4 和 ipv6)

    $ netstat -plnt
     
    -

    每个 IP 的打开连接数

    +

    每个 IP 的打开连接数

    $ netstat -an | grep 80 | wc -l
     
    -

    活跃的互联网连接

    +

    活跃的互联网连接

    $ netstat -pnut -w | column -t -s $'\t'
     
    © 2022 Kenny Wang, All rights reserved.

    +

    NGINX 备忘清单

    这个 nginx 快速参考备忘单显示了它的常用命和配置使用清单。

    入门

    -

    入门

    +

    服务管理

    sudo systemctl status nginx # nginx当前状态
     sudo systemctl reload nginx # 重新加载 nginx
    @@ -54,11 +54,11 @@
     nginx -s quit   # 平滑关闭nginx
     nginx -V        # 查看nginx的安装状态,
     
    -

    Docker 安装

    +

    Docker 安装

    docker run --name some-nginx -v /some/content:/usr/share/nginx/html:ro -d nginx
     
    -

    简单代理

    +

    简单代理

    location / {
       proxy_pass http://127.0.0.1:3000;
    @@ -66,7 +66,7 @@
       proxy_set_header    Host $host;
     }
     
    -

    全局变量

    +

    全局变量

    @@ -171,7 +171,7 @@
    变量说明
    $args这个变量等于请求行中的参数,同 $query_string
    $remote_port客户端的端口
    $content_length请求头中的 Content-length 字段
    $remote_user已经经过 Auth Basic Module 验证的用户名
    $content_type请求头中的 Content-Type 字段
    $request_filename当前请求的文件路径,由 root 或alias指令与URI请求生成
    $document_root当前请求在 root 指令中指定的值
    $schemeHTTP方法(如http,https)
    $host请求主机头字段,否则为服务器名称
    $hostname主机名
    $http_user_agent客户端agent信息
    $http_cookie客户端cookie信息
    $server_protocol请求使用的协议,通常是HTTP/1.0HTTP/1.1
    $server_addr服务器地址,在完成一次系统调用后可以确定这个值
    $server_name服务器名称
    $server_port请求到达服务器的端口号
    $limit_rate这个变量可以限制连接速率
    $request_method客户端请求的动作,如 GET/POST
    $request_uri包含请求参数的原始URI,不包含主机名,如:/foo/bar.php?arg=baz
    $remote_addr客户端的IP地址
    $uri不带请求参数的当前URI,$uri不包含主机名,如 /foo/bar.html
    $document_uri$uri 相同
    $nginx_versionnginx 版本

    更多全局变量查看官方文档

    -

    监听端口

    +

    监听端口

    server {
       listen 80;      # 标准 HTTP 协议
       listen 443 ssl; # 标准 HTTPS 协议
    @@ -181,7 +181,7 @@
       listen [::]:80 ipv6only=on;
     }
     
    -

    域名 (server_name)

    +

    域名 (server_name)

    server {
       # 监听 example.com
       server_name example.com;
    @@ -195,20 +195,20 @@
       server_name "";
     }
     
    -

    负载均衡(简单实例)

    +

    负载均衡(简单实例)

    upstream node_js {
       server 0.0.0.0:3000;
       server 0.0.0.0:4000;
       server 127.155.142.421;
     }
     
    -

    负载均衡(权重)

    +

    负载均衡(权重)

    upstream test {
       server localhost:8080 weight=9;
       server localhost:8081 weight=1;
     }
     
    -

    upstream ip_hash

    +

    upstream ip_hash

    upstream test {
       ip_hash;
       server localhost:8080;
    @@ -216,7 +216,7 @@
     }
     

    解决负载均衡 session 的问题

    -

    upstream fair

    +

    upstream fair

    upstream backend {
       fair;
       server localhost:8080;
    @@ -224,7 +224,7 @@
     }
     

    响应时间短的优先分配

    -

    server 可选参数

    +

    server 可选参数

    @@ -265,7 +265,7 @@ server 127.0.0.1:83 weight=3 down; } -

    upstream url_hash

    +

    upstream url_hash

    upstream backend {
       hash $request_uri;
       hash_method crc32;
    @@ -274,7 +274,7 @@
     }
     

    按访问url的hash结果来分配请求

    -

    upstream keepalive

    +

    upstream keepalive

    upstream memcached_backend {
         server 127.0.0.1:11211;
         server 10.0.0.2:11211;
    @@ -282,7 +282,7 @@
     }
     

    激活缓存以连接到上游服务器

    -

    子文件夹中的代理

    +

    子文件夹中的代理

    location /folder/ { # / 很重要!
       proxy_pass http://127.0.0.1:3000/; # / 很重要!
    @@ -292,9 +292,9 @@
       proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
     }
     
    -

    反向代理

    +

    反向代理

    -

    基础

    +

    基础

    server {
       listen 80;
       server_name example.com;
    @@ -306,7 +306,7 @@
       }
     }
     
    -

    基础 + (upstream)

    +

    基础 + (upstream)

    upstream node_js {
       server 0.0.0.0:3000;
       # 其中 0.0.0.0:3000 是绑定在 
    @@ -322,7 +322,7 @@
       }
     }
     
    -

    升级连接(适用于支持 WebSockets 的应用程序)

    +

    升级连接(适用于支持 WebSockets 的应用程序)

    upstream node_js {
       server 0.0.0.0:3000;
     }
    @@ -343,7 +343,7 @@
     }
     

    适用于 Node.js、Streamlit、Jupyter 等

    -

    静态资源(传统 Web 服务器)

    +

    静态资源(传统 Web 服务器)

    server {
       listen 80;
    @@ -359,7 +359,7 @@
       }
     }
     
    -

    HTTPS 协议

    +

    HTTPS 协议

    大多数 SSL 选项取决于您的应用程序做什么或需要什么

    server {
    @@ -381,7 +381,7 @@
     }
     

    您可以使用 Let's Encrypt 轻松保护您的网站/应用程序。去 lets-encrypt 获取更多信息

    -

    重定向(301永久)

    +

    重定向(301永久)

    www.example.com 重定向到 example.com

    server {
    @@ -397,21 +397,21 @@
       return 301 https://example.com$request_uri;
     }
     
    -

    重定向(302临时)

    +

    重定向(302临时)

    server {
       listen 80;
       server_name yourdomain.com;
       return 302 http://otherdomain.com;
     }
     
    -

    永久重定向到 HTTPS 安全域

    +

    永久重定向到 HTTPS 安全域

    server {
       listen 80;
       server_name yourdomain.com;
       return 301 https://$host$request_uri;
     }
     
    -

    重定向参数

    +

    重定向参数

    @@ -430,15 +430,15 @@
    :-:-
    permanent永久性重定向。日志中的状态码为 301
    redirect临时重定向。日志中的状态码为 302
    -

    HTTP 请求端真实的IP

    +

    HTTP 请求端真实的IP

    location / {
       proxy_set_header X-Forwarded-For $remote_addr;
     }
     
    -

    示例

    +

    示例

    -

    websocket 的代理 keepalive

    +

    websocket 的代理 keepalive

    # Upstreams
     upstream backend {
    @@ -464,7 +464,7 @@
     }
     
    -

    Apache 的反向代理

    +

    Apache 的反向代理

    server {
       server_name domain.tld;
    @@ -492,7 +492,7 @@
     }
     
    -

    Gitlab 的反向代理

    +

    Gitlab 的反向代理

    server {
       #侦听的80端口
    @@ -518,7 +518,7 @@
       }
     }
     
    -

    重定向整个网站

    +

    重定向整个网站

    server {
       server_name old-site.com;
    @@ -526,7 +526,7 @@
     }
     
    -

    重定向单页

    +

    重定向单页

    server {
       location = /oldpage.html {
    @@ -535,14 +535,14 @@
     }
     
    -

    重定向整个子路径

    +

    重定向整个子路径

    location /old-site {
       rewrite ^/old-site/(.*) http://example.org/new-site/$1 permanent;
     }
     
    -

    负载均衡

    +

    负载均衡

    upstream example {
       ip_hash;
    @@ -565,7 +565,7 @@
       }
     }
     
    -

    内容缓存

    +

    内容缓存

    允许浏览器基本上永久地缓存静态内容。 Nginx 将为您设置 Expires 和 Cache-Control 头信息

    location /static {
    @@ -579,7 +579,7 @@
         expires -1;
     }
     
    -

    跨域问题

    +

    跨域问题

    server {
       listen 80;
    @@ -597,7 +597,7 @@
       } 
     }
     
    -

    重定向 URI 来解决跨域问题

    +

    重定向 URI 来解决跨域问题

    upstream test {
       server 127.0.0.1:8080;
    @@ -637,7 +637,7 @@
       } 
     }
     
    -

    跳转到带 www 的域上面

    +

    跳转到带 www 的域上面

    server {
       listen 80;
    @@ -656,7 +656,7 @@
       rewrite ^(.*) https://www.wangchujiang.com$1 permanent;
     }
     
    -

    代理转发

    +

    代理转发

    upstream server-api {
       # api 代理服务地址
    @@ -694,7 +694,7 @@
       }
     }
     
    -

    屏蔽 IP

    +

    屏蔽 IP

    可以放到 http, server, location, limit_except 语句块

    include blockip.conf;
    @@ -715,7 +715,7 @@
     allow 1.1.1.2;
     deny all; 
     
    -

    强制将 http 重定向到 https

    +

    强制将 http 重定向到 https

    server {
       listen       80;
    @@ -725,7 +725,7 @@
       server_tokens off;
     }
     
    -

    代理转发连接替换

    +

    代理转发连接替换

    location ^~/api/upload {
       rewrite ^/(.*)$ /wfs/v1/upload break;
    @@ -733,7 +733,7 @@
     }
     

    将地址 /api/upload 替换为 /wfs/v1/upload

    -

    爬虫 User-Agent 过滤

    +

    爬虫 User-Agent 过滤

    location / {
       if ($http_user_agent ~* "python|curl|java|wget|httpclient|okhttp") {
    @@ -743,7 +743,7 @@
       # ...
     }
     
    -

    图片防盗链

    +

    图片防盗链

    location ~* \.(gif|jpg|png|swf|flv)$ {
       root html;
    @@ -756,7 +756,7 @@
       }
     }
     
    -

    虚拟目录配置

    +

    虚拟目录配置

    location /img/ {
       alias /var/www/image/;
    @@ -769,7 +769,7 @@
     # 访问 /img/ 目录下的文件时,
     # 会去 /var/www/image/img/ 目录下找文件
     
    -

    屏蔽文件目录

    +

    屏蔽文件目录

    通用备份和归档文件

    location ~* "\.(old|orig|original|php#|php~|php_bak|save|swo|aspx?|tpl|sh|bash|bak?|cfg|cgi|dll|exe|git|hg|ini|jsp|log|mdb|out|sql|svn|swp|tar|rdf)$" {
    @@ -788,7 +788,7 @@
         deny all;
     }
     
    -

    防盗图配置

    +

    防盗图配置

    location ~ \/public\/(css|js|img)\/.*\.(js|css|gif|jpg|jpeg|png|bmp|swf) {
       valid_referers none blocked *.jslite.io;
    @@ -797,19 +797,19 @@
       }
     }
     
    -

    阻止常见攻击

    +

    阻止常见攻击

    -

    base64编码的网址

    +

    base64编码的网址

    location ~* "(base64_encode)(.*)(\()" {
         deny all;
     }
     
    -

    javascript eval() url

    +

    javascript eval() url

    location ~* "(eval\()" {
         deny all;
     }
     
    -

    Gzip 配置

    +

    Gzip 配置

    gzip  on;
     gzip_buffers 16 8k;
    @@ -827,7 +827,7 @@
         image/x-icon;
     gzip_disable  "msie6";
     
    -

    使网站不可索引

    +

    使网站不可索引

    add_header X-Robots-Tag "noindex";
     
    @@ -835,7 +835,7 @@
       return 200 "User-agent: *\nDisallow: /\n";
     }
     
    -

    另见

    +

    另见

    • Nginx 安装维护入门学习笔记 (jaywcjlove.github.io)
    • (virtubox.github.io)
    • @@ -853,8 +853,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -865,7 +863,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/npm.html b/docs/npm.html index 90003205..ada97bd6 100644 --- a/docs/npm.html +++ b/docs/npm.html @@ -34,16 +34,16 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    npm 备忘清单

    这个 npm 快速参考备忘单显示了它的常用命令使用清单。

    常用命令

    -

    包管理

    +

    包管理

    @@ -96,7 +96,7 @@
    命令描述
    npm inpm install的别名
    npm install安装 package.json 中的所有内容
    npm install --production安装 package.json 中的所有内容,除了 devDependecies
    npm install lodash安装一个包
    npm install --save-dev lodash安装为 devDependency
    npm install --save-exact lodash准确安装
    npm install @scope/package-name安装一个作用域的公共包
    npm install <package_name>@<tag>使用 dist-tags 安装包
    npm install -g <package_name>全局安装包
    npm uninstall <package_name>卸载包

    --save 是 npm@5 的默认值。 以前,使用不带 --savenpm install 不会更新 package.json。

    -

    安装名称

    +

    安装名称

    @@ -156,7 +156,7 @@
    命令描述
    npm i saxNPM 包
    npm i sax@latest指定标签“最新”
    npm i sax@3.0.0指定版本 3.0.0
    npm i sax@">=1 <2.0"指定版本范围
    npm i @org/sax范围内的 NPM 包
    npm i user/repoGitHub
    npm i user/repo#masterGitHub
    npm i github:user/repoGitHub
    npm i gitlab:user/repoGitLab
    npm i /path/to/repo绝对路径
    npm i ./archive.tgz压缩包
    npm i https://site.com/archive.tgz通过 HTTP 压缩包
    -

    清单

    +

    清单

    @@ -184,7 +184,7 @@
    命令描述
    npm list列出此软件中所有依赖项的已安装版本
    npm list -g --depth 0列出所有全局安装包的安装版本
    npm view列出此软件中所有依赖项的最新版本
    npm outdated仅列出此软件中已过时的依赖项
    -

    更新

    +

    更新

    @@ -215,7 +215,7 @@
    命令描述
    npm version <version>要更改 package.json 中的版本号
    npm update更新生产包
    npm update --dev更新开发包
    npm update -g更新全局包
    npm update lodash更新 lodash 包
    -

    杂项功能

    +

    杂项功能

    将某人添加为所有者

    npm owner add USERNAME PACKAGENAME
    @@ -232,7 +232,7 @@
     

    检查过时的包

    npm outdated [PACKAGE]
     
    -

    更改包裹可见性

    +

    更改包裹可见性

    将公共包设为私有

    npm access restricted <package-name>
     
    @@ -242,7 +242,7 @@

    授予私有包访问权限

    npm owner add <user> <your-package-name>
     
    -

    要将包转移到 npm 用户帐户

    +

    要将包转移到 npm 用户帐户

    npm owner add <their-username> <package-name>
     # 新维护者接受邀请
     npm owner rm <your-username> <package-name>
    @@ -250,20 +250,20 @@
     

    写入启用了双因素身份验证

    npm owner add <their-username> <package-name> --otp=123456
     
    -

    取消发布包

    +

    取消发布包

    npm unpublish <package-name> -f
     # 取消指定版本
     npm unpublish <package-name>@<version>
     

    注意:如果您取消发布整个包,则必须在 24 小时后才能发布该包的任何新版本。

    -

    发布包 npmjs.org

    +

    发布包 npmjs.org

    npm publish
     # 第一次需要指定公开参数
     npm publish --access public
     

    发布公开包,到 npmjs.org

    -

    配置

    -

    .npmrc

    +

    配置

    +

    .npmrc

    @@ -290,14 +290,14 @@
    :-:-
    /path/to/project/.npmrc每个项目的配置文件
    ~/.npmrc每个用户的配置文件
    $PREFIX/etc/npmrc全局配置文件
    /path/to/npm/npmrcnpm 内置配置文件
    -

    配置内容

    +

    配置内容

    # last modified: 01 Jan 2016
     ; Set a new registry for a scoped package
     @myscope:registry=https://registry.npmmirror.com
     

    注释使用 #, ; 放置到一行的开头。.npmrc 文件由指定此注释语法的 npm/ini 解析

    -

    .npmignore

    +

    .npmignore

    将下面内容存放到 .npmignore 文件中,放置在项目的根目录中。

    .git
     .svn
    @@ -309,7 +309,7 @@
     !logs/.gitkeep
     

    .npmignore 文件就像 .gitignore 一样工作。它不能覆盖 package.json#files 字段。

    -

    中国镜像站安装

    +

    中国镜像站安装

    # 临时使用
     $ npm install -g <package-name> --registry=https://registry.npmmirror.com
    @@ -327,13 +327,13 @@
     
    npm config set registry https://registry.npmmirror.com
     

    请参阅:npmmirror 中国镜像站

    -

    electronjs 镜像和缓存

    +

    electronjs 镜像和缓存

    ELECTRON_MIRROR="https://npmmirror.com/mirrors/electron/"
     ELECTRON_BUILDER_BINARIES_MIRROR=https://npmmirror.com/mirrors/electron-builder-binaries/
     ; ELECTRON_CUSTOM_DIR="{{ version }}"
     
    -

    身份验证相关配置

    +

    身份验证相关配置

    //registry.npmjs.org/:_authToken=MYTOKEN
     ; 将适用于 @myorg 和 @another
     //somewhere.com/:_authToken=MYTOKEN
    @@ -342,7 +342,7 @@
     ; 将适用于 @another
     //somewhere.com/another/:_authToken=MYTOKEN2
     
    -

    另见

    +

    另见

    • npm 仓库、网站和命令行界面的文档 (npmjs.com)
    • npmmirror 中国镜像站 (npmmirror.com)
    • @@ -360,8 +360,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -372,7 +370,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/package.json.html b/docs/package.json.html index f9f606ef..cf4fc456 100644 --- a/docs/package.json.html +++ b/docs/package.json.html @@ -34,20 +34,20 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    package.json 备忘清单

    这个快速参考备忘清单,显示了关于 package.json 文件中所需内容的全部内容。

    重要字段

    -

    重要字段

    +

    介绍

    本快速参考备忘清单是您需要了解的关于 package.json 文件中所需内容的全部内容。 它必须是实际的 JSON,而不仅仅是 JavaScript 对象字面量。

    -

    name

    +

    name

    {
       "name": "my-awesome-package"
     }
    @@ -59,13 +59,13 @@
     
  • 名称中不得包含大写字母
  • 必须仅使用URL安全字符
  • -

    version

    +

    version

    {
       "version": "1.0.0"
     }
     

    包的当前版本,严格遵循 Semantic Versioning 2.0.0 语义化版本规范。

    -

    Tips

    +

    Tips

    • 不要使用和 Node.js 核心模块相同的名字。
    • 不要在名字里包含 js 或者 node 单词。
    • @@ -74,7 +74,7 @@
    • name 和 version 字段一起用于创建唯一ID

    如果没有 nameversion 字段,您的包将无法安装

    -

    安装 name

    +

    安装 name

    yarn add [包名]
     # or
    @@ -88,14 +88,14 @@
     

    这是您的 的名称。 它在URL中使用,作为参数命令行,以及 node_modules 中的目录名。

    -

    信息类字段

    -

    description

    +

    信息类字段

    +

    description

    {
       "description": "我的包的概要简短描述"
     }
     

    帮助使用者了解包的功能的字符串,包管理器也会把这个字符串作为搜索关键词。

    -

    license

    +

    license

    所有包都应该指定许可证,以便让用户了解他们是在什么授权下使用此包,以及此包还有哪些附加限制。

    {
    @@ -106,14 +106,14 @@
     }
     

    鼓励使用开源 (OSI-approved) 许可证,除非你有特别的原因不用它。 如果你开发的包是你工作的一部分,最好和公司讨论后再做决定。

    -

    license字段必须是以下之一

    +

    license字段必须是以下之一

    • 如果你使用标准的许可证,需要一个有效地 SPDX 许可证标识
    • 如果你用多种标准许可证,需要有效的 SPDX 许可证表达式2.0语法表达式
    • 如果你使用非标准的许可证,一个 SEE LICENSE IN <文件名> 字符串指向你的包里顶级目录的一个 <文件名>。
    • 如果你不想在任何条款下授权其他人使用你的私有或未公开的包,一个 UNLICENSED 字符串。
    -

    keywords

    +

    keywords

    {
       "keywords": [
         "short", "relevant", "keywords"
    @@ -121,15 +121,15 @@
     }
     

    一个字符串数组,当在包管理器里搜索包时很有用。

    -

    链接类字段

    +

    链接类字段

    各种指向项目文档、issues 上报,以及代码托管网站的链接字段。

    -

    homepage

    +

    homepage

    {
       "homepage": "https://your-package.org"
     }
     

    是包的项目主页或者文档首页。

    -

    repository

    +

    repository

    {
       "repository": {
    @@ -142,14 +142,14 @@
     }
     

    包的实际代码所在的位置。

    -

    bugs

    +

    bugs

    {
       "bugs": "https://github.com/user/repo/issues"
     }
     

    问题反馈系统的 URL,或者是 email 地址之类的链接。用户通过该途径向你反馈问题。

    -

    项目维护类字段

    -

    author

    +

    项目维护类字段

    +

    author

    项目的维护者。

    {
       "author": {
    @@ -161,7 +161,7 @@
     }
     

    作者信息,一个人。

    -

    contributors

    +

    contributors

    {
       "contributors": [
    @@ -175,9 +175,9 @@
     }
     

    贡献者信息,可能很多人。

    -

    文件类信息

    +

    文件类信息

    指定包含在项目中的文件,以及项目的入口文件。

    -

    files

    +

    files

    {
       "files": [
         "filename.js",
    @@ -187,20 +187,20 @@
     }
     

    项目包含的文件,可以是单独的文件、整个文件夹,或者通配符匹配到的文件。

    -

    main

    +

    main

    {
       "main": "filename.js"
     }
     

    项目的入口文件。

    -

    man

    +

    man

    {
       "man": "./man/doc.1",
       "man": ["./man/doc.1", "./man/doc.2"]
     }
     

    项目的入口文件。

    -

    directories

    +

    directories

    {
       "directories": {
         "lib": "path/to/lib/",
    @@ -212,7 +212,7 @@
     }
     

    当你的包安装时,你可以指定确切的位置来放二进制文件、man pages、文档、例子等。

    -

    bin

    +

    bin

    {
       "bin": "bin.js",
       "bin": {
    @@ -222,15 +222,15 @@
     }
     

    随着项目一起被安装的可执行文件。

    -

    types

    +

    types

    这是一个只在 TypeScript 中生效的字段,如果您的包有一个 main.js 文件,您还需要在 package.json 文件中指明主声明文件。 将 types 属性设置为指向 bundled 的声明文件。 例如:

    {
       "types": "./lib/main.d.ts",
     }
     

    如果您的主声明文件名为 index.d.ts 并且位于包的根目录(index.js旁边),则不需要标记 types 属性,建议这样做。

    -

    打包包字段

    -

    esnext

    +

    打包包字段

    +

    esnext

    完整的提案在这里。 简短说明:

    module

    +

    module

    pkg.module 将指向具有 ES2015 模块语法的模块,但仅指向目标环境支持的语法功能。 完整的描述在这里

    {
       "module": "dist/my-package.esm.js"
     }
     

    支持:rollup, webpack

    -

    browser

    +

    browser

    "browser": {
         "module-a": "./shims/module-a.js",
         "./server/only.js": "./shims/client-only.js"
     }
     

    字段由模块作者提供,作为 JavaScript 包或组件工具的提示,用于打包模块以供客户端使用。 提案就在这里

    -

    任务类字段

    +

    任务类字段

    包里还可以包含一些可执行脚本或者其他配置信息。

    -

    scripts

    +

    scripts

    {
       "scripts": {
         "build-project": "node build-project.js"
    @@ -275,7 +275,7 @@
     

    有一些特殊的脚本名称。 如果定义了 preinstall 脚本,它会在包安装前被调用。 出于兼容性考虑,installpostinstallprepublish 脚本会在包完成安装后被调用。

    start 脚本的默认值为 node server.js

    参考文档:npm docs

    -

    特定的 scripts

    +

    特定的 scripts

    对于以下脚本,npm 支持 package.json 文件的 scripts 默认命令字段:

      @@ -299,7 +299,7 @@
    • preshrinkwrap, shrinkwrap, postshrinkwrap: 由 npm shrinkwrap 命令运行。

    参考文档:npm docs.

    -

    config

    +

    config

    {
       "config": {
         "port": "8080"
    @@ -314,9 +314,9 @@
     }
     

    配置中的键作为环境变量公开给脚本(scripts)。

    -

    依赖描述类字段

    +

    依赖描述类字段

    你的包很可能依赖其他包。你可以在你的 package.json 文件里指定那些依赖。

    -

    dependencies

    +

    dependencies

    这些是你的包的开发版和发布版都需要的依赖。

    {
    @@ -341,7 +341,7 @@
     

    你可以指定一个确切的版本、一个最小的版本 (比如 >=) 或者一个版本范围 (比如 >= ... <)。 包也可以指向本地的一个目录文件夹。 参考文档:npm docs.

    -

    workspaces

    +

    workspaces

    {
       "name": "my-workspaces-powered-project",
    @@ -365,7 +365,7 @@
        ┆   ╰┈┈ package.json
     

    参考文档:workspaces

    -

    devDependencies

    +

    devDependencies

    {
       "devDependencies": {
         "package-2": "^0.4.2"
    @@ -373,7 +373,7 @@
     }
     

    这些是只在你的包开发期间需要,但是生产环境不会被安装的包。

    -

    overrides

    +

    overrides

    {
       "overrides": {
         "foo": "1.0.0"
    @@ -381,7 +381,7 @@
     }
     

    对依赖项的依赖项进行特定更改,例如用已知的安全问题替换依赖项的版本

    -

    peerDependencies

    +

    peerDependencies

    {
       "peerDependencies": {
         "package-3": "^2.7.18"
    @@ -389,7 +389,7 @@
     }
     

    平行依赖允许你说明你的包和其他包版本的兼容性。添加可选设置以消除丢失的对等依赖性警告,#6671

    -

    optionalDependencies

    +

    optionalDependencies

    {
       "optionalDependencies": {
         "package-5": "^1.6.1"
    @@ -397,7 +397,7 @@
     }
     

    可选依赖可以用于你的包,但不是必需的。如果可选包没有找到,安装还可以继续。

    -

    bundledDependencies

    +

    bundledDependencies

    {
       "bundledDependencies": [
         "package-4"
    @@ -405,7 +405,7 @@
     }
     

    打包依赖是发布你的包时将会一起打包的一个包名数组。

    -

    peerDependenciesMeta

    +

    peerDependenciesMeta

    {
       "peerDependenciesMeta": {
         "node-sass": {
    @@ -421,9 +421,9 @@
     }
     

    它允许对等依赖项标记为可选

    -

    系统

    +

    系统

    你可以提供和你的包关联的系统级的信息,比如操作系统兼容性之类。

    -

    engines

    +

    engines

    指定使用你的包客户必须使用的版本,这将检查 process.versions 以及当前 yarn 版本。

    {
    @@ -436,28 +436,28 @@
     }
     

    此检查遵守正常的 semver 规则,但有一个例外。 它允许预发布版本匹配未明确指定预发布的 semver。 例如,1.4.0-rc.0 匹配 >=1.3.0,但它与典型的 semver 检查不匹配。

    -

    os

    +

    os

    {
       "os": ["darwin", "linux"],
       "os": ["!win32"]
     }
     

    此选项指定你的包的操作系统兼容性,它会检查 process.platform

    -

    cpu

    +

    cpu

    {
       "cpu": ["x64", "ia32"],
       "cpu": ["!arm", "!mips"]
     }
     

    使用这个选项指定你的包将只能在某些 CPU 体系架构上运行,这会检查 process.arch

    -

    发布

    -

    private

    +

    发布

    +

    private

    {
       "private": true
     }
     

    如果你不想你的包发布到包管理器(npm 或者 私有包管理),设置为 true

    -

    publishConfig

    +

    publishConfig

    这些配置值将在你的包发布时使用。比如,你可以给包打标签。

    {
    @@ -468,15 +468,15 @@
     

    这是一组将在发布时使用的配置值。 如果要设置标记,注册表或访问权限,则特别方便,以便确保给定的包未标记为 latest,发布到全局公共 registry 或默认情况下,作用域模块(@scoped)是私有的。

    可以覆盖任何配置值,但只有 tagregistryaccess 可能对于发布而言很重要,npm-config

    -

    Yarn

    -

    flat

    +

    Yarn

    +

    flat

    如果你的包只允许给定依赖的一个版本,你想强制和命令行上 yarn install --flat 相同的行为,把这个值设为 true

    {
       "flat": true
     }
     

    请注意,如果你的 package.json 包含 "flat": true 并且其它包依赖你的包 (比如你在构建一个库,而不是应用), 其它那些包也需要在它们的 package.json 加上 "flat": true,或者在命令行上用 yarn install --flat 安装。

    -

    resolutions

    +

    resolutions

    {
       "resolutions": {
    @@ -488,7 +488,7 @@
     

    允许您覆盖特定嵌套依赖项的版本。 有关完整规范,请参见选择性版本解析 RFC

    注意,yarn install --flat 命令将会自动在 package.json 文件里加入 resolutions 字段。

    -

    另见

    +

    另见

    @@ -505,8 +505,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -517,7 +515,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/quickreference.html b/docs/quickreference.html index 621bf5f8..47811bee 100644 --- a/docs/quickreference.html +++ b/docs/quickreference.html @@ -34,7 +34,7 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    @@ -43,20 +43,20 @@

    这是您可以在 Quick Reference 备忘单上使用的样式参考,快速参与贡献

    入门

    -

    入门

    +

    本地编译预览

    简单的将仓库克隆下来本地调试页面展示。

    -

    克隆仓库

    +

    克隆仓库

    git clone git@github.com:jaywcjlove/reference.git
     
    -

    安装依赖编译生成 HTML 页面

    +

    安装依赖编译生成 HTML 页面

    npm i         # 安装依赖
     npm run build # 编译输出 HTML
     npm run start # 监听 md 文件编译输出 HTML
     

    HTML 存放在仓库根目录下的 dist 目录中,将 dist/index.html 静态页面在浏览器中打开预览。

    -

    介绍

    +

    介绍

    在备忘清单采用 HTML 注释语法,标识网站布局和一些样式,目的是为了在 GitHub 中也是正常毫无瑕疵的预览 Markdown

    ### 卡片标题
     <!--rehype:wrap-class=col-span-2-->
    @@ -66,29 +66,29 @@
     

    使用 col-span-2 类标识,卡片占 2 列位置

    -

    注释语法介绍

    +

    注释语法介绍

    • 在某个 Markdown 语法下方或者后面,添加 HTML注释
    • <!--rehype: 开始,--> 结束,包裹参数内容
    • 内容采用 URL 参数的字符拼接方式
    -

    语法

    +

    语法

    <!--rehype: + key=value + & + key=value + -->
    标识开始 + 参数 + 分隔符(&) + 参数 + 标识结束

    -

    示例

    +

    示例

    ### H2 部分
     <!--rehype:body-class=cols-2-->
     
     ### H3 部分
     <!--rehype:wrap-class=row-span-2-->
     
    -

    示例,三行占位,标题红色

    +

    示例,三行占位,标题红色

    ### 标题
     <!--rehype:wrap-class=row-span-3&style=color:red;-->
     
    -

    参数说明

    +

    参数说明

    @@ -115,32 +115,32 @@
    说明
    body-style包裹所有卡片外壳的样式
    body-class用于卡片栏布局,添加
    wrap-style卡片栏添加 CSS 样式
    wrap-class用于卡片占位,添加
    -

    文字颜色

    +

    文字颜色

    _我是红色_<!--rehype:style=color: red;-->
     **加粗红色**<!--rehype:style=color: red;-->
     

    上面添加注释样式,文字 我是红色 文字变

    -

    文字大小

    +

    文字大小

    **加粗变大红色**
     <!--rehype:style=color: red;font-size: 18px-->
     

    上面添加注释样式,文字 加粗变大红色并且

    -

    强制换行

    +

    强制换行

    \```js
     function () {}
     \```
     <!--rehype:className=wrap-text -->
     

    如果代码块内容太长,使用强制换行类解决

    -

    展示表格表头

    +

    展示表格表头

    | Key | value | 
     | ---- | ---- |
     | `键` ||
     <!--rehype:className=show-header-->
     

    注释配置添加 show-header 类,放置在表格下面,表头将被展示出来。

    -

    代码行高亮

    +

    代码行高亮

    import React from "react";
     import "./Student.css";
    @@ -153,22 +153,22 @@
     
      ```jsx {1,4-5}
     

    代码行高亮可以和代码行号一起使用。

    -

    Tooltips

    +

    Tooltips

    鼠标移动到上面有提示Tooltips 的提示内容

    添加注释配置 <!--rehype:tooltips--> 添加一个 Tooltips 提示。

    -

    H3 部分(卡片)背景颜色

    +

    H3 部分(卡片)背景颜色

    ### H3 部分(卡片)背景颜色
     <!--rehype:wrap-style=background: #00c69357;-->
     
    -

    红色标题

    +

    红色标题

    ### 红色标题
     <!--rehype:style=background:#e91e63;-->
     

    在 H3 标题下面添加样式标注 <!--rehype:style=background:#e91e63;-->

    -

    快捷键样式

    +

    快捷键样式

    @@ -189,7 +189,7 @@
    Keyvalue
    快捷键说明
    快捷键说明

    列表添加 <!--rehype:className=shortcuts--> 样式类,展示快捷键样式。

    -

    代码行号

    +

    代码行号

    export const Student = <div>学生</div>;
     const school = <div>学校</div>;
     
    @@ -197,7 +197,7 @@
      ```jsx showLineNumbers
     

    标记语言后面添加 showLineNumbers 标识

    -

    内置类样式

    +

    内置类样式

    @@ -229,7 +229,7 @@
    :--
    shortcuts快捷键样式
    wrap-text超出换行
    show-header展示表头
    style-none隐藏 <ul> 列表样式
    style-list<table> 单元格行展示
    -

    颜色标签

    +

    颜色标签

    @@ -257,7 +257,7 @@
    :--
    <yel>黄色
    <pur>紫色
    <code>``绿
    <del>~~删除~~红色
    -
    +
    隐藏卡片标题,在 H3 标题下面添加注释样式
     
    @@ -265,14 +265,17 @@ <!--rehype:style=display:none;&wrap-style=padding-top: 0;-->
    -

    HTML 代码预览

    +

    HTML 代码预览

      ```html preview
    -  这里是你的 HTML 代码
    +  <b>这里是你的 HTML 代码</b>
       \```
     
    +
    +
    这里是你的 HTML 代码
    +

    上面的 markdown 代码在 meta 位置添加 preview 标识,HTML 代码将被执行预览

    -

    布局

    -

    H2 部分

    +

    布局

    +

    H2 部分

    H2 部分
     ---
    @@ -325,19 +328,19 @@
     
     
    说明
    cols-11 栏卡片布局
    cols-22 栏卡片布局
    cols-33 栏卡片布局
    cols-44 栏卡片布局
    cols-55 栏卡片布局
    cols-{1~6}1~6 栏卡片布局
    -

    占位布局 style 写法

    +

    占位布局 style 写法

    ### H3 部分
     <!--rehype:wrap-style=grid-row: span 2/span 2;-->
     

    放在 ### H3 部分 下面的注释配置,与 <!--rehype:wrap-class=row-span-2--> 相同,设置 2 行占位布局。

    -

    卡片栏布局 style 写法

    +

    卡片栏布局 style 写法

    ## H2 部分
     <!--rehype:body-style=grid-template-columns: repeat(2,minmax(0,1fr));-->
     

    放在 ## H2 部分 下面的注释配置,与 <!--rehype:body-class=cols-2--> 相同,设置 2 栏布局。

    -

    H3 部分

    +

    H3 部分

    ### 卡片 1 (H3 部分)
     <!--rehype:wrap-class=row-span-2-->
     ### 卡片 2 (H3 部分)
    @@ -387,7 +390,7 @@
     
     
    说明
    col-span-22 列占位
    col-span-33 列占位
    col-span-44 列占位
    col-span-55 列占位
    row-span-22 行占位
    row-span-33 行占位
    row-span-44 行占位
    row-span-55 行占位
    -

    卡片合并行布局 1

    +

    卡片合并行布局 1

    ╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮
     ┆   H3 Title 1╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯
    @@ -405,7 +408,7 @@
     ### Title 4
     

    第一标题添加 col-span-3 占位类

    -

    卡片列合并布局 2

    +

    卡片列合并布局 2

    ╭┈┈┈╮ ╭┈┈┈╮ ╭┈┈┈╮
     1 ┆ ┆ 2 ┆ ┆ 3┆   ┆ ╰┈┈┈╯ ╰┈┈┈╯
    @@ -422,7 +425,7 @@
     ### Title 5
     

    Title 1 标题添加 row-span-2 占位类

    -

    卡片列合并布局 3

    +

    卡片列合并布局 3

    ╭┈┈┈╮ ╭┈┈┈╮ ╭┈┈┈╮
     1 ┆ ┆ 2 ┆ ┆ 3╰┈┈┈╯ ┆   ┆ ╰┈┈┈╯
    @@ -439,7 +442,7 @@
     ### Title 5
     

    Title 2 标题添加 row-span-2 占位类

    -

    卡片列合并布局 4

    +

    卡片列合并布局 4

    ╭┈┈┈╮ ╭┈┈┈╮ ╭┈┈┈╮
     1 ┆ ┆ 2 ┆ ┆ 3╰┈┈┈╯ ╰┈┈┈╯ ┆   ┆
    @@ -456,7 +459,7 @@
     ### Title 5
     

    Title 3 标题添加 row-span-2 占位类

    -

    卡片列合并布局 5

    +

    卡片列合并布局 5

    ╭┈┈┈╮ ╭┈┈┈╮ ╭┈┈┈╮
     1 ┆ ┆ 2 ┆ ┆ 3╰┈┈┈╯ ╰┈┈┈╯ ╰┈┈┈╯ 
    @@ -473,7 +476,7 @@
     <!--rehype:wrap-class=col-span-2-->
     

    Title 5 标题添加 col-span-2 占位类

    -

    卡片列合并布局 6

    +

    卡片列合并布局 6

    ╭┈┈┈╮ ╭┈┈┈┈┈┈┈┈┈╮
     1 ┆ ┆ 2╰┈┈┈╯ ╰┈┈┈┈┈┈┈┈┈╯
    @@ -490,7 +493,7 @@
     ### Title 5
     

    Title 2 标题添加 col-span-2 占位类

    -

    卡片列合并布局 7

    +

    卡片列合并布局 7

    ╭┈┈┈╮ ╭┈┈┈╮ ╭┈┈┈╮
     1 ┆ ┆ 2 ┆ ┆ 3╰┈┈┈╯ ╰┈┈┈╯ ╰┈┈┈╯
    @@ -507,7 +510,7 @@
     ### Title 5
     

    Title 4 标题添加 col-span-2 占位类

    -

    卡片列合并布局 8

    +

    卡片列合并布局 8

    ╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮
     ┆     H3 Title 1╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯
    @@ -527,7 +530,7 @@
     ### Title 5
     

    H2 部分 标题添加 cols-4,和 Title 1 添加 col-span-4 合并栏

    -

    卡片列合并布局 9

    +

    卡片列合并布局 9

    ╭┈┈┈┈┈┈┈┈┈╮ ╭┈┈┈╮
     1       ┆ ┆ 2 ┆
    @@ -549,9 +552,9 @@
     ### Title 6
     

    Title 1 标题添加 col-span-2row-span-2 占位类,使用 空格 间隔。

    -

    表格

    -

    基本表格

    -

    Date

    +

    表格

    +

    基本表格

    +

    Date

    @@ -574,7 +577,7 @@
    :-:-
    %m/%d/%Y06/05/2013
    %A, %B %e, %YSunday, June 5, 2013
    %b %e %aJun 5 Sun
    -

    Time

    +

    Time

    @@ -594,7 +597,7 @@
    :-:-
    %H:%M23:05
    %I:%M %p11:05 PM

    标题为 H4 的基本表格。

    -

    快捷键

    +

    快捷键

    @@ -633,7 +636,7 @@
    :-:-
    VVector
    PPencil
    TText
    LLine
    RRectangle
    OOval
    URounded
    -

    展示标题

    +

    展示标题

    @@ -662,7 +665,7 @@
    PrefixExampleWhat
    ////hr[@class='edge']Anywhere
    ././aRelative
    //html/body/divRoot

    <!--rehype:className=show-header-->

    -

    列表样式展示表格

    +

    列表样式展示表格

    @@ -687,7 +690,7 @@
    :-:-
    visualEffectState.inactive后台应一直显示为非激活状态。
    titleBarStyle string (win/mac)窗口标题栏样式。默认值 (default)
    titleBarStyle.default分别返回 mac 或者 win 的标准标题栏

    <!--rehype:className=style-list-->

    -

    列表箭头样式展示表格

    +

    列表箭头样式展示表格

    @@ -712,7 +715,7 @@
    :-:-
    visualEffectState.inactive后台应一直显示为非激活状态。
    titleBarStyle string (win/mac)窗口标题栏样式。默认值 (default)
    titleBarStyle.default分别返回 mac 或者 win 的标准标题栏

    <!--rehype:className=style-list-arrow-->

    -

    隐藏表头强制小尺寸自动换行

    +

    隐藏表头强制小尺寸自动换行

    @@ -737,14 +740,14 @@
    :-:-
    visualEffectState.inactive后台应一直显示为非激活状态。
    titleBarStyle string (win/mac)窗口标题栏样式。默认值 (default)
    titleBarStyle.default分别返回 mac 或者 win 的标准标题栏

    <!--rehype:className=auto-wrap-->

    -

    列表

    -

    一栏(默认)

    +

    列表

    +

    一栏(默认)

    • Item 1
    • Item 2
    • Item 3
    -

    四列

    +

    四列

    • Item 1
    • Item 2
    • @@ -757,7 +760,7 @@

    <!--rehype:className=cols-4-->

    -

    列表步骤

    +

    列表步骤

    • 重命名为 new_name @@ -775,7 +778,7 @@

    <!--rehype:className=style-timeline-->

    -

    没有标记

    +

    没有标记

    • Item 1
    • Item 2
    • @@ -789,7 +792,7 @@

    <!--rehype:className=cols-3 style-none-->

    -

    圆圈标记

    +

    圆圈标记

    • Item 1
    • Item 2
    • @@ -797,7 +800,7 @@

    <!--rehype:className=style-round-->

    -

    箭头标记

    +

    箭头标记

    • Item 1
    • Item 2
    • @@ -805,67 +808,67 @@

    <!--rehype:className=style-arrow-->

    -

    H2 部分 - 5列效果展示

    +

    H2 部分 - 5列效果展示

    -

    One

    +

    One

    ...
     
    -

    Two

    +

    Two

    ...
     
    -

    Three

    +

    Three

    ...
     
    -

    Four

    +

    Four

    ...
     
    -

    Five

    +

    Five

    ...
     
    -

    H3 部分 - 占位效果展示

    -

    row-span-2

    +

    H3 部分 - 占位效果展示

    +

    row-span-2

    ...
     

    <!--rehype:wrap-class=row-span-2-->

    -

    col-span-2

    +

    col-span-2

    ...
     

    <!--rehype:wrap-class=col-span-2-->

    -

    红色标题

    +

    红色标题

    ...
     

    <!--rehype:style=background:#e91e63;-->

    -

    黄色标题

    +

    黄色标题

    ...
     

    <!--rehype:style=background:#d7a100;-->

    -

    col-span-3

    +

    col-span-3

    ...
     
    -

    卡片子项

    +

    卡片子项

    每个部分可以有以下子项:

    -

    H4 子标题

    +

    H4 子标题

    • pre
    • table
    • ul
    -

    H4 子标题

    +

    H4 子标题

    • pre
    • table
    • ul
    -

    H3 部分

    +

    H3 部分

    每个盒子(卡片)都是一个 H3 部分。 盒子将包含 H3 自身内的所有东西。

    这是一个包含段落的基本部分。

    -

    H3 部分背景颜色

    +

    H3 部分背景颜色

    注释配置:
     `<!--rehype:wrap-style=background: #1b5064;-->`
    @@ -884,8 +887,6 @@ function anchorPoint() {
       Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active'))
       if (elm?.tagName === 'H3') {
         elm?.parentElement?.parentElement?.classList.add('active');
    -    const box = elm?.parentElement?.parentElement;
    -    console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap'))
       }
     }
     anchorPoint();
    @@ -896,7 +897,6 @@ function updateAnchor(element) {
         tocanchor.classList.remove('is-active-link');
       });
       const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`);
    -  console.log('anchor', anchor)
       if (anchor) {
         anchor.classList.add('is-active-link');
       }
    diff --git a/docs/react.html b/docs/react.html
    index 9f245b62..0804a698 100644
    --- a/docs/react.html
    +++ b/docs/react.html
    @@ -34,7 +34,7 @@
         document.documentElement.setAttribute('data-color-mode', mode);
         localStorage.setItem(LOCAL_NANE, mode);
       }
    -

    +

    @@ -45,8 +45,8 @@

    适合初学者的综合 React 备忘清单。

    入门

    -

    入门

    +

    介绍

    React 是一个用于构建用户界面的 JavaScript 库。

    • React 官方文档 (reactjs.org)
    • @@ -60,10 +60,10 @@ const root = createRoot(elm); root.render(<App />);
      -

    快速创建 React 项目 (CRA)

    +

    快速创建 React 项目 (CRA)

    npx create-react-app my-app
     
    -

    导入多个导出

    +

    导入多个导出

    import React, {Component} from 'react'
     import ReactDOM from 'react-dom'
     
    @@ -79,7 +79,7 @@
    import World, { Hello } from './hello.js';
     

    使用 import 导入 Hello 组件,在示例中使用。

    -

    React 组件中的 CSS

    +

    React 组件中的 CSS

    import React from "react";
     import "./Student.css";
     
    @@ -95,7 +95,7 @@
       <div style={divStyle}></div>
     );
     
    -

    属性

    +

    属性

    <Student name="Julie" age={23}
       pro={true} />
     
    @@ -114,7 +114,7 @@ }

    class 组件使用 this.props 访问传递给组件的属性。

    -

    Children

    +

    Children

    function Example() {
       return (
    @@ -151,7 +151,7 @@
     
    {this.props.children}
     

    children 作为子组件的的属性传递。

    -

    State

    +

    State

    函数中的 State,Hook 是 React 16.8 的新增特性

    import { useState } from 'react';
    @@ -172,7 +172,7 @@
     

    使用 setState 更新状态,下面是函数组件读取状态

    <p>您点击了 {count}</p>
     
    -

    Class 中的 State

    +

    Class 中的 State

    import React from 'react';
     
     class Student extends React.Component {
    @@ -201,7 +201,7 @@
     

    使用 setState 更新状态,class 组件中不能使用 hooks。下面是 class 组件读取状态

    <p>您点击了{this.state.count}</p>
     
    -

    循环

    +

    循环

    const elm = ['one', 'two', 'three'];
     function Student() {
       return (
    @@ -214,7 +214,7 @@
     }
     

    key 值在兄弟节点之间必须唯一

    -

    事件监听

    +

    事件监听

    export default function Hello() {
       function handleClick(event) {
         event.preventDefault();
    @@ -228,7 +228,7 @@
       );
     }
     
    -

    函数注入

    +

    函数注入

    function addNumbers(x1, x2) {
       return x1 + x2;
     }
    @@ -239,7 +239,7 @@
       </div>
     );
     
    -

    嵌套

    +

    嵌套

    import { useState } from 'react'
     import Avatar from './Avatar';
     import Profile from './Profile';
    @@ -254,7 +254,7 @@
       );
     }
     
    -

    Portals

    +

    Portals

    React 并没有创建一个新的 div。它只是把子元素渲染到 domNode 中。domNode 是一个可以在任何位置的有效 DOM 节点。

    render() {
       return ReactDOM.createPortal(
    @@ -264,7 +264,7 @@
     }
     

    提供了一种将子节点渲染到存在于父组件以外的 DOM 节点的优秀的方案

    -

    Fragment

    +

    Fragment

    import { Fragment } from 'react'
     import Avatar from './Avatar';
    @@ -286,20 +286,20 @@
     );
     

    查看: Fragments & strings

    -

    返回字符串

    +

    返回字符串

    render() {
       return 'Look ma, no spans!';
     }
     

    您可以只返回一个字符串。查看: Fragments & strings

    -

    返回数组

    +

    返回数组

    const Student = () => [
       <li key="A">First item</li>,
       <li key="B">Second item</li>
     ];
     

    不要忘记 key!查看: Fragments & strings

    -

    Refs 转发

    +

    Refs 转发

    const FancyButton = React.forwardRef(
       (props, ref) => (
         <button ref={ref} className="btn">
    @@ -308,7 +308,7 @@
       )
     );
     
    -

    使用

    +

    使用

    // 你可以直接获取 DOM button 的 ref:
     const ref = React.createRef();
     
    @@ -316,7 +316,7 @@
       点击我
     </FancyButton>;
     
    -

    Class 组件内部使用 ref 属性

    +

    Class 组件内部使用 ref 属性

    import {Component,createRef} from 'react'
     
     class MyComponent extends Component {
    @@ -331,7 +331,7 @@
     }
     

    提示:Refs 适用于类组件,但不适用于函数组件(除非您使用 useRef hook,请参阅hooks

    -

    函数组件内部使用 ref 属性

    +

    函数组件内部使用 ref 属性

    function CustomTextInput(props) {
       // 这里必须声明 $input,这样 ref 才可以引用它
       const $input = useRef(null);
    @@ -349,7 +349,7 @@
       );
     }
     
    -

    严格模式 StrictMode

    +

    严格模式 StrictMode

    <div>
       <Header />
       <React.StrictMode>
    @@ -371,7 +371,7 @@
     
  • 确保可复用的状态
  • 突出显示应用程序中潜在问题的工具。请参阅:严格模式

    -

    Profiler

    +

    Profiler

    测量一个 React 应用多久渲染一次以及渲染一次的 代价

    <Profiler id="Navigation" onRender={callback}>
    @@ -397,7 +397,7 @@
     
     
     
    :-:-
    id(string)发生提交的 Profiler 树的 id
    onRender(function)组件树任何组件 “提交” 一个更新的时候调用这个函数
    -

    onRender 回调函数

    +

    onRender 回调函数

    @@ -432,8 +432,8 @@
    :-:-
    phase: "mount" | "update"判断是由 props/state/hooks 改变 或 “第一次装载” 引起的重渲染
    actualDuration: number本次更新在渲染 Profiler 和它的子代上花费的时间
    baseDuration: number在 Profiler 树中最近一次每一个组件 render 的持续时间
    startTime: number本次更新中 React 开始渲染的时间戳
    commitTime: number本次更新中 React commit 阶段结束的时间戳
    interactions: Set当更新被制定时,“interactions” 的集合会被追踪
    -

    默认值

    -

    Class 组件默认 props

    +

    默认值

    +

    Class 组件默认 props

    class CustomButton extends React.Component {
       // ...
    @@ -442,11 +442,11 @@
       color: 'blue'
     };
     
    -

    使用

    +

    使用

    <CustomButton /> ;
     

    不传值 props.color 将自动设置为 blue

    -

    Class 组件默认 state

    +

    Class 组件默认 state

    class Hello extends Component {
       constructor (props) {
    @@ -460,20 +460,20 @@
       state = { visible: true }
     }
     
    -

    函数组件默认 props

    +

    函数组件默认 props

    function CustomButton(props) {
       const { color = 'blue' } = props;
       return <div>{color}</div>
     }
     
    -

    函数组件默认 state

    +

    函数组件默认 state

    function CustomButton() {
       const [color, setColor]=useState('blue')
       return <div>{color}</div>
     }
     
    -

    JSX

    -

    介绍

    +

    JSX

    +

    介绍

    JSX 仅仅只是 React.createElement(component, props, ...children) 函数的语法糖

    <MyButton color="blue" shadowSize={2}>
    @@ -496,7 +496,7 @@
       {className: 'sidebar'}
     )
     
    -

    JSX 点语法

    +

    JSX 点语法

    const Menu = ({ children }) => (
       <div className="menu">{children}<div>
     );
    @@ -510,7 +510,7 @@
       <Menu.Item>菜单二</Menu.Item>
     <Menu>
     
    -

    JSX Element

    +

    JSX Element

    let element = <h1>Hello, world!</h1>;
     let emptyHeading = <h1 />;
     
    @@ -522,7 +522,7 @@
     root.render(element);
     

    参考:渲染元素

    -

    JSX 属性

    +

    JSX 属性

    const avatarUrl = "img/picture.jpg"
     const element = <img src={avatarUrl} />;
     
    @@ -533,7 +533,7 @@
     );
     

    注意:类属性 className

    -

    JSX 表达式

    +

    JSX 表达式

    let name = '张三';
     let element = <h1>Hello, {name}</h1>;
     
    @@ -546,7 +546,7 @@
       </h1>
     );
     
    -

    JSX style

    +

    JSX style

    const divStyle = {
       color: 'blue',
       backgroundImage: 'url(' + imgUrl + ')',
    @@ -555,7 +555,7 @@
       return <div style={divStyle}>组件</div>;
     }
     
    -

    JSX dangerouslySetInnerHTML

    +

    JSX dangerouslySetInnerHTML

    const markup = {__html: '我 &middot; 你' };
     
     const MyComponent = () => (
    @@ -563,7 +563,7 @@
     );
     

    dangerouslySetInnerHTML 是 React 为浏览器 DOM 提供 innerHTML 的替换方案。

    -

    JSX htmlFor

    +

    JSX htmlFor

    const MyComponent = () => (
       <div>
         <input type="radio" id="ab" name="v">
    @@ -572,22 +572,22 @@
     );
     

    forJS 中是保留字,JSX 元素使用了 htmlFor 代替

    -

    JSX defaultValue

    +

    JSX defaultValue

    非受控组件的属性,设置组件第一次挂载时的 value

    <textarea defaultValue="Hello" />
     

    <input><select><textarea> 支持 value 属性

    -

    JSX defaultChecked

    +

    JSX defaultChecked

    非受控组件的属性,设置组件是否被选中

    <input type="radio" defaultChecked />
     

    类型为 checkboxradio 时,组件支持 checked 属性

    -

    JSX className

    +

    JSX className

    属性用于指定 CSSclass

    <div className="warp">...</div>
     

    React 中使用 Web Components 使用 class 属性代替

    -

    JSX 条件渲染

    +

    JSX 条件渲染

    import React from "react";
     
    @@ -609,10 +609,10 @@
     }
     

    注意:组件必须总是返回一些东西。

    -

    使用

    +

    使用

    <Greeting firstName="" lastName="" />
     
    -

    JSX 三目运算符 / 与运算符 &&

    +

    JSX 三目运算符 / 与运算符 &&

    export default function Weather(props) {
       const isLoggedIn = props.isLoggedIn;
       return (
    @@ -625,7 +625,7 @@
     
    {isShow && <div>内容</div>}
     
    -

    JSX 组件

    +

    JSX 组件

    <Dropdown>
       下拉列表
       <Menu>
    @@ -636,7 +636,7 @@
     </Dropdown>
     

    组件名称以大驼峰式命名。

    -

    JSX 元素变量

    +

    JSX 元素变量

    function Greeting(props) {
       let button;
       if (props.isLoggedIn) {
    @@ -647,7 +647,7 @@
       return <div>{button}</div>;
     }
     
    -

    JSX 注释

    +

    JSX 注释

    function Student() {
       const [count, setCount] = useState(0);
       return (
    @@ -657,8 +657,8 @@
       );
     }
     
    -

    组件

    -

    函数组件

    +

    组件

    +

    函数组件

    import React from 'react';
     
    @@ -674,16 +674,16 @@
     }
     

    注意:每个组件都需要一个根元素,更多说明

    -

    Class 组件

    +

    Class 组件

    class Welcome extends React.Component {
       render() {
         return <h1>{this.props.name}</h1>;
       }
     }
     
    -

    Class 组件 API

    +

    Class 组件 API

    -

    额外的 API

    +

    额外的 API

    @@ -706,7 +706,7 @@
    :--
    this.forceUpdate()强制重新渲染
    this.setState({ ... })更新状态
    this.setState(state =>{ ... })更新状态
    -

    属性

    +

    属性

    @@ -725,7 +725,7 @@
    :--
    defaultProps默认 props
    displayName显示组件名称(用于调试)
    -

    实例属性

    +

    实例属性

    @@ -744,14 +744,14 @@
    :--
    this.props组件接受参数
    this.state组件内状态
    -

    Pure 组件

    +

    Pure 组件

    import React, {PureComponent} from 'react'
     
     class MessageBox extends PureComponent {
       ···
     }
     
    -

    高阶组件

    +

    高阶组件

    import React, { Component } from 'react';
     // 高阶组件 with
     const with = data => WrappedComponent => {
    @@ -774,7 +774,7 @@
     
     const MyComp = with('Hello')(LowComponent)
     
    -

    包含关系

    +

    包含关系

    function FancyBorder(props) {
       return (
         <div className={'Fancy'+props.color}>
    @@ -795,7 +795,7 @@
       );
     }
     
    -

    作为参数传递

    +

    作为参数传递

    function SplitPane(props) {
       return (
         <div className="SplitPane">
    @@ -819,7 +819,7 @@
     }
     

    给组件 SplitPane 传递 leftright 两个组件参数

    -

    嵌入内部组件

    +

    嵌入内部组件

    import React from 'react';
     import UserAvatar from "./UserAvatar";
     
    @@ -833,7 +833,7 @@
     }
     

    注意:假设 UserAvatarUserAvatar.js 中声明

    -

    嵌入外部组件

    +

    嵌入外部组件

    import React from 'react';
     import {Button} from 'uiw';
     export default function UserProfile() {
    @@ -847,7 +847,7 @@
     }
     

    注意:uiw 组件在 npmjs.com 上找到,需要先安装导入

    -

    点组件语法技巧

    +

    点组件语法技巧

    const Menu = ({ children }) => (
       <div className="menu">{children}<div>
     );
    @@ -862,10 +862,10 @@
       <Menu.Item>菜单二</Menu.Item>
     <Menu>
     
    -

    Hooks

    -

    Hooks API 参考

    +

    Hooks

    +

    Hooks API 参考

    -

    基础 Hook

    +

    基础 Hook

    @@ -888,7 +888,7 @@
    方法描述
    useState返回一个 state,更新 state 的函数 #
    useEffect可能有副作用代码的函数 #
    useContext接收并返回该 context 的当前值 #
    -

    额外的 Hook

    +

    额外的 Hook

    @@ -939,7 +939,7 @@
    方法描述
    useReduceruseState 的替代方案 #
    useCallback返回一个回调函数 #
    useMemo返回一个 memoized#
    useRef返回一个可变的 ref 对象 #
    useImperativeHandle暴露给父组件的实例值 #
    useLayoutEffectDOM 变更后同步调用函数 #
    useDebugValue开发者工具中显示标签 #
    useDeferredValue接受并返回该值的新副本 #
    useTransition过渡任务的等待状态 #
    useId用于生成唯一 ID #
    -

    Library Hooks

    +

    Library Hooks

    @@ -958,7 +958,7 @@
    方法描述
    useSyncExternalStore读取和订阅外部数据源 #
    useInsertionEffectDOM 突变之前 同步触发 #
    -

    函数式更新

    +

    函数式更新

    function Counter({ initialCount }) {
       const [count, setCount] = useState(initialCount);
    @@ -971,7 +971,7 @@
       );
     }
     
    -

    useRef

    +

    useRef

    function TextInputWithFocusButton() {
       const $input = useRef(null);
       const onButtonClick = () => {
    @@ -988,7 +988,7 @@
     }
     

    current 指向已挂载到 DOM 上的文本输入元素

    -

    useImperativeHandle

    +

    useImperativeHandle

    function FancyInput(props, ref) {
       const inputRef = useRef();
       useImperativeHandle(ref, () => ({
    @@ -1004,7 +1004,7 @@
     
    <FancyInput ref={inputRef} />
     inputRef.current.focus()
     
    -

    useEffect

    +

    useEffect

    useEffect(() => {
       const subs = props.source.subscribe();
       return () => {
    @@ -1012,7 +1012,7 @@
       };
     }, [props.source]);
     
    -

    useCallback

    +

    useCallback

    const memoizedCallback = useCallback(
       () => {
         doSomething(a, b);
    @@ -1020,7 +1020,7 @@
       [a, b],
     );
     
    -

    useMemo

    +

    useMemo

    const memoizedValue = useMemo(
       () => {
         return computeExpensiveValue(a, b)
    @@ -1028,7 +1028,7 @@
       [a, b]
     );
     
    -

    useId

    +

    useId

    function Checkbox() {
       const id = useId();
       return (
    @@ -1042,7 +1042,7 @@
     };
     

    用于生成跨服务端和客户端稳定的唯一 ID 的同时避免 hydration 不匹配

    -

    useDebugValue

    +

    useDebugValue

    function useFriendStatus(friendID) {
       const [
         isOnline, setIsOnline
    @@ -1058,7 +1058,7 @@
     

    不推荐你向每个自定义 Hook 添加 debug

    -

    componentDidMount & componentWillUnmount

    +

    componentDidMount & componentWillUnmount

    useEffect(
       () => {
         // componentDidMount
    @@ -1072,9 +1072,9 @@
     );
     

    这是一个类似 class 组件中 componentDidMount & componentWillUnmount 两个生命周期函数的写法。

    -

    生命周期

    +

    生命周期

    -

    挂载

    +

    挂载

    @@ -1107,7 +1107,7 @@
    方法描述
    constructor (props)渲染前 #
    static getDerivedStateFromProps()调用 render 方法之前调用 #
    render()class 组件中唯一必须实现的方法 #
    componentDidMount()在组件挂载后(插入 DOM 树中)立即调用 #
    UNSAFE_componentWillMount()在挂载之前被调用,建议使用 constructor() #

    constructor() 上设置初始状态。在 componentDidMount() 上添加 DOM 事件处理程序、计时器(等),然后在 componentWillUnmount() 上删除它们。

    -

    卸载

    +

    卸载

    @@ -1122,7 +1122,7 @@
    方法描述
    componentWillUnmount()在组件卸载及销毁之前直接调用 #
    -

    过时 API

    +

    过时 API

    @@ -1146,7 +1146,7 @@
    过时方法新方法
    componentWillMount()UNSAFE_componentWillMount() #
    componentWillReceiveProps()UNSAFE_componentWillReceiveProps() #
    componentWillUpdate()UNSAFE_componentWillUpdate() #

    17+ 之后不再支持,在 17 版本之后,只有新的 UNSAFE_ 生命周期名称可以使用。

    -

    更新

    +

    更新

    @@ -1178,7 +1178,7 @@
    方法描述
    static getDerivedStateFromProps(props, state)调用 render 之前调用,在初始挂载及后续更新时都会被调用 #
    shouldComponentUpdate(nextProps, nextState)如果返回 false,则跳过 render() #
    render()在不修改组件 state 的情况下,每次调用时都返回相同的结果 #
    getSnapshotBeforeUpdate()在发生更改之前从 DOM 中捕获一些信息(例如,滚动位置) #
    componentDidUpdate()这里使用 setState(),但记得比较 props。首次渲染不会执行此方法 #
    -

    错误处理

    +

    错误处理

    @@ -1198,14 +1198,14 @@
    方法描述
    static getDerivedStateFromError(error)后代组件抛出错误后被调用,它将抛出的错误作为参数,并返回一个值以更新 state #
    componentDidCatch(error, info)在后代组件抛出错误后被调用,会在“提交”阶段被调用,因此允许执行副作用 #
    -

    render()

    +

    render()

    class Welcome extends React.Component {
       render() {
         return <h1>Hello, {this.props.name}</h1>;
       }
     }
     
    -

    constructor()

    +

    constructor()

    constructor(props) {
       super(props);
       // 不要在这里调用 this.setState()
    @@ -1213,7 +1213,7 @@
       this.handleClick = this.handleClick.bind(this);
     }
     
    -

    static getDerivedStateFromError()

    +

    static getDerivedStateFromError()

    class ErrorBoundary extends React.Component {
       constructor(props) {
    @@ -1236,7 +1236,7 @@
       }
     }
     
    -

    componentDidUpdate()

    +

    componentDidUpdate()

    componentDidUpdate(prevProps) {
       // 典型用法(不要忘记比较 props):
       if (this.props.uid !== prevProps.uid) {
    @@ -1244,7 +1244,7 @@
       }
     }
     
    -

    getSnapshotBeforeUpdate()

    +

    getSnapshotBeforeUpdate()

    getSnapshotBeforeUpdate(prevProps, prevState) {
       // 我们是否在 list 中添加新的 items ?
       // 捕获滚动​​位置以便我们稍后调整滚动位置。
    @@ -1255,8 +1255,8 @@
       return null;
     }
     
    -

    PropTypes 属性类型检查

    -

    PropTypes

    +

    PropTypes 属性类型检查

    +

    PropTypes

    import PropTypes from 'prop-types'
     
    @@ -1279,7 +1279,7 @@
    :--
    any任意类型
    (props, propName, 组件名称)=>{}自定义验证器
    -

    基础

    +

    基础

    @@ -1310,7 +1310,7 @@
    :--
    string字符串
    number数组
    func函数
    bool布尔值
    symbol-
    -

    枚举 Enum

    +

    枚举 Enum

    @@ -1329,7 +1329,7 @@
    :--
    oneOf(any)枚举类型
    oneOfType([type])几种类型中的任意一个类型
    -

    数组 Array

    +

    数组 Array

    @@ -1348,7 +1348,7 @@
    :--
    array数组
    arrayOf数组由某一类型的元素组成
    -

    对象 Object

    +

    对象 Object

    @@ -1379,7 +1379,7 @@
    :--
    object对象
    objectOf对象由某一类型的值组成
    instanceOf(...)类的实例
    shape对象由特定的类型值组成
    exact有额外属性警告
    -

    元素 Elements

    +

    元素 Elements

    @@ -1402,7 +1402,7 @@
    :--
    elementReact 元素
    elementTypeReact 元素类型(即 MyComponent)
    nodeDOM 节点
    -

    必需的

    +

    必需的

    @@ -1418,7 +1418,7 @@
    :--
    (···).isRequired必需的

    请参阅:使用 PropTypes 进行类型检查

    -

    基本类型

    +

    基本类型

    MyComponent.propTypes = {
       email:      PropTypes.string,
       seats:      PropTypes.number,
    @@ -1429,7 +1429,7 @@
     }
     

    你可以将属性声明为 JS 原生类型,默认都是可选的。

    -

    必需的

    +

    必需的

    MyComponent.propTypes = {
       // 确保这个 prop 没有被提供时,会打印警告信息
       requiredFunc: PropTypes.func.isRequired,
    @@ -1439,7 +1439,7 @@
     }
     

    你可以在任何 PropTypes 属性后面加上 isRequired

    -

    枚举

    +

    枚举

    MyComponent.propTypes = {
       // 只能是特定的值,枚举类型。
       optionalEnum: PropTypes.oneOf([
    @@ -1453,7 +1453,7 @@
       ]),
     }
     
    -

    元素 Elements

    +

    元素 Elements

    MyComponent.propTypes = {
       // 任何可被渲染的元素
       // (包括数字、字符串、元素或数组)
    @@ -1467,7 +1467,7 @@
       elementType: PropTypes.elementType,
     }
     
    -

    对象 Object

    +

    对象 Object

    MyComponent.propTypes = {
       // 可以指定一个对象由某一类型的值组成
       objectOf: PropTypes.objectOf(
    @@ -1485,7 +1485,7 @@
       }),
     }
     
    -

    自定义验证器

    +

    自定义验证器

    MyComponent.propTypes = {
       custom: (props, propName, compName) => {
         if (!/matchm/.test(props[propName])) {
    @@ -1501,7 +1501,7 @@
     }
     

    请不要使用 console.warn 或抛出异常,因为这在 oneOfType 中不会起作用。

    -

    自定义的 arrayOfobjectOf 验证器

    +

    自定义的 arrayOfobjectOf 验证器

    MyComponent.propTypes = {
       arrayProp: PropTypes.arrayOf((propValue, key, componentName, location, propFullName) => {
    @@ -1516,19 +1516,19 @@
     }
     

    propValue 是数组或对象本身,key 是他们当前的键。

    -

    数组

    +

    数组

    MyComponent.propTypes = {
       arr: PropTypes.arrayOf(PropTypes.number),
     };
     

    可以指定一个数组由某一类型的元素组成

    -

    验证类的实例

    +

    验证类的实例

    MyComponent.propTypes = {
       message: PropTypes.instanceOf(Message),
     };
     

    声明 message 为类的实例

    -

    另见

    +

    另见

    • React 官方中文文档 (zh-hans.reactjs.org)
    • 反应生命周期方法图 (projects.wojtekmaj.pl)
    • @@ -1548,8 +1548,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -1560,7 +1558,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/regex.html b/docs/regex.html index 3ae62ddc..6fb2d77e 100644 --- a/docs/regex.html +++ b/docs/regex.html @@ -34,15 +34,15 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    RegEX 备忘清单

    正则表达式 (regex) 的快速参考,包括符号、范围、分组、断言和一些示例模式,以帮助您入门。

    入门

    -

    入门

    +

    介绍

    这是开始使用正则表达式(Regex)的快速备忘单。

    -

    字符类

    +

    字符类

    @@ -95,7 +95,7 @@
    范例说明
    [abc]单个字符:abc
    [^abc]一个字符,除了:abc
    [a-z]范围内的字符:a-z
    [^a-z]不在范围内的字符:a-z
    [0-9]范围内的数字:0-9
    [a-zA-Z]范围内的字符:
    a-zA-Z
    [a-zA-Z0-9]范围内的字符:
    a-zA-Z0-9
    -

    量词

    +

    量词

    @@ -146,7 +146,7 @@
    范例说明
    a?零个或一个a
    a*零个或多个 a
    a+一个或多个a
    [0-9]+0-9中的一个或多个
    a{3}正好 3a
    a{3,}3个或更多的a
    a{3,6}a36 之间
    a*贪心量词
    a*?惰性量词
    a*+占有量词
    -

    常用元字符

    +

    常用元字符

    • ^
    • {
    • @@ -165,7 +165,7 @@

    使用 \ 转义这些特殊字符

    -

    元序列

    +

    元序列

    @@ -337,7 +337,7 @@
    范例说明
    .任何单个字符
    \s任何空白字符
    \S任何非空白字符
    \d任何数字,与 [0-9] 相同
    \D任何非数字,与 [^0-9] 相同
    \w任何单词字符
    \W任何非单词字符
    \X任何 Unicode 序列,包括换行符
    \C匹配一个数据单元
    \RUnicode 换行符
    \v垂直空白字符
    \V\v 的否定 - 除了换行符和垂直制表符之外的任何内容
    \h水平空白字符
    \H\h 的否定
    \K重置匹配
    \n匹配第 n 个子模式
    \pXUnicode 属性 X
    \p{...}Unicode 属性或脚本类别
    \PX\pX 的否定
    \P{...}\p 的否定
    \Q...\E引用;视为文字
    \k<name>匹配子模式name
    \k'name'匹配子模式name
    \k{name}匹配子模式name
    \gn匹配第 n 个子模式
    \g{n}匹配第 n 个子模式
    \g<n>递归第 n 个捕获组
    \g'n'递归第 n 个捕获组。
    \g{-n}匹配第 n 个相对前一个子模式
    \g<+n>递归第 n 个相对即将到来的子模式
    \g'+n'匹配第 n 个相对即将到来的子模式
    \g'letter'递归命名捕获组 字母
    \g{letter}匹配先前命名的捕获组 字母
    \g<letter>递归命名捕获组 字母
    \xYY十六进制字符 YY
    \x{YYYY}十六进制字符 YYYY
    \ddd八进制字符ddd
    \cY控制字符 Y
    [\b]退格字符
    \使任何字符文字
    -

    锚点

    +

    锚点

    @@ -380,7 +380,7 @@
    范例说明
    \G比赛开始
    ^字符串的开始
    $字符串结束
    \A字符串的开始
    \Z字符串结束
    \z字符串的绝对结尾
    \b一个词的边界
    \B非单词边界
    -

    替代

    +

    替代

    @@ -443,7 +443,7 @@
    范例说明
    \0完整的比赛内容
    \1捕获组 1 中的内容
    $1捕获组 1 中的内容
    ${foo}捕获组 foo 中的内容
    \x20十六进制替换值
    \x{06fa}十六进制替换值
    \t标签
    \r回车
    \n新队
    \f换页
    \U大写转换
    \L小写转换
    \E终止任何转换
    -

    组构造

    +

    组构造

    @@ -498,7 +498,7 @@
    范例说明
    (...)捕获所有封闭的东西
    (a|b)匹配 ab
    (?:...)匹配随附的所有内容
    (?>...)原子组(非捕获)
    (?|...)重复的子模式组号
    (?#...)注解
    (?'name'...)命名捕获组
    (?<name>...)命名捕获组
    (?P<name>...)命名捕获组
    (?imsxXU)内联修饰符
    (?(DEFINE)...)在使用它们之前预定义模式
    -

    断言

    +

    断言

    @@ -533,7 +533,7 @@
    :--
    (?(1)yes|no)条件语句
    (?(R)yes|no)条件语句
    (?(R#)yes|no)递归条件语句
    (?(R&name)yes|no)条件语句
    (?(?=...)yes|no)有条件的前瞻
    (?(?<=...)yes|no)有条件的往后看
    -

    递归

    +

    递归

    @@ -568,7 +568,7 @@
    :--
    (?R)递归整个模式
    (?1)递归第一个子模式
    (?+1)递归第一个相对子模式
    (?&name)递归子模式name
    (?P=name)匹配子模式name
    (?P>name)递归子模式name
    -

    标志/修饰符

    +

    标志/修饰符

    @@ -623,7 +623,7 @@
    :--
    g全部
    m多行
    i不区分大小写
    x忽略空格
    s单线
    u统一码
    X扩展
    U不贪心
    A
    J重复的组名
    d结果包含捕获组子字符串开始和结束的索引
    -

    零宽度断言

    +

    零宽度断言

    @@ -667,7 +667,7 @@
    :--
    (?=...)正先行断言
    (?!...)负先行断言
    (?<=...)正后发断言
    (?<!...)负后发断言
    ?= 正先行断言-存在
    ?! 负先行断言-排除
    ?<=正后发断言-存在
    ?<!负后发断言-排除

    零宽度断言 允许您在主模式之前(向后看)或之后(lookahead)匹配一个组,而不会将其包含在结果中。

    -

    POSIX 字符类

    +

    POSIX 字符类

    @@ -761,7 +761,7 @@
    字符类如同意义
    [[:alnum:]][0-9A-Za-z]字母和数字
    [[:alpha:]][A-Za-z]字母
    [[:ascii:]][\x00-\x7F]ASCII 码 0-127
    [[:blank:]][\t ]仅空格或制表符
    [[:cntrl:]][\x00-\x1F\x7F]控制字符
    [[:digit:]][0-9]十进制数字
    [[:graph:]][[:alnum:][:punct:]]可见字符(不是空格)
    [[:lower:]][a-z]小写字母
    [[:print:]][ -~] == [ [:graph:]]可见字符
    [[:punct:]][!"#$%&’()*+,-./:;<=>?@[]^_`{|}~]可见标点符号
    [[:space:]][\t\n\v\f\r ]空白
    [[:upper:]][A-Z]大写字母
    [[:word:]][0-9A-Za-z_]单词字符
    [[:xdigit:]][0-9A-Fa-f]十六进制数字
    [[:<:]][\b(?=\w)]词的开头
    [[:>:]][\b(?<=\w)]词尾
    -

    控制动词

    +

    控制动词

    @@ -868,8 +868,8 @@
    :--
    (*ACCEPT)控制动词
    (*FAIL)控制动词
    (*MARK:NAME)控制动词
    (*COMMIT)控制动词
    (*PRUNE)控制动词
    (*SKIP)控制动词
    (*THEN)控制动词
    (*UTF)图案修饰符
    (*UTF8)图案修饰符
    (*UTF16)图案修饰符
    (*UTF32)图案修饰符
    (*UCP)图案修饰符
    (*CR)换行修饰符
    (*LF)换行修饰符
    (*CRLF)换行修饰符
    (*ANYCRLF)换行修饰符
    (*ANY)换行修饰符
    \R换行修饰符
    (*BSR_ANYCRLF)换行修饰符
    (*BSR_UNICODE)换行修饰符
    (*LIMIT_MATCH=x)正则表达式引擎修饰符
    (*LIMIT_RECURSION=d)正则表达式引擎修饰符
    (*NO_AUTO_POSSESS)正则表达式引擎修饰符
    (*NO_START_OPT)正则表达式引擎修饰符
    -

    正则表达式示例

    -

    字符串

    +

    正则表达式示例

    +

    字符串

    @@ -905,7 +905,7 @@
    范例说明
    ring 匹配 ring springboard 等。
    . 匹配 a9+ 等。
    h.o 匹配 hooh2oh/o 等。
    ring\? 匹配 ring?
    \(quiet\) 匹配(安静)
    c:\\windows 匹配 c:\windows

    使用 \ 搜索这些特殊字符:
    [ \ ^ $ . | ? * + ( ) { }

    -

    速记类

    +

    速记类

    @@ -940,7 +940,7 @@
    范例说明
    \w “单词”字符
    (字母、数字或下划线)
    \d 数字
    \s 空格
    (空格、制表符、vtab、换行符)
    \W, \D, or \S 不是单词、数字或空格
    [\D\S] 表示不是数字或空格,两者都匹配
    [^\d\s] 禁止数字和空格
    -

    出现次数

    +

    出现次数

    @@ -971,7 +971,7 @@
    范例说明
    colou?r匹配 colorcolor
    [BW]ill[ieamy's]*匹配 BillWillyWilliam's 等。
    [a-zA-Z]+匹配 1 个或多个字母
    \d{3}-\d{2}-\d{4}匹配 SSN
    [a-z]\w{1,7}匹配 UW NetID
    -

    备择方案

    +

    备择方案

    @@ -995,7 +995,7 @@
    范例说明
    cat|dog 匹配 catdog
    id|identity 匹配 ididentity
    identity|id 匹配 ididentity

    当替代品重叠时,命令从长到短

    -

    字符类

    +

    字符类

    @@ -1027,7 +1027,7 @@
    范例说明
    [aeiou]匹配任何元音
    [^aeiou]匹配一个非元音
    r[iau]ng匹配ring、wrangle、sprung等。
    gr[ae]y匹配 graygrey
    [a-zA-Z0-9]匹配任何字母或数字

    [ ] 中总是转义 . \ ] 有时是 ^ - .

    -

    贪婪与懒惰

    +

    贪婪与懒惰

    @@ -1054,7 +1054,7 @@
    范例说明
    * + {n,}
    greedy
    尽可能匹配
    <.+> <b>bold</b> 中找到 1 个大匹配项
    *? +? {n,}?
    lazy
    尽可能少匹配
    <.+?>在 <b>bold</b> 中找到 2 个匹配项
    -

    范围

    +

    范围

    @@ -1110,7 +1110,7 @@
    范例说明
    \b “单词”边缘(非“单词”字符旁边)
    \bring 单词以“ring”开头,例如 ringtone
    ring\b 单词以“ring”结尾,例如 spring
    \b9\b 匹配单个数字 9,而不是 19、91、99 等。
    \b[a-zA-Z]{6}\b 匹配 6 个字母的单词
    \B 不是字边
    \Bring\B 匹配 springswringer
    ^\d*$ 整个字符串必须是数字
    ^[a-zA-Z]{4,20}$字符串必须有 4-20 个字母
    ^[A-Z] 字符串必须以大写字母开头
    [\.!?"')]$ 字符串必须以终端标点结尾
    -

    修饰

    +

    修饰

    @@ -1145,7 +1145,7 @@
    范例说明
    (?i)[a-z]*(?-i)忽略大小写开/关
    (?s).*(?-s)匹配多行(导致 . 匹配换行符)
    (?m)^.*;$(?-m)^ & $ 匹配行不是整个字符串
    (?x)#free-spacing 模式,此 EOL 注释被忽略
    (?-x)自由空间模式关闭
    /regex/ismx修改整个字符串的模式
    -

    +

    @@ -1167,7 +1167,7 @@

    如果组后匹配失败,解析器会尝试每个替代方案。
    可能导致灾难性的回溯。

    -

    反向引用

    +

    反向引用

    @@ -1190,7 +1190,7 @@
    范例说明
    (to) (be) or not \1 \2匹配 to be or not to be
    ([^\s])\1{2}匹配非空格,然后再相同两次   aaa, ...
    \b(\w+)\s+\1\b匹配双字
    -

    非捕获组

    +

    非捕获组

    @@ -1206,7 +1206,7 @@
    范例说明
    on(?:click|load)快于:on(click|load)

    尽可能使用非捕获或原子组

    -

    原子组

    +

    原子组

    @@ -1228,7 +1228,7 @@

    "id" 匹配,但 \b 在原子组之后失败, 解析器不会回溯到组以重试“身份”

    如果替代品重叠,请从长到短命令。

    -

    零宽度断言 Lookaround(前后预查)

    +

    零宽度断言 Lookaround(前后预查)

    @@ -1276,13 +1276,13 @@
    范例说明
    (?= )向前看,如果你能提前找到
    (?! )向前看,如果你找不到前面
    (?<= )向后看,如果你能找到后面
    (?<! )向后看,如果你找不到后面
    \b\w+?(?=ing\b)匹配 warbling, string, fishing, ...
    \b(?!\w+ing\b)\w+\b不以“ing”结尾的单词
    (?<=\bpre).*?\b 匹配 pretend、present、prefix、...
    \b\w{3}(?<!pre)\w*?\b不以“pre”开头的词
    \b\w+(?<!ing)\b匹配不以“ing”结尾的单词
    -

    If-then-else

    +

    If-then-else

    匹配 Mr.Ms. 如果单词 her 稍后在字符串中

    M(?(?=.*?\bher\b)s|r)\.
     

    需要环顾 IF 条件

    -

    基础实例

    -

    基本匹配

    +

    基础实例

    +

    基本匹配

    @@ -1303,7 +1303,7 @@
    表达式匹配示例
    theThe fat cat sat on the mat.
    TheThe fat cat sat on the mat.

    由字母t开始,接着是h,再接着是e

    -

    点运算符 .

    +

    点运算符 .

    @@ -1320,7 +1320,7 @@
    表达式匹配示例
    .arThe car parked in the garage.

    表达式.ar匹配一个任意字符后面跟着是ar的字符串

    -

    字符集

    +

    字符集

    @@ -1341,7 +1341,7 @@
    表达式匹配示例
    .arThe car parked in the garage.
    ar[.]A garage is a good place to park a car.

    方括号的句号就表示句号。表达式 ar[.] 匹配 ar. 字符串

    -

    否定字符集

    +

    否定字符集

    @@ -1358,9 +1358,9 @@
    表达式匹配示例
    [^c]arThe car parked in the garage.

    表达式 [^c]ar 匹配一个后面跟着 ar 的除了c的任意字符。

    -

    重复次数

    +

    重复次数

    -

    *

    +

    *

    @@ -1380,7 +1380,7 @@
    表达式匹配示例
    [a-z]*The car parked in the garage #21.
    \s*cat\s*The fat cat sat on the concatenation.

    表达式 [a-z]* 匹配一个行中所有以小写字母开头的字符串。

    -

    +

    +

    +

    @@ -1396,7 +1396,7 @@
    表达式匹配示例
    c.+tThe fat cat sat on the mat.

    表达式 c.+t 匹配以首字母c开头以t结尾,中间跟着至少一个字符的字符串。

    -

    ?

    +

    ?

    @@ -1416,7 +1416,7 @@
    表达式匹配示例
    [T]heThe car is parked in the garage.
    [T]?heThe car is parked in the garage.

    表达式 [T]?he 匹配字符串 heThe

    -

    {}

    +

    {}

    @@ -1440,7 +1440,7 @@
    表达式匹配示例
    [0-9]{2,3}The number was 9.9997 but we rounded it off to 10.0.
    [0-9]{2,}The number was 9.9997 but we rounded it off to 10.0.
    [0-9]{3}The number was 9.9997 but we rounded it off to 10.0.
    -

    (...) 特征标群

    +

    (...) 特征标群

    @@ -1457,7 +1457,7 @@
    表达式匹配示例
    (c|g|p)arThe car is parked in the garage.

    表达式 (c|g|p)ar 匹配 cargarpar。 注意 \ 是在 Markdown 中为了不破坏表格转义 |

    -

    | 或运算符

    +

    | 或运算符

    @@ -1474,7 +1474,7 @@
    表达式匹配示例
    (T|t)he|carThe car is parked in the garage.

    表达式 (T|t)he|car 匹配 (T|t)hecar

    -

    转码特殊字符

    +

    转码特殊字符

    @@ -1491,10 +1491,10 @@
    表达式匹配示例
    (f|c|m)at\.?The fat cat sat on the mat.

    如果想要匹配句子中的 . 则要写成 \. 以下这个例子 \.? 是选择性匹配.

    -

    锚点

    +

    锚点

    匹配指定开头或结尾的字符串就要使用到锚点。

    -

    ^ 号 (符串的开头)

    +

    ^ 号 (符串的开头)

    @@ -1514,7 +1514,7 @@
    表达式匹配示例
    (T|t)heThe car is parked in the garage.
    ^(T|t)heThe car is parked in the garage.
    -

    $ 号 (否是最后一个)

    +

    $ 号 (否是最后一个)

    @@ -1534,7 +1534,7 @@
    表达式匹配示例
    (at\.)The fat cat. sat. on the mat.
    (at\.)$The fat cat. sat. on the mat.
    -

    简写字符集

    +

    简写字符集

    @@ -1600,7 +1600,7 @@
    简写描述
    .除换行符外的所有字符
    \w匹配所有字母数字
    等同于 [a-zA-Z0-9_]
    \W匹配所有非字母数字,即符号
    等同于: [^\w]
    \d匹配数字: [0-9]
    \D匹配非数字: [^\d]
    \s匹配所有空格字符
    等同于:[\t\n\f\r\p{Z}]
    \S匹配所有非空格字符: [^\s]
    \f匹配一个换页符
    \n匹配一个换行符
    \r匹配一个回车符
    \t匹配一个制表符
    \v匹配一个垂直制表符
    \p匹配 CR/LF(等同于 \r\n)
    用来匹配 DOS 行终止符

    正则表达式提供一些常用的字符集简写。

    -

    ?=... 正先行断言

    +

    ?=... 正先行断言

    @@ -1617,7 +1617,7 @@
    表达式匹配示例
    (T|t)he(?=\sfat)The fat cat sat on the mat.

    Thethe 后面紧跟着 (空格)fat

    -

    ?!... 负先行断言

    +

    ?!... 负先行断言

    @@ -1634,7 +1634,7 @@
    表达式匹配示例
    (T|t)he(?!\sfat)The fat cat sat on the mat.

    匹配 Thethe,且其后不跟着 (空格)fat

    -

    ?<= ... 正后发断言

    +

    ?<= ... 正后发断言

    @@ -1651,7 +1651,7 @@
    表达式匹配示例
    (?<=(T|t)he\s)(fat|mat)The fat cat sat on the mat.

    匹配 fatmat,且其前跟着 Thethe

    -

    ?<!... 负后发断言

    +

    ?<!... 负后发断言

    @@ -1668,7 +1668,7 @@
    表达式匹配示例
    (?<!(T|t)he\s)(cat)The cat sat on cat.

    匹配 cat,且其前不跟着 Thethe

    -

    忽略大小写 (Case Insensitive)

    +

    忽略大小写 (Case Insensitive)

    @@ -1689,7 +1689,7 @@
    表达式匹配示例
    TheThe fat cat sat on the mat.
    /The/giThe fat cat sat on the mat.

    修饰语 i 用于忽略大小写,g 表示全局搜索。

    -
    +
    @@ -1710,7 +1710,7 @@
    表达式匹配示例
    /.(at)/The fat cat sat on the mat.
    /.(at)/gThe fat cat sat on the mat.

    表达式 /.(at)/g 表示搜索 任意字符(除了换行)+ at,并返回全部结果。

    -

    多行修饰符 (Multiline)

    +

    多行修饰符 (Multiline)

    @@ -1730,7 +1730,7 @@
    表达式匹配示例
    /.at(.)?$/The fat
    cat sat
    on the mat.
    /.at(.)?$/gmThe fat
    cat sat
    on the mat.
    -

    贪婪匹配与惰性匹配 (Greedy vs lazy matching)

    +

    贪婪匹配与惰性匹配 (Greedy vs lazy matching)

    @@ -1750,43 +1750,43 @@
    表达式匹配示例
    /(.*at)/The fat cat sat on the mat.
    /(.*?at)/The fat cat sat on the mat.
    -

    Python 中的正则表达式

    -

    入门

    +

    Python 中的正则表达式

    +

    入门

    导入正则表达式模块

    import re
     
    -

    实例

    +

    实例

    -

    re.search()

    +

    re.search()

    >>> sentence = 'This is a sample string'
     >>> bool(re.search(r'this', sentence, flags=re.I))
     True
     >>> bool(re.search(r'xyz', sentence))
     False
     
    -

    re.findall()

    +

    re.findall()

    >>> re.findall(r'\bs?pare?\b', 'par spar apparent spare part pare')
     ['par', 'spar', 'spare', 'pare']
     >>> re.findall(r'\b0*[1-9]\d{2,}\b', '0501 035 154 12 26 98234')
     ['0501', '154', '98234']
     
    -

    re.finditer()

    +

    re.finditer()

    >>> m_iter = re.finditer(r'[0-9]+', '45 349 651 593 4 204')
     >>> [m[0] for m in m_iter if int(m[0]) < 350]
     ['45', '349', '4', '204']
     
    -

    re.split()

    +

    re.split()

    >>> re.split(r'\d+', 'Sample123string42with777numbers')
     ['Sample', 'string', 'with', 'numbers']
     
    -

    re.sub()

    +

    re.sub()

    >>> ip_lines = "catapults\nconcatenate\ncat"
     >>> print(re.sub(r'^', r'* ', ip_lines, flags=re.M))
     * catapults
     * concatenate
     * cat
     
    -

    re.compile()

    +

    re.compile()

    >>> pet = re.compile(r'dog')
     >>> type(pet)
     <class '_sre.SRE_Pattern'>
    @@ -1795,7 +1795,7 @@
     >>> bool(pet.search('A cat crossed their path'))
     False
     
    -

    函数

    +

    函数

    @@ -1834,7 +1834,7 @@
    函数说明
    re.findall返回包含所有匹配项的列表
    re.finditer返回一个可迭代的匹配对象(每个匹配一个)
    re.search如果字符串中的任何位置存在匹配项,则返回 Match 对象
    re.split返回一个列表,其中字符串在每次匹配时被拆分
    re.sub用字符串替换一个或多个匹配项
    re.compile编译正则表达式模式供以后使用
    re.escape返回所有非字母数字反斜杠的字符串
    -

    Flags 标志

    +

    Flags 标志

    @@ -1876,10 +1876,10 @@
    :---
    re.Ire.IGNORECASE忽略大小写
    re.Mre.MULTILINE多行
    re.Lre.LOCALE使 \w\b\s locale 依赖
    re.Sre.DOTALL点匹配所有 (包括换行符)
    re.Ure.UNICODE使 \w\b\d\s unicode 依赖
    re.Xre.VERBOSE可读风格
    -

    JavaScript 中的正则表达式

    -

    RegExp

    +

    JavaScript 中的正则表达式

    +

    RegExp

    -

    属性

    +

    属性

    @@ -1930,7 +1930,7 @@
    :-:-
    dotAll是否使用了 s 修饰符
    flags返回标志的字符串
    global是否使用了 g (全部)修饰符
    hasIndices是否使用了 d 修饰符
    ignoreCase匹配文本的时候是否忽略大小写 i
    multiline是否进行多行搜索 m
    lastIndex该索引表示从哪里开始下一个匹配
    source正则表达式的文本
    sticky搜索是否是 sticky
    unicodeUnicode 功能是否开启
    -

    方法

    +

    方法

    @@ -1977,7 +1977,7 @@
    :-:-
    match()获取匹配结果
    matchAll()所有匹配项
    replace()替换所有符合正则模式的匹配项
    search()搜索以取得匹配正则模式的项
    split()切割字符串返回字符串数组
    compile()(重新)编译正则表达式
    exec()指定字符串中执行一个搜索匹配
    test()正则表达式与指定的字符串是否匹配
    toString()返回该正则表达式的字符串
    -

    test()

    +

    test()

    let textA = 'I like APPles very much';
     let textB = 'I like APPles';
     let regex = /apples$/i
    @@ -1985,7 +1985,7 @@
     console.log(regex.test(textA)); // false
     console.log(regex.test(textB)); // true
     
    -
    +
    let text = 'I like APPles very much';
     let regexA = /apples/;
     let regexB = /apples/i;
    @@ -1993,7 +1993,7 @@
     console.log(text.search(regexA)); // -1
     console.log(text.search(regexB)); // 7
     
    -

    exec()

    +

    exec()

    let text = 'Do you like apples?';
     let regex= /apples/;
     // Output: apples
    @@ -2001,14 +2001,14 @@
     // Output: Do you like apples?
     console.log(regex.exec(text).input);
     
    -

    match()

    +

    match()

    let text = 'Here are apples and apPleS';
     let regex = /apples/gi;
      
     // Output: [ "apples", "apPleS" ]
     console.log(text.match(regex));
     
    -

    split()

    +

    split()

    let text = 'This 593 string will be brok294en at places where d1gits are.';
     let regex = /\d+/g
    @@ -2016,7 +2016,7 @@
     // Output: [ "This ", " string will be brok", "en at places where d", "gits are." ] 
     console.log(text.split(regex))
     
    -

    matchAll()

    +

    matchAll()

    let regex = /t(e)(st(\d?))/g;
     let text = 'test1test2';
     let array = [...text.matchAll(regex)];
    @@ -2025,7 +2025,7 @@
     // Output: ["test2", "e", "st2", "2"]
     console.log(array[1]);
     
    -

    replace()

    +

    replace()

    let text = 'Do you like aPPles?';
     let regex = /apples/i
      
    @@ -2033,20 +2033,20 @@
     let result = text.replace(regex, 'mangoes');
     console.log(result);
     
    -

    属性示例

    +

    属性示例

    /d/s.dotAll;             // => true
     /d/g.global;             // => true
     /d/ig.flags;             // => "gi"
     /d/d.hasIndices;         // => true
     /d/i.ignoreCase;         // => true
     
    -

    多行文本中使用正则表达式

    +

    多行文本中使用正则表达式

    let s = "Please yes\nmake my day!";
     
     s.match(/yes[^]*day/);
     // 返回 'yes\nmake my day'
     
    -

    replaceAll()

    +

    replaceAll()

    let regex = /apples/gi;
     let text = 'Here are apples and apPleS';
     
    @@ -2054,8 +2054,8 @@
     // 返回: Here are mangoes and mangoes
     
    -

    PHP中的正则表达式

    -

    函数

    +

    PHP中的正则表达式

    +

    函数

    @@ -2091,7 +2091,7 @@
    :--
    preg_match()执行正则表达式匹配
    preg_match_all()执行全局正则表达式匹配
    preg_replace_callback()使用回调执行正则表达式搜索和替换
    preg_replace()执行正则表达式搜索和替换
    preg_split()按正则表达式模式拆分字符串
    preg_grep()返回与模式匹配的数组条目
    -

    preg_replace

    +

    preg_replace

    $str = "Visit Microsoft!";
     $regex = "/microsoft/i";
     
    @@ -2099,13 +2099,13 @@
     echo preg_replace($regex, "QuickRef", $str); 
     
    -

    preg_match

    +

    preg_match

    $str = "Visit QuickRef";
     $regex = "#quickref#i";
     // Output: 1
     echo preg_match($regex, $str);
     
    -

    preg_matchall

    +

    preg_matchall

    $regex = "/[a-zA-Z]+ (\d+)/";
     $input_str = "June 24, August 13, and December 30";
    @@ -2120,37 +2120,37 @@
         print_r($matches_out[1]);
     }
     
    -

    preg_grep

    +

    preg_grep

    $arr = ["Jane", "jane", "Joan", "JANE"];
     $regex = "/Jane/";
     // Output: Jane
     echo preg_grep($regex, $arr);
     
    -

    preg_split

    +

    preg_split

    $str = "Jane\tKate\nLucy Marion";
     $regex = "@\s@";
     // Output: Array("Jane", "Kate", "Lucy", "Marion")
     print_r(preg_split($regex, $str));
     
    -

    Java 中的正则表达式

    -

    风格

    +

    Java 中的正则表达式

    +

    风格

    -

    第一种方式

    +

    第一种方式

    Pattern p = Pattern.compile(".s", Pattern.CASE_INSENSITIVE);
     Matcher m = p.matcher("aS");  
     boolean s1 = m.matches();  
     System.out.println(s1);   // Outputs: true
     
    -

    第二种方式

    +

    第二种方式

    boolean s2 = Pattern.compile("[0-9]+").matcher("123").matches();  
     System.out.println(s2);   // Outputs: true
     
    -

    第三种方式

    +

    第三种方式

    boolean s3 = Pattern.matches(".s", "XXXX");  
     System.out.println(s3);   // Outputs: false
     
    -

    模式字段

    +

    模式字段

    @@ -2189,15 +2189,15 @@
    :--
    CANON_EQ规范等价
    CASE_INSENSITIVE不区分大小写的匹配
    COMMENTS允许空格和注释
    DOTALL圆点模式
    MULTILINE多行模式
    UNICODE_CASEUnicode 感知大小写折叠
    UNIX_LINESUnix 行模式
    -

    方法

    -

    Pattern

    +

    方法

    +

    Pattern

    • 模式编译 compile(字符串正则表达式 [,int flags])
    • 布尔匹配 matches([字符串正则表达式,] CharSequence 输入)
    • String[] 拆分 split(字符串正则表达式 [,int 限制])
    • 字符串引用 quote(字符串 s)
    -

    匹配器

    +

    匹配器

    • int start([int group | 字符串名称])
    • int end([int group | 字符串名称])
    • @@ -2205,14 +2205,14 @@
    • 字符 group([int 组 | 字符串名称])
    • 匹配器重置 reset()
    -

    String

    +

    String

    • boolean matches(String regex)
    • String replaceAll(String regex, 字符串替换)
    • String[] split(String regex[, int limit])

    还有更多方法...

    -

    例子

    +

    例子

    替换句子:

    String regex = "[A-Z\n]{5}$";
    @@ -2234,9 +2234,9 @@
     // Outputs: [sells, seashells, Seashore]
     System.out.println(matches);
     
    -

    MySQL中的正则表达式

    +

    MySQL中的正则表达式

    -

    函数

    +

    函数

    @@ -2267,10 +2267,10 @@
    函数名称说明
    REGEXP 字符串是否匹配正则表达式
    REGEXP_INSTR() 匹配正则表达式的子字符串的起始索引
    (注意:仅限 MySQL 8.0+)
    REGEXP_LIKE() 字符串是否匹配正则表达式
    (注意:仅 MySQL 8.0+)
    REGEXP_REPLACE()替换匹配正则表达式的子字符串
    (注意:仅限 MySQL 8.0+)
    REGEXP_SUBSTR() 返回匹配正则表达式的子字符串
    (注意:仅 MySQL 8.0+)
    -

    REGEXP

    +

    REGEXP

    expr REGEXP pat 
     
    -

    Examples

    +

    Examples

    mysql> SELECT 'abc' REGEXP '^[a-d]';
     1
     mysql> SELECT name FROM cities WHERE name REGEXP '^A';
    @@ -2279,28 +2279,28 @@
     mysql> SELECT 'a' REGEXP 'A', 'a' REGEXP BINARY 'A';
     1   0
     
    -

    REGEXP_REPLACE

    +

    REGEXP_REPLACE

    REGEXP_REPLACE(expr, pat, repl[, pos[, occurrence[, match_type]]])
     
    -

    例子

    +

    例子

    mysql> SELECT REGEXP_REPLACE('a b c', 'b', 'X');
     a X c
     mysql> SELECT REGEXP_REPLACE('abc ghi', '[a-z]+', 'X', 1, 2);
     abc X
     
    -

    REGEXP_SUBSTR

    +

    REGEXP_SUBSTR

    REGEXP_SUBSTR(expr, pat[, pos[, occurrence[, match_type]]])
     
    -

    例子

    +

    例子

    mysql> SELECT REGEXP_SUBSTR('abc def ghi', '[a-z]+');
     abc
     mysql> SELECT REGEXP_SUBSTR('abc def ghi', '[a-z]+', 1, 3);
     ghi
     
    -

    REGEXP_LIKE

    +

    REGEXP_LIKE

    REGEXP_LIKE(expr, pat[, match_type])
     
    -

    例子

    +

    例子

    mysql> SELECT regexp_like('aba', 'b+')
     1
     mysql> SELECT regexp_like('aba', 'b{2}')
    @@ -2312,10 +2312,10 @@
     mysql> SELECT regexp_like('a\nb\nc', '^b$', 'm');
     1
     
    -

    REGEXP_INSTR

    +

    REGEXP_INSTR

    REGEXP_INSTR(expr, pat[, pos[, occurrence[, return_option[, match_type]]]])
     
    -

    例子

    +

    例子

    mysql> SELECT regexp_instr('aa aaa aaaa', 'a{3}');
     2
     mysql> SELECT regexp_instr('abba', 'b{2}', 2);
    @@ -2325,7 +2325,7 @@
     mysql> SELECT regexp_instr('abbabba', 'b{2}', 1, 3, 1);
     7
     
    -

    也可以看看

    +

    也可以看看

    • 轻松学习 Regex (github.com)
    • 正则表达式实例搜集 (jaywcjlove.github.io)
    • @@ -2344,8 +2344,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -2356,7 +2354,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/resolutions.html b/docs/resolutions.html index e8fbb659..343a2219 100644 --- a/docs/resolutions.html +++ b/docs/resolutions.html @@ -34,14 +34,14 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    Resolutions 备忘清单

    此备忘清单列出了流行手机、平板电脑、笔记本电脑和手表的屏幕尺寸、可视窗口尺寸和 CSS 媒体查询

    入门

    -

    入门

    +
    • 分辨率是像素数(单个颜色点)
    • @@ -50,8 +50,8 @@
    • 用于设计
    -

    解析度清单列表

    -

    手机

    +

    解析度清单列表

    +

    手机

    @@ -1150,7 +1150,7 @@
    设备屏幕尺寸解析度可视窗口密度设备密度比率系统
    Apple iPhone 11 (2019)6.1 inch828 x 1792 px414 x 896 px326 ppi163 ppi2 xhdpiiOS 13.0
    Apple iPhone 11 Pro (2019)5.8 inch1125 x 2436 px375 x 812 px458 ppi153 ppi3 xxhdpiiOS 13.0
    Apple iPhone 11 Pro Max (2019)6.5 inch1242 x 2688 px414 x 896 px458 ppi153 ppi3 xxhdpiiOS 13.0
    Apple iPhone 12 (2020)6.1 inch1170 x 2532 px390 x 844 px460 ppi153 ppi3 xxhdpiiOS 14.1
    Apple iPhone 12 Pro (2020)6.1 inch1170 x 2532 px390 x 844 px460 ppi153 ppi3 xxhdpiiOS 14.1
    Apple iPhone 12 Pro Max (2020)6.7 inch1284 x 2778 px428 x 926 px458 ppi153 ppi3 xxhdpiiOS 14.1
    Apple iPhone 12 mini (2020)5.4 inch1080 x 2340 px360 x 780 px476 ppi159 ppi3 xxhdpiiOS 14.1
    Apple iPhone 54 inch640 x 1136 px320 x 568 px326 ppi163 ppi2.0 xhdpiiOS 6
    Apple iPhone 5c4 inch640 x 1136 px320 x 568 px326 ppi163 ppi2.0 xhdpiiOS 7
    Apple iPhone 5s4 inch640 x 1136 px320 x 568 px326 ppi163 ppi2.0 xhdpiiOS 7
    Apple iPhone 64.7 inch750 x 1334 px375 x 667 px326 ppi163 ppi2.0 xhdpiiOS 8
    Apple iPhone 6s4.7 inch750 x 1334 px375 x 667 px326 ppi163 ppi2.0 xhdpiiOS 9
    Apple iPhone 6s Plus5.5 inch1080 x 1920 px414 x 736 px401 ppi134 ppi3.0 xxhdpiiOS 9
    Apple iPhone 74.7 inch750 x 1334 px375 x 667 px326 ppi163 ppi2.0 xhdpiiOS 10.0.1
    Apple iPhone 7 Plus5.5 inch1080 x 1920 px414 x 736 px401 ppi134 ppi3.0 xxhdpiiOS 10.0.1
    Apple iPhone 84.7 inch750 x 1334 px375 x 667 px326 ppi163 ppi2.0 xhdpiiOS 11
    Apple iPhone 8 Plus5.5 inch1080 x 1920 px414 x 736 px401 ppi134 ppi3.0 xxhdpiiOS 11
    Apple iPhone SE4.0 inch640 x 1136 px320 x 568 px326 ppi163 ppi2 xhdpiiOS 9.3.2
    Apple iPhone SE (2020)4.7 inch750 x 1334 px375 x 667 px326 ppi163 ppi2 xhdpiiOS 13.0
    Apple iPhone X5.8 inch1125 x 2436 px375 x 812 px458 ppi153 ppi3.0 xxhdpiiOS 11.1.1
    Apple iPhone XR6.1 inch828 x 1792 px414 x 896 px326 ppi163 ppi2.0 xhdpiiOS 12
    Apple iPhone XS5.8 inch1125 x 2436 px375 x 812 px458 ppi153 ppi3.0 xxhdpiiOS 12
    Apple iPhone XS Max6.5 inch1242 x 2688 px414 x 896 px458 ppi153 ppi3.0 xxhdpiiOS 12
    Google Pixel5.0 inch1080 x 1920 px412 x 732 px441 ppi168 ppi2.625 xxhdpiAndroid 7.1
    Google Pixel5.0 inch1080 x 1920 px411 x 731 px441 ppi168 ppi2.6 xxhdpiAndroid 7.1
    Google Pixel 25.0 inch1080 x 1920 px412 x 732 px441 ppi168 ppi2.625 xxhdpiAndroid 8.0
    Google Pixel 2 XL6.0 inch1440 x 2880 px538 ppi154 ppi3.5 xxxhdpiAndroid 8.0
    Google Pixel 3 (2018)5.5 inch1080 x 2160 px393 x 786 px443 ppi161 ppi2.75 xxhdpiAndroid 9.0
    Google Pixel 3 XL (2018)6.3 inch1440 x 2960 px412 x 846 px523 ppi149 ppi3.5 xxxhdpiAndroid 9.0
    Google Pixel 3a (2019)5.6 inch1080 x 2220 px393 x 808 px441 ppi160 ppi2.75 xxhdpiAndroid 9.0
    Google Pixel 3a XL (2019)6 inch1080 x 2160 px412 x 823 px402 ppi153 ppi2.625 xxhdpiAndroid 9.0
    Google Pixel 4 (2019)5.7 inch1080 x 2280 px393 x 830 px444 ppi161 ppi2.75 xxhdpiAndroid 10.0
    Google Pixel 4 XL (2019)6.3 inch1440 x 3040 px412 x 869 px537 ppi153 ppi3.5 xxxhdpiAndroid 10
    Google Pixel 4a (2020)5.81 inch1080 x 2340 px393 x 851 px443 ppi161 ppi2.75 xxhdpiAndroid 10.0
    Google Pixel 5 (2020)6 inch1080 x 2340 px393 x 851 px432 ppi157 ppi2.75 xxhdpiAndroid 11.0
    Google Pixel XL5.5 inch1440 x 2560 px534 ppi153 ppi3.5 xxxhdpiAndroid 7.1
    HTC Desire 10 Lifestyle5.5 inch720 x 1280 px360 x 640 px267 ppi134 ppi2.0 xhdpiAndroid 6.0
    HTC Desire 6285.0 inch720 x 1280 px360 x 640 px294 ppi147 ppi2.0 xhdpiAndroid 5.1
    Honor 6X (2016)5.5 inch1080 x 1920 px360 x 640 px403 ppi134 ppi3 xxhdpiAndroid 6.0
    Honor 7X (2017)5.93 inch1080 x 2160 px360 x 720 px407 ppi136 ppi3 xxhdpiAndroid 7.0
    Honor 8X (2018)6.5 inch1080 x 2340 px360 x 780 px397 ppi132 ppi3 xxhdpiAndroid 8.1
    Honor 9X (2019)6.59 inch1080 x 2340 px360 x 780 px391 ppi130 ppi3 xxhdpiAndroid 9.0
    Huawei Mate 10 Lite (2017)5.9 inch1080 x 2160 px360 x 720 px409 ppi136 ppi3 xxhdpiAndroid 7.0
    Huawei Mate 20 Lite (2018)6.3 inch1080 x 2340 px360 x 780 px409 ppi136 ppi3 xxhdpiAndroid 8.1
    Huawei Mate 20 Pro (2018)6.39 inch1440 x 3120 px360 x 780 px538 ppi135 ppi4 xxxhdpiAndroid 9.0
    Huawei Mate 30 (2019)6.62 inch1080 x 2340 px360 x 780 px389 ppi130 ppi3 xxhdpiAndroid 10.0
    Huawei Mate 30 Pro (2019)6.53 inch1176 x 2400 px392 x 800 px409 ppi136 ppi3 xxhdpiAndroid 10.0
    Huawei Nova 7i (2020)6.4 inch1080 x 2310 px360 x 770 px398 ppi133 ppi3 xxhdpiAndroid 10.0
    Huawei Y9 Prime (2019)6.59 inch1080 x 2340 px360 x 780 px391 ppi130 ppi3 xxhdpiAndroid 9.0
    Huawei Y9s (2019)6.59 inch1080 x 2340 px360 x 780 px391 ppi130 ppi3 xxhdpiAndroid 9.0
    LG G55.3 inch1440 x 2560 px360 x 640 px554 ppi139 ppi4.0 xxxhdpiAndroid 6.0.1
    Motorola Moto E5 Plus6.0 inch720 x 1440 px268 ppi134 ppi2.0 xhdpiAndroid 8.0
    OnePlus 66.28 inch1080 x 2280 px412 x 869 px402 ppi153 ppi2.625 xxhdpiAndroid 8.1
    OnePlus 6T6.41 inch1080 x 2340 px412 x 892 px402 ppi153 ppi2.625 xxhdpiAndroid 9.0
    OnePlus 76.41 inch1080 x 2340 px412 x 892 px402 ppi153 ppi2.625 xxhdpiAndroid 9.0
    OnePlus 7 Pro6.67 inch1440 x 3120 px412 x 892 px516 ppi147 ppi3.5 xxxhdpiAndroid 9.0
    OnePlus 7T (2019)6.55 inch1080 x 2400 px412 x 914 px402 ppi153 ppi2.625 xxhdpiAndroid 10.0
    OnePlus 8 (2020)6.55 inch1080 x 2400 px412 x 915 px402 ppi153 ppi2.625 xxhdpiAndroid 10.0
    OnePlus 8 Pro (2020)6.78 inch1440 x 3168 px412 x 906 px513 ppi147 ppi3.5 xxxhdpiAndroid 10.0
    OnePlus 8T (2020)6.55 inch1080 x 2400 px412 x 914 px402 ppi153 ppi2.625 xxhdpiAndroid 11.0
    OnePlus Nord (2020)6.44 inch1080 x 2400 px412 x 915 px408 ppi155 ppi2.625 xxhdpiAndroid 10.0
    Redmi Note 9 Pro (2020)6.67 inch1080 x 2400 px393 x 873 px395 ppi144 ppi2.75 xxhdpiAndroid 10.0
    Samsung A50 (2019)6.4 inch1080 x 2340 px412 x 892 px403 ppi154 ppi2.625 xxhdpiAndroid 9.0
    Samsung Galaxy A30 (2019)6.4 inch1080 x 2340 px412 x 892 px403 ppi154 ppi2.625 xxhdpiAndroid 9.0
    Samsung Galaxy A50s (2019)6.4 inch1080 x 2340 px412 x 892 px403 ppi154 ppi2.625 xxhdpiAndroid 9.0
    Samsung Galaxy A51 (2019)6.5 inch1080 x 2400 px412 x 914 px405 ppi154 ppi2.625 xxhdpiAndroid 10.0
    Samsung Galaxy A6s6.0 inch1080 x 2160 px360 x 720 px402 ppi134 ppi3.0 xxhdpiAndroid 8.0
    Samsung Galaxy A70s (2019)6.7 inch1080 x 2400 px412 x 914 px393 ppi150 ppi2.625 xxhdpiAndroid 9.0
    Samsung Galaxy A71 (2020)6.7 inch1080 x 2400 px412 x 914 px393 ppi150 ppi2.625 xxhdpiAndroid 10.0
    Samsung Galaxy Fold (2019)7.3 inch1536 x 2152 px768 x 1076 px362 ppi181 ppi2 xhdpiAndroid 9.0
    Samsung Galaxy J45.5 inch720 x 1280 px134 ppi2 xhdpiAndroid 8.0
    Samsung Galaxy J55.0 inch720 x 1280 px294 ppi2 xhdpiAndroid 5.1
    Samsung Galaxy J5 Prime5.0 inch720 x 1280 px294 ppi147 ppi2 xhdpiAndroid 6.0.1
    Samsung Galaxy J65.6 inch720 x 1480 px293 ppi147 ppi2 xhdpiAndroid 8.0
    Samsung Galaxy J75.5 inch720 x 1280 px360 x 640 px267 ppi134 ppi2.0 xhdpiAndroid 6.0.1
    Samsung Galaxy J7 Prime5.5 inch1080 x 1920 px360 x 640 px401 ppi134 ppi3.0 xxhdpiAndroid 6.0.1
    Samsung Galaxy J7 Prime2 (2018)5.5 inch1080 x 1920 px412 x 732 px401 ppi153 ppi2.625 xxhdpiAndroid 7.0
    Samsung Galaxy J7 Pro5.5 inch1080 x 1920 px401 ppi134 ppi3 xxhdpiAndroid 7.0
    Samsung Galaxy J86.0 inch720 x 1480 px274 ppi137 ppi2 xhdpiAndroid 8.0
    Samsung Galaxy Note20 (2020)6.7 inch1080 x 2400 px412 x 915 px393 ppi150 ppi2.625 xxhdpiAndroid 10.0
    Samsung Galaxy Note20 Ultra (2020)6.9 inch1440 x 3088 px412 x 883 px496 ppi142 ppi3.5 xxxhdpiAndroid 10.0
    Samsung Galaxy Note86.3 inch1440 x 2960 px521 ppi149 ppi3.5 xxxhdpiAndroid 7.1.1
    Samsung Galaxy On85.5 inch1080 x 1920 px360 x 640 px401 ppi134 ppi3.0 xxhdpiAndroid 6.0.1
    Samsung Galaxy S106.1 inch1440 x 3040 px360 x 760 px550 ppi138 ppi4 xxxhdpiAndroid 9.0
    Samsung Galaxy S10 Lite (2020)6.7 inch1080 x 2400 px412 x 914 px394 ppi150 ppi2.625 xxhdpiAndroid 10.0
    Samsung Galaxy S10+6.4 inch1440 x 3040 px412 x 869 px522 ppi149 ppi3.5 xxxhdpiAndroid 9.0
    Samsung Galaxy S20 (2020)6.4 inch1440 x 3200 px360 x 800 px563 ppi141 ppi4 xxxhdpiAndroid 10.0
    Samsung Galaxy S20 FE (2020)6.5 inch1080 x 2400 px412 x 914 px407 ppi155 ppi2.625 xxhdpiAndroid 10.0
    Samsung Galaxy S20 Ultra (2020)6.9 inch1440 x 3200 px412 x 915 px511 ppi146 ppi3.5 xxxhdpiAndroid 10.0
    Samsung Galaxy S20+ (2020)6.7 inch1440 x 3200 px384 x 854 px525 ppi140 ppi3.75 xxxhdpiAndroid 10.0
    Samsung Galaxy S21 Ultra (2021)6.8 inch1440 x 3200 px384 x 854 px515 ppi137 ppi3.75 xxxhdpiAndroid 11.0
    Samsung Galaxy S85.8 inch1440 x 2960 px360 x 740 px570 ppi142 ppi4.0 xxxhdpiAndroid 7.0
    Samsung Galaxy S8+6.2 inch1440 x 2960 px529 ppi132 ppi4.0 xxxhdpiAndroid 7.0
    Samsung Galaxy S95.8 inch1440 x 2960 px360 x 740 px570 ppi142 ppi4.0 xxxhdpiAndroid 8.0
    Samsung Galaxy S9+6.2 inch1440 x 2960 px529 ppi151 ppi4 xxxhdpiAndroid 8.0
    Samsung Galaxy Z Flip (2020)6.7 inch1080 x 2636 px412 x 1004 px425 ppi162 ppi2.625 xxhdpiAndroid 10.0
    Samsung Galaxy Z Fold2 (2020)7.6 inch1768 x 2208 px884 x 1104 px373 ppi187 ppi2 xhdpiAndroid 10.0
    Samsung Note10 (2019)6.3 inch1080 x 2280 px412 x 869 px401 ppi153 ppi2.625 xxhdpiAndroid 9.0
    Samsung Note10+ (2019)6.8 inch1440 x 3040 px412 x 869 px498 ppi142 ppi3.5 xxxhdpiAndroid 9.0
    Samsung S65.1 inch1440 x 2560 px360 x 640 px577 ppi144 ppi4.0 xxxhdpiAndroid 5.0.2
    Samsung S6 edge5.1 inch1440 x 2560 px360 x 640 px577 ppi144 ppi4.0 xxxhdpiAndroid 5.0.2
    Samsung S75.1 inch1440 x 2560 px360 x 640 px577 ppi144 ppi4.0 xxxhdpiAndroid 6.0
    Samsung S7 edge5.5 inch1440 x 2560 px360 x 640 px534 ppi153 ppi4.0 xxxhdpiAndroid 6.0
    Sony Xperia X5 inch1080 x 1920 px360 x 640 px441 ppi147 ppi3.0 xxhdpiAndroid 6.0.1
    Sony Xperia XZ5.2 inch1080 x 1920 px360 x 640 px424 ppi141 ppi3.0 xxhdpiAndroid 6.0.1
    Xiaomi Redmi Note 7 (2019)6.3 inch1080 x 2340 px393 x 851 px409 ppi149 ppi2.75 xxhdpiAndroid 9.0
    Xiaomi Redmi Note 8 (2019)6.3 inch1080 x 2340 px393 x 851 px409 ppi149 ppi2.75 xxhdpiAndroid 9.0
    Xiaomi Redmi Note 8 Pro (2019)6.53 inch1080 x 2340 px393 x 851 px395 ppi144 ppi2.75 xxhdpiAndroid 9.0
    -

    平板

    +

    平板

    @@ -1349,7 +1349,7 @@
    设备屏幕尺寸解析度可视窗口密度设备密度比率系统
    Apple iPad 10.2" (2019)10.2 inch1620 x 2160 px810 x 1080 px264 ppi132 ppi2 xhdpiiPadOS 13.1.2
    Apple iPad 10.2" (2020)10.2 inch1620 x 2160 px810 x 1080 px264 ppi132 ppi2 xhdpiiPadOS 14
    Apple iPad Air9.7 inch1536 x 2048 px768 x 1024 px264 ppi132 ppi2.0 xhdpiiOS 7
    Apple iPad Air 10.5" (2019)10.5 inch1668 x 2224 px834 x 1112 px264 ppi132 ppi2 xhdpiiPadOS 13.1.2
    Apple iPad Air 10.9" (2020)10.9 inch1640 x 2360 px820 x 1180 px264 ppi132 ppi2 xhdpiiPadOS 14
    Apple iPad Air 29.7 inch1536 x 2048 px768 x 1024 px264 ppi132 ppi2.0 xhdpiiOS 8.1
    Apple iPad Mini 7.9" (2019)7.9 inch1536 x 2048 px768 x 1024 px324 ppi162 ppi2 xhdpiiPadOS 13.1.2
    Apple iPad Pro12.9 inch2048 x 2732 px1024 x 1366 px264 ppi132 ppi2.0 xhdpiiOS 9
    Apple iPad Pro 10.5 (2017)10.5 inch1668 x 2224 px834 x 1112 px264 ppi132 ppi2.0 xhdpiiOS 11
    Apple iPad Pro 11" (2018)11 inch1668 x 2388 px834 x 1194 px264 ppi132 ppi2 xhdpiiPadOS 13.1.2
    Apple iPad Pro 11" (2020)11 inch1668 x 2388 px834 x 1194 px264 ppi132 ppi2 xhdpiiPadOS 13.4
    Apple iPad Pro 12.9" (2018)12.9 inch2048 x 2732 px1024 x 1366 px264 ppi132 ppi2 xhdpiiPadOS 13.1.2
    Apple iPad Pro 12.9" (2020)12.9 inch2048 x 2732 px1024 x 1366 px264 ppi132 ppi2 xhdpiiPadOS 13.4
    Apple iPad Pro 9.79.7 inch1536 x 2048 px768 x 1024 px264 ppi132 ppi2.0 xhdpiiOS 9.3.2
    Apple iPad Pro 9.7 (2017)9.7 inch1536 x 2048 px768 x 1024 px264 ppi132 ppi2.0 xhdpiiOS 10.3
    Apple iPad mini 37.9 inch1536 x 2048 px768 x 1024 px324 ppi132 ppi2.0 xhdpiiOS 9
    Apple iPad mini 47.9 inch1536 x 2048 px768 x 1024 px324 ppi162 ppi2.0 xhdpiiOS 8.1
    Google Pixel C (2015)10.2 inch2560x1800 px1280 x 900 px308 ppi154 ppi2 xhdpiAndroid 6.0.1
    -

    笔记本电脑

    +

    笔记本电脑

    @@ -1578,7 +1578,7 @@
    设备屏幕尺寸解析度可视窗口密度设备密度比率系统
    MacBook 2015 12"12 inch2304 x 1440 px1280 x 800 px226 ppi113 ppi2.0 xhdpimacOS Sierra
    MacBook 2016 12"12 inch2304 x 1440 px1280 x 800 px226 ppi113 ppi2.0 xhdpimacOS Sierra
    MacBook 2017 12"12 inch2304 x 1440 px1280 x 800 px226 ppi113 ppi2.0 xhdpimacOS Sierra
    MacBook Air 2014 11"11.6 inch1366 x 768 px1366 x 768 px135 ppi135 ppi1.0 mdpiOS X Mavericks
    MacBook Air 2014 13"13.3 inch1440 x 900 px1440 x 900 px128 ppi128 ppi1.0 mdpiOS X Mavericks
    MacBook Air 2015 11"11.6 inch1366 x 768 px1366 x 768 px135 ppi135 ppi1.0 mdpiOS X El Capitan
    MacBook Air 2015 13"13.3 inch1440 x 900 px1440 x 900 px128 ppi128 ppi1.0 mdpimacOS Sierra
    MacBook Air 2017 13"13.3 inch1440 x 900 px1440 x 900 px128 ppi128 ppi1.0 mdpimacOS Mojave
    MacBook Air 2018 13"13.3 inch2560 x 1600 px1280 x 800 px227 ppi113 ppi2.0 xhdpimacOS Mojave
    MacBook Air 2020 13"13.3 inch2560 x 1600 px1280 x 800 px227 ppi114 ppi2 xhdpimacOS Catalina
    MacBook Pro 13" 201813.3 inch2560 x 1600 px1280 x 800 px227 ppi113 ppi2.0 xhdpimacOS Mojave
    MacBook Pro 15" 201815.4 inch2880 x 1800 px1440 x 900 px220 ppi112 ppi2.0 xhdpimacOS Mojave
    MacBook Pro 16" 201916 inch3072 x 1920 px1536 x 960 px226 ppi113 ppi2.0 xhdpimacOS Catalina
    MacBook Pro 2014 13"13.4 inch2560 x 1600 px1280 x 800 px227 ppi113 ppi2.0 xhdpimacOS Sierra
    MacBook Pro 2014 15"15.4 inch2880 x 1800 px1440 x 900 px220 ppi112 ppi2.0 xhdpimacOS Sierra
    MacBook Pro 2015 13"13.4 inch2560 x 1600 px1280 x 800 px227 ppi113 ppi2.0 xhdpimacOS Sierra
    MacBook Pro 2015 15"15.4 inch2880 x 1800 px1440 x 900 px220 ppi112 ppi2.0 xhdpimacOS Sierra
    MacBook Pro 2016 13"13.4 inch2560 x 1600 px1280 x 800 px227 ppi113 ppi2.0 xhdpimacOS Sierra
    MacBook Pro 2016 15"15.4 inch2880 x 1800 px1440 x 900 px220 ppi112 ppi2.0 xhdpimacOS Sierra
    MacBook Pro 2017 13"13.4 inch2560 x 1600 px1280 x 800 px227 ppi113 ppi2.0 xhdpimacOS Sierra
    MacBook Pro 2017 15"15.4 inch2880 x 1800 px1440 x 900 px220 ppi112 ppi2.0 xhdpimacOS Sierra
    -

    智能手表

    +

    智能手表

    @@ -1797,7 +1797,7 @@
    设备屏幕尺寸解析度可视窗口密度设备密度比率系统
    Apple Watch SE (40mm) (2020)1.57 inch394 x 324 px197 x 162 px326 ppi163 ppi2 xhdpiwatchOS 7.0
    Apple Watch SE (44mm) (2020)1.78 inch448 x 368 px224 x 184 px326 ppi163 ppi2 xhdpiwatchOS 7.0
    Apple Watch Series 3 (38mm)1.5 inch340 x 272 px170 x 136 px290 ppi145 ppi2 xhdpiwatchOS 4.0
    Apple Watch Series 3 (42mm)1.65 inch390 x 312 px195 x 156 px303 ppi152 ppi2 xhdpiwatchOS 4.0
    Apple Watch Series 4 (40mm)1.57 inch394 x 324 px197 x 162 px326 ppi163 ppi2 xhdpiwatchOS 5.0
    Apple Watch Series 4 (44mm)1.78 inch448 x 368 px224 x 184 px326 ppi163 ppi2 xhdpiwatchOS 5.0
    Apple Watch Series 5 (40mm) (2019)1.57 inch394 x 324 px197 x 162 px326 ppi163 ppi2 xhdpiwatchOS 6.0
    Apple Watch Series 5 (44mm) (2019)1.78 inch448 x 368 px224 x 184 px326 ppi163 ppi2 xhdpiwatchOS 6.0
    Apple Watch Series 6 (40mm) (2020)1.57 inch394 x 324 px197 x 162 px326 ppi163 ppi2 xhdpiwatchOS 7.0
    Apple Watch Series 6 (44mm) (2020)1.78 inch448 x 368 px224 x 184 px326 ppi163 ppi2 xhdpiwatchOS 7.0
    Asus Zenwatch 2 (2015)1.63 inch320 x 320 px213 x 213 px278 ppi185 ppi1.5 hdpi
    Asus Zenwatch 3 (2016)1.39 inch400 x 400 px267 x 267 px287 ppi191 ppi1.5 hdpiAndroid Wear OS 2.1
    Asus Zenwatch 3 (2016)1.39 inch400 x 400 px267 x 267 px287 ppi191 ppi1.5 hdpiAndroid Wear OS 2.1
    Huawei Watch GT (2018)1.39 inch454 x 454 px227 x 227 px326 ppi163 ppi2 xhdpi
    Huawei Watch Magic (2018)1.2 inch390 x 390 px195 x 195 px326 ppi163 ppi2 xhdpi
    LG G Watch R (2015)1.3 inch320 x 320 px213 x 213 px245 ppi163 ppi1.5 hdpiAndroid Wear OS 1.0
    LG Watch Sport (2017)1.38 inch480 x 480 px240 x 240 px348 ppi174 ppi2 xhdpiAndroid Wear 2.0
    LG Watch Urbane 2nd Edition (2016)1.38 inch480 x 480 px240 x 240 px348 ppi174 ppi2 xhdpiAndroid Wear 2.0
    LG Watch W7 (2018)1.2 inch360 x 360 px240 x 240 px300 ppi200 ppi1.5 hdpiAndroid Wear OS 2.0
    Samsung Galaxy Watch (2018)1.3 inch360 x 360 px240 x 240 px278 ppi185 ppi1.5 hdpiTizen-based
    wearable OS 4.0
    -

    常见的显示分辨率(N/A = 不适用)

    +

    常见的显示分辨率(N/A = 不适用)

    @@ -1990,7 +1990,7 @@
    标准纵横比可视窗口百万像素Steam(%)Stat Counter(%)
    nHD16:9640 x 360 px0.230N/A0.47
    SVGA4:3800 x 600 px0.480N/A0.76
    XGA4:31024 x 768 px0.7860.382.78
    WXGA16:91280 x 720 px0.9220.364.82
    WXGA16:101280 x 800 px1.0240.613.08
    SXGA5:41280 x 1024 px1.3111.242.47
    HD≈16:91360 x 768 px1.0441.551.38
    HD≈16:91366 x 768 px1.04910.2223.26
    WXGA+16:101440 x 900 px1.2963.126.98
    N/A16:91536 x 864 px1.327N/A8.5
    HD+16:91600 x 900 px1.4402.594.14
    WSXGA+16:101680 x 1050 px1.7641.972.23
    FHD16:91920 x 1080 px2.07464.8120.41
    WUXGA16:101920 x 1200 px2.3040.810.93
    QWXGA16:92048 x 1152 px2.359N/A0.51
    QXGA4:32048 x 1536 px3.145--
    UWFHD≈21:92560 x 1080 px2.7651.13N/A
    QHD16:92560 x 1440 px3.6866.232.15
    WQXGA16:102560 x 1600 px4.096<0.58<2.4
    UWQHD≈21:93440 x 1440 px4.9540.87N/A
    4K UHD16:93840 x 2160 px8.2942.12N/A
    Other---2.0015.09
    -

    屏幕分辨率

    +

    屏幕分辨率

    @@ -2037,7 +2037,7 @@
    解析度像素
    540p / qHD960×540px
    720p / HD1280×720px
    1080p / Full HD / FHD19201080px
    2K2048×1080px
    1440p / QHD / QuadHD / WQHD2560×1440px
    2160p / UHD3840×2160px
    4K4096×2160px
    5K5120×2880px
    8K / 8K UHD7680×4320px
    -

    显示分辨率和用例

    +

    显示分辨率和用例

    @@ -2077,7 +2077,7 @@
    解析度名称设备
    8K (8K UHD)TVs
    “Cinema” 4K (4K)投影仪
    UHD (4K, Ultra HD, Ultra-High Definition)TVs, 监视器, 智能手机
    2K (none)投影仪
    WUXGA (Widescreen Ultra Extended Graphics Array)监视器, 投影仪
    1080p (Full HD, FHD, HD, High Definition)TVs, 监视器, 智能手机
    720p (HD, High Definition) TVs, 智能手机
    -

    另见

    +

    另见

    • 通用解析度列表 (en.wikipedia.org)
    • 显示屏分辨率 (en.wikipedia.org)
    • @@ -2095,8 +2095,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -2107,7 +2105,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/sass.html b/docs/sass.html index 7e4e8f52..1c1c1677 100644 --- a/docs/sass.html +++ b/docs/sass.html @@ -34,15 +34,15 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    Sass

    这是一份快速参考备忘单,列出了 SASS 最有用的功能。

    Sass 基础

    -

    Sass 基础

    +

    介绍

    • Sass 官方文档 (sass-lang.com)
    • @@ -56,19 +56,19 @@ $ sass --watch input.scss output.css $ sass --watch app/sass:public/css
      -

    变量

    +

    变量

    $defaultLinkColor: #46EAC2;
     a {
       color: $defaultLinkColor;
     }
     
    -

    字符串插值

    +

    字符串插值

    $wk: -webkit-;
     .rounded-box {
       #{$wk}border-radius: 4px;
     }
     
    -

    注释

    +

    注释

    /*
      这是多行注释
      块注释
    @@ -76,7 +76,7 @@
     */
     // 这是一条单行注释
     
    -

    Extend

    +

    Extend

    .button {
       ···
     }
    @@ -84,7 +84,7 @@
       @extend .button;
     }
     
    -

    嵌套(Nesting)

    +

    嵌套(Nesting)

    nav {
       ul {
    @@ -109,7 +109,7 @@
       display: block;
     }
     
    -

    模块(片段)

    +

    模块(片段)

    // _base.scss
     $font-stack:    Helvetica, sans-serif;
    @@ -130,7 +130,7 @@
       color: white;
     }
     
    -

    混合(Mixins)

    +

    混合(Mixins)

    @mixin heading-font {
         font-family: sans-serif;
         font-weight: bold;
    @@ -140,7 +140,7 @@
     }
     

    查看: 混合(Mixins)

    -

    @import

    +

    @import

    @import './other_sass_file';
     @import '/code', 'lists';
     // 纯 CSS @imports
    @@ -148,8 +148,8 @@
     @import url(theme);
     

    .sass.sass 扩展名是可选的。

    -

    Sass 混合(Mixins)

    -

    参数

    +

    Sass 混合(Mixins)

    +

    参数

    @mixin font-size($n) {
       font-size: $n * 1.2em;
     }
    @@ -159,7 +159,7 @@
       @include font-size(2);
     }
     
    -

    默认值

    +

    默认值

    @mixin pad($n: 10px) {
         padding: $n;
     }
    @@ -169,7 +169,7 @@
         @include pad(15px);
     }
     
    -

    默认变量

    +

    默认变量

    $default-padding: 10px;
     @mixin pad($n: $default-padding) {
       padding: $n;
    @@ -178,17 +178,17 @@
       @include pad(15px);
     }
     
    -

    Sass 颜色函数

    +

    Sass 颜色函数

    -

    rgba

    +

    rgba

    rgb(100, 120, 140)
     rgba(100, 120, 140, .5)
     rgba($color, .5)
     
    -

    Mixing

    +

    Mixing

    mix($a, $b, 10%)   // 10% a, 90% b
     
    -

    修改 HSLA

    +

    修改 HSLA

    darken($color, 5%)
     lighten($color, 5%)
     
    @@ -204,15 +204,15 @@ fade-out($color, .5) // aka transparentize() rgba($color, .5) // sets alpha to .5
    -

    获取值

    +

    获取值

    -

    HSLA

    +

    HSLA

    hue($color)         // 0deg..360deg
     saturation($color)  // 0%..100%
     lightness($color)   // 0%..100%
     alpha($color)       // 0..1 (aka opacity())
     
    -

    RGB

    +

    RGB

    red($color)         // 0..255
     green($color)
     blue($color)
    @@ -253,13 +253,13 @@
     
     
    :-:-
    color.red()用于获取颜色的红色通道
    color.green()用于获得颜色的绿色通道
    color.blue()用于获取颜色的蓝色通道
    color.hue()以获得颜色的色调
    color.saturation()用于获得颜色的饱和度
    color.lightness()以获得颜色的亮度

    另见: hue(), red()

    -

    Sass 内置了对颜色值的支持

    +

    Sass 内置了对颜色值的支持

    @debug rgb(204, 102, 153);  // #c69
     @debug rgba(107, 113, 127, 0.8); // rgba(107, 113, 127, 0.8)
     @debug hsl(228, 7%, 86%);        // #dadbdf
     @debug hsla(20, 20%, 85%, 0.7);  // rgb(225, 215, 210, 0.7)
     
    -

    调整

    +

    调整

    // 固定金额变动
     adjust-color($color, $blue: 5)
     adjust-color($color, $lightness: -30%) // darken(_, 30%)
    @@ -272,8 +272,8 @@
     change-color($color, $blue: 250)
     

    支持的: $red, $green, $blue, $hue, $saturation, $lightness, $alpha

    -

    Sass 其他函数

    -

    字符串

    +

    Sass 其他函数

    +

    字符串

    unquote('hello')
     quote(bold); // "bold"
    @@ -287,7 +287,7 @@
     str-slice(hello, 2, 5)
     str-insert("abcd", "X", 1) // "Xabcd"
     
    -

    Numbers

    +

    Numbers

    floor(4.2)  // 4
     ceil(4.2)   // 5
    @@ -303,15 +303,15 @@
     
    percentage(.5)   // 50%
     random(3)        // 0..3
     
    -

    Units

    +

    Units

    unit(3em)        // 'em'
     unitless(100px)  // false
     
    -

    Units

    +

    Units

    unit(3em)        // 'em'
     unitless(100px)  // false
     
    -

    Misc

    +

    Misc

    // 检查 $red
     variable-exists(red)
     // 检查@mixin red-text
    @@ -331,9 +331,9 @@
     selector-replace(...)
     selector-unify(...)
     
    -

    Sass 功能检查

    +

    Sass 功能检查

    -

    功能检查

    +

    功能检查

    meta.feature-exists($feature)
     feature-exists($feature) //=> boolean
     
    @@ -348,7 +348,7 @@ // Content! }
    -

    功能

    +

    功能

    @@ -380,8 +380,8 @@
    :-:-
    global-variable-shadowing #这意味着局部变量将隐藏全局变量,除非它具有 !global 标志
    extend-selector-pseudoclass #这意味着 @extend 规则将影响嵌套在伪类中的选择器,如 :not()
    units-level-3 #这意味着单位算术支持在 CSS 值和单位级别 3 中定义的单位
    at-error #这意味着支持 @error 规则
    custom-property #这意味着自定义属性声明值不支持除插值之外的任何表达式
    -

    Sass 循环

    -

    For 循环

    +

    Sass 循环

    +

    For 循环

    $base-color: #036;
     
     @for $i from 1 through 3 {
    @@ -403,7 +403,7 @@
       background-color: #0059b3;
     }
     
    -

    Each 循环(简单)

    +

    Each 循环(简单)

    $sizes: 40px, 50px;
     
     @each $size in $sizes {
    @@ -424,7 +424,7 @@
       height: 50px;
     }
     
    -

    Each 循环(嵌套)

    +

    Each 循环(嵌套)

    $icons: ("eye": "\f112", "start": "\f12e");
     
     @each $name, $glyph in $icons {
    @@ -447,7 +447,7 @@
       content: "";
     }
     
    -

    While 循环

    +

    While 循环

    @use "sass:math";
     
    @@ -469,8 +469,8 @@
       font-size: 12.36094px;
     }
     
    -

    Sass 其它功能

    -

    条件句

    +

    Sass 其它功能

    +

    条件句

    @mixin avatar($size, $circle: false) {
       width: $size;
    @@ -500,25 +500,25 @@
       border-radius: 50px;
     }
     
    -

    插值

    +

    插值

    .#{$klass} { ... }      // Class
     call($function-name)    // Functions
     @media #{$tablet}
     font: #{$size}/#{$line-height}
     url("#{$background}.jpg")
     
    -

    列表

    +

    列表

    $list: (a b c);
     nth($list, 1)  // starts with 1
     length($list)
     @each $item in $list { ... }
     
    -

    Maps

    +

    Maps

    $map: (key1: value1, key2: value2, key3: value3);
     map-get($map, key1)
     
    -

    另见

    +

    另见

    • Sass 官方文档 (sass-lang.com)
    • Sass 中文文档 (sass.hk)
    • @@ -536,8 +536,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -548,7 +546,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/screen.html b/docs/screen.html index 1ccd27ba..baf1a315 100644 --- a/docs/screen.html +++ b/docs/screen.html @@ -34,14 +34,14 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    Screen 备忘清单

    这是 screen 命令的快速参考指南备忘单。

    入门

    -

    入门

    +

    快速开始

    $ screen 
     

    @@ -53,7 +53,7 @@

    3. 重新附加屏幕会话

    $ screen -r <name/pid>
     
    -

    选项

    +

    选项

    @@ -102,7 +102,7 @@
    选项示例说明
    -Sscreen -S debug使用会话名称启动新会话
    -lsscreen -ls列出正在运行的会话/屏幕
    -xscreen -x附加到正在运行的会话
    -rscreen -r debug使用名称附加到正在运行的会话
    -Rscreen -R debug附加到会话 (如果它不存在将创建)
    -dscreen -d -m wget xxxx.com/large.file分离模式下的开始屏幕
    -Xscreen -X -S debug kill终止正在运行的会话
    -

    进入

    +

    进入

    @@ -133,7 +133,7 @@
    CommandDescription
    screen -S <name>使用会话名称开始新的屏幕会话
    screen -ls列出正在运行的会话/屏幕
    screen -x附加到正在运行的会话
    screen -r <name>使用名称附加到正在运行的会话
    screen -dRR“终极附加”
    -

    窗口管理

    +

    窗口管理

    @@ -190,7 +190,7 @@
    CommandDescription
    Ctrl-A C创建新窗口
    Ctrl-A Ctrl-A更改为上次访问的活动窗口
    Ctrl-A 0...9按编号切换到窗口
    Ctrl-A ' <0...9 or title>按编号或名称更改为窗口
    Ctrl-A N or Ctrl-A <space>切换到列表中的下一个窗口
    Ctrl-A P or Ctrl-A <backspace>切换到列表中的上一个窗口
    Ctrl-A "查看窗口列表
    Ctrl-A W显示窗口栏
    Ctrl-A K杀死当前窗口 (不推荐)
    Ctrl-A \杀死所有窗口 (不推荐)
    Ctrl-A A重命名当前窗口
    -

    出去

    +

    出去

    @@ -218,7 +218,7 @@
    CommandDescription
    Ctrl-A D分离
    Ctrl-A D D分离和注销
    (快速退出)
    Ctrl-A :退出所有会话
    Ctrl-A C-\强制退出屏幕
    (不推荐)
    -

    帮助

    +

    帮助

    @@ -234,7 +234,7 @@
    CommandDescription
    Ctrl-A ?查看帮助 (列出键绑定)
    -

    杂项

    +

    杂项

    @@ -287,7 +287,7 @@
    CommandDescription
    Ctrl-A C-l重绘窗口
    Ctrl-A [复制模式
    Ctrl-A ESC复制模式
    Ctrl-A ]粘贴
    Ctrl-A M活动监控窗口
    Ctrl-A _静音监控窗口
    Ctrl-A Ctrl-V输入二合字母 (非 ASCII 字符)
    Ctrl-A X锁定(密码保护)显示
    Ctrl-A :输入屏幕命令
    Ctrl-A H在屏幕会话中启用日志记录
    -

    分屏

    +

    分屏

    @@ -323,7 +323,7 @@
    CommandDescription
    Ctrl-A S水平分割显示
    Ctrl-A V垂直分割显示
    Ctrl-A |垂直拆分显示
    Ctrl-A TAB跳转到下一个显示区域
    Ctrl-A X删除当前区域
    Ctrl-A Q删除除当前区域之外的所有区域
    -

    滚动

    +

    滚动

    @@ -351,7 +351,7 @@
    CommandDescription
    Ctrl-a esc进入滚动模式
    Ctrl-u向上滑动
    Ctrl-d向下滚动
    esc esc退出滚动模式
    -

    屏幕技巧

    +

    屏幕技巧

    SSH 并附加在一行中

    $ ssh -t user@host screen -x <name/pid>
     
    @@ -368,8 +368,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -380,7 +378,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/sed.html b/docs/sed.html index 96755f88..256d0ece 100644 --- a/docs/sed.html +++ b/docs/sed.html @@ -34,15 +34,15 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    Sed 备忘清单

    Sed 是一个流编辑器,此 Sed 备忘清单包含 Sed 命令和一些常见的 Sed 技巧。

    入门

    -

    入门

    +

    Sed 用法

    语法

    $ sed [options] command [input-file]
     
    @@ -51,7 +51,7 @@
    $ echo '123abc' | sed 's/[0-9]+//g'
     
    -

    选项示例

    +

    选项示例

    @@ -90,26 +90,26 @@
    参数示例描述
    -ised -ibak 's/On/Off/' php.ini直接备份和修改输入文件
    -Esed -E 's/[0-9]+//g' input-file使用扩展正则表达式
    -nsed -n '3 p' config.conf禁止默认图案空间打印
    -fsed -f script.sed config.conf执行 sed 脚本文件
    -esed -e 'command1' -e 'command2' input-file执行多个 sed 命令
    -

    多个命令

    +

    多个命令

    $ echo "hello world" | sed -e 's/h/H/g' -e 's/w/W/g'
     Hello World
     

    使用 -e 执行多个 sed 命令

    -

    Sed 脚本

    +

    Sed 脚本

    $ echo 's/h/H/g' >> hello.sed
     $ echo 's/w/W/g' >> hello.sed
     $ echo "hello world" | sed -f hello.sed
     Hello World
     

    使用 -f 执行 sed 脚本文件

    -

    Examples

    +

    Examples

    $ sed 's/old/new/g' file.txt
     $ sed 's/old/new/g' file.txt > new.txt
     $ sed 's/old/new/g' -i file.txt
     $ sed 's/old/new/g' -i.backup file.txt
     
    -

    Sed 命令

    -

    命令

    +

    Sed 命令

    +

    命令

    @@ -153,7 +153,7 @@
    CommandExampleDescription
    psed -n '1,4 p' input.txtPrint lines 1-4
    psed -n -e '1,4 p' -e '6,7 p' input.txtPrint lines 1-4 and 6-7
    dsed '1,4 d' input.txtPrint lines except 1-4
    wsed -n '1,4 w output.txt' input.txtWrite pattern space to file
    ased '2 a new-line' input.txtAppend line after
    ised '2 i new-line' input.txtInsert line before
    -

    空间命令

    +

    空间命令

    @@ -188,7 +188,7 @@
    CommandDescription
    n打印模式空间,空模式空间,读取下一行
    x用保持空间交换模式空间
    h复制模式空间以保持空间
    H追加模式空间以保持空间
    g将保持空间复制到模式空间
    G将保持空间附加到模式空间
    -

    Flags

    +

    Flags

    $ sed 's/old/new/[flags]' [input-file]
     

    @@ -226,7 +226,7 @@
    FlagDescription
    g全球替代
    1,2...替换第 n 次出现
    p仅打印替换的行
    w仅将替换的行写入文件
    I搜索时忽略大小写
    e在命令行中替换并执行
    -

    循环命令

    +

    循环命令

    @@ -261,7 +261,7 @@
    CommandDescription
    b label分支到标签(用于循环)
    t label仅在成功替换时分支到标签(用于循环)
    :labelb 和 t 命令的标签(用于循环)
    N将下一行追加到模式空间
    P多行打印第一行
    D删除多行中的第一行
    -

    杂项标志

    +

    杂项标志

    @@ -284,8 +284,8 @@
    FlagDescription
    / | ^ @ ! #替换分隔符可以是任何字符
    &获取匹配的模式
    ( ) \1 \2 \3使用 () 进行分组。
    使用 \1\2 替换来引用组
    -

    Sed 示例

    -

    替换文本

    +

    Sed 示例

    +

    替换文本

    替换所有出现的字符串

    $ sed 's/old/new/g' file.txt
    @@ -308,7 +308,7 @@
     

    删除评论。 即使是那些在行尾的

    $ sed 's/#.*$//' file.txt
     
    -

    搜索文本

    +

    搜索文本

    搜索字符串并仅打印匹配的行

    $ sed -n '/hello/p' file.txt
     
    @@ -318,7 +318,7 @@

    搜索字符串,但仅输出不匹配的行

    $ sed -n '/hello/!p' file.txt
     
    -

    追加行

    +

    追加行

    在第 2 行之后追加一行

    $ sed '2a Text after line 2' file.txt
     
    @@ -328,7 +328,7 @@

    从第 3 行开始,每 3 行后追加一行

    $ sed '3~3a Some text' file.txt
     
    -

    编号

    +

    编号

    文件的数字行(简单的左对齐)

    $ sed = file.txt | sed 'N;s/\n/\t/'
    @@ -342,14 +342,14 @@
     

    计算行数(模拟“wc -l”)

    $ sed -n '$='
     
    -

    前置行

    +

    前置行

    在第 5 行之前插入文本

    $ sed '5i line number five' file.txt
     

    在包含“hello”的每一行之前插入“示例:”

    $ sed '/hello/i Example: ' file.txt
     
    -

    删除行

    +

    删除行

    删除文件中的第 5-7 行

    $ sed '5,7d' file.txt
     
    @@ -368,7 +368,7 @@

    删除以“#”开头的行

    $ sed '/^#/d' file.txt
     
    -

    文件间距

    +

    文件间距

    双倍行距

    $ sed G
     
    @@ -390,7 +390,7 @@

    在匹配“正则表达式”的行周围插入一个空行

    $ sed '/regex/{x;p;x;G;}'
     
    -

    另见

    +

    另见

    @@ -407,8 +407,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -419,7 +417,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/semver.html b/docs/semver.html index c9792cd2..c1cc0972 100644 --- a/docs/semver.html +++ b/docs/semver.html @@ -34,21 +34,21 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    Semver 备忘清单

    这个 semver 语义化版本快速参考备忘清单。

    语义化版本标准

    -

    语义化版本标准

    +

    介绍

    Semver 是一种语义版本控制规范。

    -

    Semver

    +

    Semver

    @@ -71,7 +71,7 @@
    --
    主版本号(MAJOR)当你做了不兼容的 API 修改
    次版本号(MINOR)当你做了向下兼容的功能性新增
    修订号(PATCH)当你做了向下兼容的问题修正
    -

    简单范围

    +

    简单范围

      1.2.3
      =1.2.3
      >1.2.3
    @@ -79,7 +79,7 @@
     >=1.2.3
     

    请注意,后缀版本(1.2.3-rc1)不匹配。

    -

    范围

    +

    范围

    @@ -158,7 +158,7 @@
    范围描述Notes
    ~1.2.3>=1.2.3 <1.3.0
    ^1.2.3>=1.2.3 <2.0.0
    ^0.2.3>=0.2.3 <0.3.0(0.x.x 是特殊的)
    ^0.0.1=0.0.1(0.0.x 是特殊的)
    ^1.2>=1.2.0 <2.0.0(像 ^1.2.0)
    ~1.2>=1.2.0 <1.3.0(像 ~1.2.0)
    ^1>=1.0.0 <2.0.0
    ~1相同的
    1.x相同的
    1.*相同的
    1相同的
    *任何版本
    x相同的
    -

    连字符范围

    +

    连字符范围

    @@ -174,7 +174,7 @@
    范围描述
    1.2.3 - 2.3.4>=1.2.3 <=2.3.4
    -

    部分向右

    +

    部分向右

    @@ -194,7 +194,7 @@
    范围描述
    1.2.3 - 2.3>=1.2.3 <2.4.0
    1.2.3 - 2>=1.2.3 <3.0.0
    -

    部分向左

    +

    部分向左

    @@ -212,7 +212,7 @@

    当右侧为部分(例如,2.3)时,假定缺失的部分为x(例如, 2.3.x)。

    如果左边是部分的(例如,1.2),则假定缺少的部分为0(例如, 1.2.0)。

    -

    有效的语义版本

    +

    有效的语义版本

    0.0.4
     1.2.3
    @@ -246,7 +246,7 @@
     99999999999999999999999.999999999999999999.99999999999999999
     1.0.0-0A.is.legal
     
    -

    组合范围

    +

    组合范围

    @@ -266,7 +266,7 @@
    范围描述
    >=0.14 <16和 (空格分隔)
    0.14.x || 15.x.x或 (双竖线分隔)
    -

    解释

    +

    解释

    @@ -295,11 +295,11 @@
    范围描述
    ^意思是“兼容”
    ~意思是“相当接近”
    0.x.x用于“初始开发”
    1.x.x表示定义了公共 API
    -

    预发布

    +

    预发布

    1.2.3-prerelease+build
     1.1.2-prerelease+meta
     
    -

    另见

    +

    另见

    • 语义化版本号验证正则表达式,支持按编号提取的语言
    • 语义化版本号验证正则表达式,支持按组名称提取的语言
    • @@ -317,8 +317,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -329,7 +327,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/sketch.html b/docs/sketch.html index 53bceb89..5ab587a5 100644 --- a/docs/sketch.html +++ b/docs/sketch.html @@ -34,15 +34,15 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    Sketch 备忘清单

    这个 Sketch 快速参考备忘单显示了它的键盘快捷键和命令。

    快捷键

    -

    快捷键

    +

    插入

    @@ -94,7 +94,7 @@
    快捷键描述
    a(New Artboard) 新画板
    s(Slice) 切片
    r(Rectangle) 长方形
    d(Rounde) 圆形
    u(Rectangle) 长方形
    o(Oval) 椭圆形
    l(Line) 线
    v(Vector Point) 向量点
    p(Pencil) 铅笔
    t(Text) 文本
    -

    类型

    +

    类型

    @@ -159,7 +159,7 @@
    快捷键类型
    Cmd + B加粗
    Cmd + I斜体
    Cmd + U下划线
    Alt + Cmd (+) +增加字体大小
    Alt + Cmd (+) –减小字体大小
    Alt + Control + L增加字符间距
    Alt + Control + T减少字符间距
    Cmd + T更改字体
    Shift + Cmd + O将文本转换为轮廓
    Cmd + Shift + {左对齐
    Cmd + Shift + \居中对齐
    Cmd + Shift + }右对齐
    Control + Cmd + Space特殊字符
    -

    画布视图

    +

    画布视图

    @@ -232,7 +232,7 @@
    画布视图快捷键
    Cmd (+) +放大
    Cmd (+) -缩小
    Cmd + 0实际尺寸
    Cmd + 1中心画布
    Cmd + 2缩放选择
    Cmd + 3中心选择
    §临时缩放到实际大小
    Alt + Tab关注第一个输入字段
    Control + R切换标尺
    Control + G切换网格
    Control + L切换图层指南
    Control + P切换像素
    Control + H切换选择手柄
    Control + X切换像素网格
    Space + Drag移动画布
    -

    窗口

    +

    窗口

    @@ -272,7 +272,7 @@
    快捷键Window
    Cmd + ~在文档之间切换
    Alt + Cmd + 1切换层列表
    Alt + Cmd + 2切换检查器
    Alt + Cmd + 3切换图层、检查器
    Alt + Cmd + T切换工具栏
    Cmd + .演示模式
    Control + Cmd + F进入全屏
    -

    编辑形状

    +

    编辑形状

    @@ -320,7 +320,7 @@
    编辑形状快捷键
    Cmd + Alt保留当前选择
    Control + Cmd + M用作蒙版跨度(适用于图层和组)
    Alt + Cmd + U联盟
    Alt + Cmd + S减去
    Alt + Cmd + I相交
    Alt + Cmd + X区别
    Cmd + Arrows更改对象大小
    Shift + Cmd + Arrows将单位更改 10
    1, 2, 3, 4更改矢量点样式
    -

    编辑图层

    +

    编辑图层

    @@ -372,7 +372,7 @@
    快捷键编辑图层
    Alt显示到其他图层的距离
    Alt + Cmd显示到组内其他图层的距离
    Alt + Drag复制(用 ⌘D 重复)
    Alt + Cmd + C复制样式
    Alt + Cmd + V粘贴样式
    Control + C选色器
    Cmd + T转换
    Shift + Cmd + R旋转
    F切换填充
    B切换边框
    -

    排列图层、组和画板

    +

    排列图层、组和画板

    @@ -444,7 +444,7 @@
    排列图层、组和画板快捷键
    Alt + Cmd + ↑向前进
    Control + Alt + Cmd + ↑带到前面
    Alt + Cmd + ↓向后发送
    Control + Alt + Cmd + ↓送回
    Shift + Cmd + H隐藏
    Shift + Cmd + L
    Cmd + R改名
    Cmd + G图层组
    Shift + Cmd + G取消组合图层
    Shift + Tab选择上层
    Tab选择下面的图层
    Esc选择父画板
    Cmd + F按名称查找图层
    Fn + ↑选择上方页面
    Fn + ↓选择下面的页面
    -

    另见

    +

    另见

    @@ -461,8 +461,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -473,7 +471,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/ssh.html b/docs/ssh.html index cf7e8be8..8366368d 100644 --- a/docs/ssh.html +++ b/docs/ssh.html @@ -34,14 +34,14 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    SSH 备忘清单

    此快速参考备忘单提供了使用 SSH 的各种方法。

    入门

    -

    入门

    +

    连接

    连接到服务器(默认端口 22)

    $ ssh root@192.168.1.5
     
    @@ -52,7 +52,7 @@
    $ ssh -i /path/file.pem root@192.168.1.5
     

    请参阅:SSH 权限

    -

    执行

    +

    执行

    执行远程命令

    $ ssh root@192.168.1.5 'ls -l'
     
    @@ -63,7 +63,7 @@
    $ ssh root@192.168.1.5 "tar cvzf - ~/source" > output.tgz
     
    -

    SCP

    +

    SCP

    从远程复制到本地

    $ scp user@server:/dir/file.ext dest/
    @@ -83,7 +83,7 @@
     

    从服务器文件夹复制到当前文件夹

    $ scp user@server:/dir/* .
     
    -

    配置位置

    +

    配置位置

    @@ -118,7 +118,7 @@
    文件路径说明
    /etc/ssh/ssh_config系统范围的配置
    ~/.ssh/config用户特定的配置
    ~/.ssh/id_{type}私钥
    ~/.ssh/id_{type}.pub公钥
    ~/.ssh/known_hosts登录主机
    ~/.ssh/authorized_keys授权登录密钥
    -

    SCP 选项

    +

    SCP 选项

    @@ -153,7 +153,7 @@
    选项说明
    scp -r递归复制整个目录
    scp -C压缩数据
    scp -v打印详细信息
    scp -P 8080使用特定端口
    scp -B批处理模式_(防止密码)_
    scp -p保留时间和模式
    -

    配置示例

    +

    配置示例

    Host server1 
         HostName 192.168.1.5
         User root
    @@ -164,7 +164,7 @@
     
    $ ssh server1
     

    请参阅:完整 配置选项

    -

    ProxyJump

    +

    ProxyJump

    $ ssh -J proxy_host1 remote_host2
     
    $ ssh -J user@proxy_host1 user@remote_host2
    @@ -174,7 +174,7 @@
     
    $ ssh -J user@proxy_host1:port1,user@proxy_host2:port2 user@remote_host3
     
    -

    ssh-copy-id

    +

    ssh-copy-id

    $ ssh-copy-id user@server
     

    复制到别名服务器

    @@ -184,9 +184,9 @@
    $ ssh-copy-id -i ~/.ssh/id_rsa.pub user@server
     
    -

    SSH keygen

    +

    SSH keygen

    -

    ssh-keygen

    +

    ssh-keygen

    $ ssh-keygen -t rsa -b 4096 -C "your@mail.com" 
     
    @@ -218,7 +218,7 @@
    ---
    -t类型
    -b密钥中的位数
    -C提供新评论

    生成带有电子邮件作为注释的 RSA 4096 位密钥

    -

    产生

    +

    产生

    以交互方式生成密钥

    $ ssh-keygen
    @@ -235,14 +235,14 @@
     

    更改私钥密码

    $ ssh-keygen -p -f ~/.ssh/id_rsa
     
    -

    钥匙类型

    +

    钥匙类型

    • rsa
    • ed25519
    • dsa
    • ecdsa
    -

    known_hosts

    +

    known_hosts

    从 known_hosts 搜索

    $ ssh-keygen -F <ip/hostname>
    @@ -250,12 +250,12 @@
     

    从 known_hosts 中删除

    $ ssh-keygen -R <ip/hostname>
     
    -

    密钥格式

    +

    密钥格式

    • PEM
    • PKCS8
    -

    另见

    +

    另见

    • OpenSSH 配置文件示例 (cyberciti.biz)
    • ssh_config (linux.die.net)
    • @@ -273,8 +273,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -285,7 +283,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/styled-components.html b/docs/styled-components.html index 134e41c8..a42f40fa 100644 --- a/docs/styled-components.html +++ b/docs/styled-components.html @@ -34,15 +34,15 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    styled-components 备忘清单

    此快速参考备忘单提供了使用 CSS in JS 工具的各种方法。

    入门

    -

    入门

    +

    安装

    Styled Components 是增强 CSS 在 React 组件系统样式的 CSS in JS 的最佳实践。

    • VSCode styled-components 有代码高亮和代码提示
    • @@ -52,7 +52,7 @@

      安装依赖和 TypeScript 类型依赖

      npm install --save styled-components
       
      -

    快速开始

    +

    快速开始

    import styled from 'styled-components';
     
    @@ -81,7 +81,7 @@ ); }
    -

    根据 Props 适配

    +

    根据 Props 适配

    import styled from 'styled-components';
     
    @@ -112,7 +112,7 @@
       );
     }
     
    -

    扩展样式

    +

    扩展样式

    const Button = styled.button`
       color: palevioletred;
       border: 2px solid palevioletred;
    @@ -130,7 +130,7 @@
       </div>
     );
     
    -

    扩展样式改变标签 (as)

    +

    扩展样式改变标签 (as)

    const Button = styled.button`
       color: palevioletred;
    @@ -157,7 +157,7 @@
       </div>
     );
     
    -

    自定义组件(as)

    +

    自定义组件(as)

    const Button = styled.button`
       color: palevioletred;
    @@ -184,7 +184,7 @@
       </div>
     );
     
    -

    样式化任何组件

    +

    样式化任何组件

    const Link = ({ className, children }) => (
       <a className={className}>
         {children}
    @@ -196,7 +196,7 @@
     `;
     <StyledLink className="hello" />
     
    -

    在 render 之外定义 Styled 组件

    +

    在 render 之外定义 Styled 组件

    const Box = styled.div`/* ... */`;
     const Wrapper = ({ message }) => {
    @@ -209,7 +209,7 @@
     };
     

    注意:组件 Box 不能放到 Wrapper 函数组件里面

    -

    传入值

    +

    传入值

    const Input = styled.input`
       color: ${
         props => 
    @@ -231,7 +231,7 @@
       </div>
     );
     
    -

    样式对象

    +

    样式对象

    const PropsBox = styled.div(props => ({
       background: props.background,
       height: '50px',
    @@ -251,7 +251,7 @@
     }
     

    注意:样式对象里面的样式并不是 CSS 中的写法。

    -

    CSSModules => styled

    +

    CSSModules => styled

    import React, { useState } from 'react';
     import styles from './styles.css';
    @@ -279,7 +279,7 @@
       );
     }
     
    -

    👇👇 与下面 styled 写法等效 👇👇

    +

    👇👇 与下面 styled 写法等效 👇👇

    import styled from 'styled-components';
     
     const StyledCounter = styled.div`
    @@ -312,7 +312,7 @@
       );
     }
     
    -

    伪元素、伪选择器和嵌套

    +

    伪元素、伪选择器和嵌套

    const Thing = styled.div.attrs((/* props */) => ({ tabIndex: 0 }))`
       color: blue;
    @@ -348,7 +348,7 @@
       </React.Fragment>
     );
     
    -

    改变 styled 组件样式

    +

    改变 styled 组件样式

    import { css } from 'styled-components'
     import styled from 'styled-components'
    @@ -394,7 +394,7 @@
       );
     }
     
    -

    全局样式 createGlobalStyle

    +

    全局样式 createGlobalStyle

    import {
       styled,
       createGlobalStyle
    @@ -420,7 +420,7 @@
       </React.Fragment>
     );
     
    -

    className 使用

    +

    className 使用

    const Thing = styled.div`
       color: blue;
       /* <Thing> 中标记为“.something”的元素 */
    @@ -445,7 +445,7 @@
       )
     }
     
    -

    共享样式片段

    +

    共享样式片段

    const rotate = keyframes`
       from {top:0px;}
       to {top:200px;}
    @@ -461,7 +461,7 @@
       animation: ${rotate} 2s linear infinite;
     `;
     
    -

    Class 组件样式定义

    +

    Class 组件样式定义

    class NewHeader extends React.Component {
       render() {
         return (
    @@ -478,7 +478,7 @@
       }
     `;
     
    -

    附加额外的 Props

    +

    附加额外的 Props

    const Input = styled.input.attrs(props=>({
       // 我们可以定义静态道具
       type: "text",
    @@ -509,7 +509,7 @@
       )
     }
     
    -

    覆盖 .attrs

    +

    覆盖 .attrs

    const Input = styled.input.attrs(props=>({
       type: "text",
       size: props.size || "1em",
    @@ -542,7 +542,7 @@
       </div>
     );
     
    -

    动画

    +

    动画

    创建关键帧

    const rotate = keyframes`
       from {
    @@ -570,7 +570,7 @@
       )
     }
     
    -

    isStyledComponent

    +

    isStyledComponent

    import React from 'react'
     import styled, { isStyledComponent } from 'styled-components'
    @@ -588,7 +588,7 @@
       }
     `;
     
    -

    ThemeConsumer

    +

    ThemeConsumer

    import {
       ThemeConsumer
     } from 'styled-components'
    @@ -603,8 +603,8 @@
       );
     }
     
    -

    TypeScript

    -

    安装

    +

    TypeScript

    +

    安装

    Web 应用上安装 styled

    npm install -D @types/styled-components
     
    @@ -614,7 +614,7 @@ @types/styled-components-react-native

    如果对 TypeScript 不熟悉,参考 TypeScript 备忘清单

    -

    自定义 Props

    +

    自定义 Props

    import styled from 'styled-components';
     
     interface TitleProps {
    @@ -629,7 +629,7 @@
       )};
     `;
     
    -

    简单的 Props 类型定义

    +

    简单的 Props 类型定义

    import styled from 'styled-components';
     import Header from './Header';
     
    @@ -643,7 +643,7 @@
       color: ${(props) => props.customColor};
     `;
     
    -

    禁止转移到子组件($)

    +

    禁止转移到子组件($)

    import styled from 'styled-components';
     import Header from './Header';
     
    @@ -658,7 +658,7 @@
     `;
     

    禁止 customColor 属性转移到 Header 组件,在其前面加上美元($)符号

    -

    函数组件类型继承

    +

    函数组件类型继承

    import { FC, PropsWithRef, DetailedHTMLProps, ImgHTMLAttributes } from 'react';
     import styled from 'styled-components';
    @@ -676,9 +676,9 @@
       <Img src="" alt="" {...props} />
     );
     
    -

    React Native

    +

    React Native

    -

    基础实例

    +

    基础实例

    import React from 'react'
     import styled from 'styled-components/native'
    @@ -700,7 +700,7 @@
       }
     }
     
    -

    React Native 中写 CSS

    +

    React Native 中写 CSS

    import styled from 'styled-components/native'
     
    @@ -718,9 +718,9 @@
     }
     

    与 web 版本的一些区别是,您不能使用关键帧(keyframes)和 createGlobalStyle 助手,因为 React Native 不支持关键帧或全局样式。如果您使用媒体查询或嵌套 CSS,我们也会警告您。

    -

    高级用法

    +

    高级用法

    -

    主题化

    +

    主题化

    import styled, { ThemeProvider } from 'styled-components'
     
    @@ -758,7 +758,7 @@
       </div>
     );
     
    -

    功能主题

    +

    功能主题

    import styled, { ThemeProvider } from 'styled-components'
     
    @@ -796,7 +796,7 @@
       </ThemeProvider>
     );
     
    -

    通过 withTheme 高阶组件

    +

    通过 withTheme 高阶组件

    import { withTheme } from 'styled-components'
     
    @@ -809,7 +809,7 @@
     
     export default withTheme(MyComponent)
     
    -

    useContext 钩子

    +

    useContext 钩子

    import { useContext } from 'react'
     import { ThemeContext } from 'styled-components'
    @@ -821,7 +821,7 @@
       // ...
     }
     
    -

    useTheme 自定义钩子

    +

    useTheme 自定义钩子

    import {useTheme} from 'styled-components'
     
    @@ -832,7 +832,7 @@
       // ...
     }
     
    -

    主题 props

    +

    主题 props

    import {
       ThemeProvider,
    @@ -872,7 +872,7 @@
       </div>
     );
     
    -

    Refs

    +

    Refs

    import {
       ThemeProvider,
    @@ -910,7 +910,7 @@
       )
     }
     
    -

    特异性问题

    +

    特异性问题

    在文件 MyComponent.js 中定义 MyComponent 组件。

    const MyComponent = styled.div`
    @@ -926,12 +926,12 @@
     
    <MyComponent className="red-bg" />
     

    由于某种原因,这个组件仍然有绿色背景,即使你试图用 red-bg 类覆盖它!

    -

    解决方案

    +

    解决方案

    .red-bg.red-bg {
       background-color: red;
     }
     
    -

    ThemeProvider

    +

    ThemeProvider

    import styled, { ThemeProvider } from 'styled-components'
     
    @@ -945,7 +945,7 @@
       </ThemeProvider>
     );
     
    -

    shouldForwardProp

    +

    shouldForwardProp

    const Comp = styled('div').withConfig({
       shouldForwardProp: (prop, defaultValidatorFn) =>
    @@ -976,8 +976,6 @@ function anchorPoint() {
       Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active'))
       if (elm?.tagName === 'H3') {
         elm?.parentElement?.parentElement?.classList.add('active');
    -    const box = elm?.parentElement?.parentElement;
    -    console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap'))
       }
     }
     anchorPoint();
    @@ -988,7 +986,6 @@ function updateAnchor(element) {
         tocanchor.classList.remove('is-active-link');
       });
       const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`);
    -  console.log('anchor', anchor)
       if (anchor) {
         anchor.classList.add('is-active-link');
       }
    diff --git a/docs/stylus.html b/docs/stylus.html
    index cb9e733a..67c3e384 100644
    --- a/docs/stylus.html
    +++ b/docs/stylus.html
    @@ -34,15 +34,15 @@
         document.documentElement.setAttribute('data-color-mode', mode);
         localStorage.setItem(LOCAL_NANE, mode);
       }
    -

    +

    Stylus 备忘清单

    本备忘单旨在快速理解 stylus 所涉及的主要概念,显示了它的常用方法使用清单。

    入门

    -

    入门

    +

    介绍

    为 Node.js 构建的富有表现力、健壮、功能丰富的 CSS 语言

      @@ -65,7 +65,7 @@
      $ stylus --css < test.css > test.styl
       $ stylus --css test.css /tmp/out.styl
       
      -

    支持 CSS 嵌套语法

    +

    支持 CSS 嵌套语法

    .box {
       color: blue;
       .button {
    @@ -74,14 +74,14 @@
     }
     

    Stylus 是一个 CSS 预处理器。另见: stylus-lang.com

    -

    支持类 python 缩进语法

    +

    支持类 python 缩进语法

    .box
       color: blue
       .button
         color: red
     

    也有效!冒号也是可选的。这通常用于 Stylus 文档的语法

    -

    混合 Mixins

    +

    混合 Mixins

    caps-type()
       letter-spacing: 0.05em
     
    @@ -95,7 +95,7 @@ }

    另见:下面Mixins

    -

    变量 Variables

    +

    变量 Variables

    royal-blue = #36a
     

    @@ -109,8 +109,8 @@ }

    另见:变量 Variables

    -

    混合 Mixins

    -

    没有参数

    +

    混合 Mixins

    +

    没有参数

    red-border()
       border: solid 2px red
     
    @@ -119,7 +119,7 @@ red-border()

    另见: Mixins

    -

    有参数

    +

    有参数

    border-radius(n)
       -webkit-border-radius: n
       border-radius: n
    @@ -130,11 +130,11 @@
       border-radius(2px)
     

    Mixins can be applied in two different ways.

    -

    参数默认值

    +

    参数默认值

    border-radius(n = 2px)
       -webkit-border-radius: n
     
    -

    块混合

    +

    块混合

    mobile()
       @media (max-width: 480px)
         {block}
    @@ -144,7 +144,7 @@
       width: 10px
     

    另见: 块混合

    -

    Rest 参数

    +

    Rest 参数

    shadow(offset-x, args...)
       box-shadow: offset-x args
       margin-top: offset-x
    @@ -154,8 +154,8 @@
       shadow: 1px 2px 5px #eee
     

    另见: Rest 参数

    -

    函数 Functions

    -

    函数 Functions

    +

    函数 Functions

    +

    函数 Functions

    add(a, b)
       a + b
     
    @@ -164,12 +164,12 @@ padding: add(10px, 5)

    另见: Functions

    -

    参数默认值

    +

    参数默认值

    add(a, b = 2)
       a + b
     

    另见: 参数默认值

    -

    命名参数

    +

    命名参数

    shadow(x, y)
       x y (y * 1.5) #000
     
    @@ -178,7 +178,7 @@ box-shadow: shadow(x: 2, y: 4)

    另见: 命名参数

    -

    多个返回值

    +

    多个返回值

    sizes()
       8px 16px
     
    @@ -187,7 +187,7 @@ sizes()[1] // → 16px

    另见: 多个返回值

    -

    arguments

    +

    arguments

    sum()
       n = 0
       for num in arguments
    @@ -197,7 +197,7 @@
     
    sum(1,2,3,4,5) // => 15
     

    参数 local 可用于所有函数体,并包含所有传递的参数

    -

    hash 示例

    +

    hash 示例

    get(hash, key)
       return pair[1] if pair[0] == key for pair in hash
     
    @@ -207,8 +207,8 @@
     // => 2
     
    -

    值 Values

    -

    条件赋值

    +

    值 Values

    +

    条件赋值

    royal-blue = #36a
     royal-blue ?= #89f
     
    @@ -218,7 +218,7 @@

    ?= 只会在之前未设置的情况下设置变量

    另见: 条件赋值

    -

    属性查找

    +

    属性查找

    .logo
       width: w = 150
       margin-left: -(w / 2)
    @@ -227,30 +227,30 @@
       margin-top: -(@height / 2)
     

    另见: 属性查找

    -

    插值

    +

    插值

    -{prefix}-border-radius: 2px
     

    另见: Interpolation

    -

    Color operators

    +

    Color operators

    #888 + 50%    // → #c3c3c3 (lighten)
     #888 - 50%    // → #444 (darken)
     #f00 + 50deg  // → #ffd500 (hue)
     
    -

    Casting

    +

    Casting

    n = 5px
     

    foo: (n)em
     foo: (n * 5)%
     
    -

    Lookup

    +

    Lookup

    light-blue = #3bd
     name = 'blue'
     lookup('light-' + name)
     

    另见: lookup

    -

    高级功能

    -

    有条件的

    +

    高级功能

    +

    有条件的

    if color == blue
       display: block
    @@ -285,7 +285,7 @@
     
     
    :-:-
    ==is
    !=is not
    !=isnt

    另见: Conditionals

    -

    对于循环

    +

    对于循环

    font-size-1 = 10px
     font-size-2 = 20px
     font-size-3 = 30px
    @@ -293,25 +293,25 @@
       .text-{i}
         font-size: lookup('font-size-' + i)
     
    -

    定义检查

    +

    定义检查

    if ohnoes is defined
       color: blue
     

    另见: is defined

    -

    False 值

    +

    False 值

    0
     null
     false
     ''
     
    -

    类型检查

    +

    类型检查

    if val is a 'string'
     if val is a 'ident'
     if #fff is a 'rgba'    // → true
     

    另见: Instance check

    -

    内置函数

    -

    颜色函数

    +

    内置函数

    +

    颜色函数

    alpha(#fff)   //→ 1
     alpha(rgba(0, 0, 0, 0.2))   //→ 0.2
    @@ -346,13 +346,13 @@
     
    unquote(string)
     

    另见: Built-in functions

    -

    图片尺寸

    +

    图片尺寸

    返回给定图像的宽度和高度

    width:  image-size('tux.png')[0]
     height: image-size('tux.png')[1]
     

    另见: image-size

    -

    缓存 Caching

    +

    缓存 Caching

    size($width)
       +cache('w' + $width)
    @@ -364,13 +364,13 @@
     
    // 输出: .a, b { width: 10px }
     

    在第一次调用时将其内容应用于给定的选择器,但会在第二次调用时使用相同的参数 @extend 第一次调用的选择器。另见: cache

    -

    Embed URL

    +

    Embed URL

    background: embedurl('logo.png')
     // → background: url("data:image/png;base64,…")
     

    另见: embedurl

    -

    添加属性

    +

    添加属性

    gradient(color)
       add-property('background-image', linear-gradient(top, color, darken(color, 20%)))
       color
    @@ -380,7 +380,7 @@
       background: gradient(red)
     

    另见: add-property

    -

    sprintf

    +

    sprintf

    '-webkit-gradient(%s, %s, %s)' % (linear (0 0) (0 100%))
     // → -webkit-gradient(linear, 0 0, 0 100%)
     
    @@ -389,7 +389,7 @@
    s("rgba(0, 0, 0, %s)", 0.3)
     

    另见: s

    -

    另见

    +

    另见

    • CSS 备忘清单 (jaywcjlove.github.io)
    • 在线编译预览 (stylus-lang.com)
    • @@ -408,8 +408,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -420,7 +418,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/sublime-text.html b/docs/sublime-text.html index 3845c4df..977b88ed 100644 --- a/docs/sublime-text.html +++ b/docs/sublime-text.html @@ -34,15 +34,15 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    Sublime Text 备忘清单

    这个 Sublime Text 快速参考备忘单显示了它的键盘快捷键和命令。

    快捷键

    -

    快捷键

    +

    文本编辑初学者

    Sublime Text 是一个用于代码、标记的复杂文本编辑器。

    @@ -137,7 +137,7 @@
    快捷键说明
    ⌘ D选择单词(重复包括单词的下一个实例)
    ⌘ L选择行(重复以包括下一行)
    ⌘ ⇧ L将选择拆分为多行(多行编辑)
    ⌘ ⇧ A选择标签内的文本(重复以展开)
    ⌃ ⇧ M选择大括号或尖括号(重复展开)
    ⌘ X剪切一行
    ⌃ M转到匹配的括号
    ⌃ ↩︎ or ↩︎在后面插入行
    ⌘ ↵在后面插入行
    ⇧ ⌘ ↵在前面插入行
    ⇧ ⌥ ▲选择当前行光标之前
    ⇧ ⌥ ▼选择当前行光标之后
    ⇧ ⌃ M选择当前括号的所有内容
    ⌥ ⇠/⇢进行逐词移动,相应的
    ⌥ ⇧ ⇠/⇢进行逐词选择
    ⌘ U返回到历史光标位置(撤销)
    ⌃ M快速的在起始括号和结尾括号间切换
    ⌃ ⇧ M则可以快速选择括号间的内容
    ⌃ ⇧ J对于缩进型语言(例如Python)可以使用
    ⌃ ⌘ D复制整行

    查看:Sublime Text 官网

    -

    代码折叠

    +

    代码折叠

    @@ -181,7 +181,7 @@
    快捷键说明
    ⌘ Alt [折叠最近的块
    ⌘ Alt ]展开最近的块
    ⌘ K ⌘ 1折叠所有第一级代码块
    ⌘ K ⌘ 2折叠所有二级代码块
    ⌘ K ⌘ 3折叠所有第三级代码块(等)
    ⌘ K ⌘ T折叠所有 HTML 属性
    ⌘ K ⌘ 0展开一切
    ⌘ K 0代码展开
    -

    macOS 键盘符号

    +

    macOS 键盘符号

    @@ -221,7 +221,7 @@
    快捷键说明
    Command()
    Control
    Option(alt)
    Shift
    Caps Lock(大写)
    fn功能键就是fn
    ↩︎return/Enter
    -

    编辑

    +

    编辑

    @@ -257,7 +257,7 @@
    快捷键说明
    ⌘ ⇧ D复制当前行/选择
    ⌘ ⇧ K删除当前行/选择
    ⇧ del删除当前行/选择
    ⌘ ⇧ ▲移动队列
    ⌘ ⇧ ▼下移一行
    ⌘ ▼/▲移动到首行/尾行
    -

    转到

    +

    转到

    @@ -293,7 +293,7 @@
    快捷键说明
    ⌘ P去任何地方
    ⌘ G转到行号
    ⌘ R转到符号
    ⌘ P, :转到行号(:之后输入数字)
    ⌘ P, #转到并列出字符串模糊匹配(#之后输入字符)
    ⌘ P, @转到并列出符号(@之后开始输入符号名称)
    -

    选择(Selecting)

    +

    选择(Selecting)

    • ⌘ + D
      选择光标所在的单词,并高亮该词出现的所有位置
    • @@ -318,7 +318,7 @@
      快捷键说明
      ⌃ K / ⌘ K K从光标处删除到行末尾
      -

    拆分窗口

    +

    拆分窗口

    @@ -350,7 +350,7 @@
    快捷键说明
    ⇧ ⌥ 2将视图拆分为两列
    ⇧ ⌥ 1将视图还原为单列
    ⇧ ⌥ 5将视图设置为网格(4 组)
    ⌃ 2跳到第 2 组
    ⇧ ⌃ 2将文件移动到组 2
    -

    文本操作

    +

    文本操作

    @@ -382,18 +382,18 @@
    快捷键说明
    ⌃ K ⌃ L转换为小写
    ⌃ K ⌃ U转换为大写
    ⇧ ⌃ K删除行
    ⌃BACKSPACE向后删除单词
    ⌃DEL删除单词转发
    -

    命令行中启动编辑器

    +

    命令行中启动编辑器

    sudo ln -s /Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl\
                /usr/local/bin/subl
     
    -

    在命令行中使用 subl 命令

    +

    在命令行中使用 subl 命令

    $ subl .
     $ subl README.md
     

    软链放到这个目录 /usr/local/bin/subl,这是因为 Rootless 机制,不能存放到 /usr/bin/subl 位置。

    -

    另见

    +

    另见

    • Sublime Text 官网 (sublimetext.com)
    • Sublime 编辑器快捷键 (jaywcjlove.github.io)
    • @@ -411,8 +411,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -423,7 +421,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/swift.html b/docs/swift.html index 3d105df9..4b7082a5 100644 --- a/docs/swift.html +++ b/docs/swift.html @@ -34,14 +34,14 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    Swift 备忘清单

    该备忘单提供了使用 Swift 的示例,涵盖 Swift 基础知识、控制流、类型、结构/类、运算符、函数方法等。

    入门

    -

    变量

    +

    入门

    +

    变量

    var score = 0 // 变量
     let pi = 3.14 // 常数
    @@ -54,13 +54,13 @@
     numberOfToys += 1
     print(numberOfToys) // 打印 "9"
     
    -

    类型注释

    +

    类型注释

    var greeting: String = "Hello"
     var numberOfToys: Int = 8
     var isMorning: Bool = true
     var price: Double = 8.99
     
    -

    算术运算符

    +

    算术运算符

    • + 添加
    • @@ -78,7 +78,7 @@ x = 4 / 2 // x 现在是 2 x = 4 % 2 // x 现在是 0
      -

    复合赋值运算符

    +

    复合赋值运算符

    var numberOfDogs = 100
     numberOfDogs += 1
     print("有 \(numberOfDogs) 个斑点狗!")
    @@ -93,51 +93,51 @@
     
  • %= 除并分配余数
  • -

    字符串插值

    +

    字符串插值

    var apples = 6
     print("I have \(apples) apples!")
     // 打印: I have 6 apples!
     
    -

    多行字符串

    +

    多行字符串

    let myLongString = """
     Swift?
     这是我最喜欢的语言!
     """
     
    -

    代码注释

    +

    代码注释

    // 这一行表示 Swift 中的注释。
     /*
     这都被注释掉了。
     没有一个会跑!
     */
     
    -

    组成一个元组

    +

    组成一个元组

    let player = ("Maya", 5, 150)
     
     print(player) // ("Maya", 5, 150)
     print("\(player.0): level \(player.1), \(player.2) pts") // Maya: level 5, 150 pts
     
    -

    分解元组

    +

    分解元组

    let player = (name: "Maya", level: 5)
     let (currentName, curLevel) = player
     print("\(currentName): level \(curLevel)")
     // 打印: Maya: level 5
     
    -

    特殊注释语法 (MARK)

    +

    特殊注释语法 (MARK)

    // MARK: - 查看设置
     

    MARK 可用于在栏中显示评论

    -

    特殊注释语法 (TODO)

    +

    特殊注释语法 (TODO)

    // TODO: 更新逻辑以适应数据更改
     

    TODO 用于显示需要完成的事情的提醒

    -

    特殊注释语法 (FIXME)

    +

    特殊注释语法 (FIXME)

    // FIXME: 修复对现有条目进行更改时的故障行为
     

    FIXME 用于显示需要修复的内容的提醒

    -

    变量

    -

    变量声明

    +

    变量

    +

    变量声明

    变量用 var 声明:

    var greeting = "你好"
     var numberOfToys = 8
    @@ -153,7 +153,7 @@
     numberOfToys += 1
     print(numberOfToys) // 打印“9”
     
    -

    常数

    +

    常数

    常量用 let 声明:

    let greeting = "Hello"
     let numberOfToys = 8
    @@ -169,7 +169,7 @@
     numberOfToys += 1
     // ❌ 错误:numberOfToys 不可变
     
    -

    计算变量(get 和 set)

    +

    计算变量(get 和 set)

    import Foundation
     
    @@ -212,7 +212,7 @@
     print(distanceInMeters) // 800.0
     print(distanceInFeet) // 2624.0
     
    -

    willSet

    +

    willSet

    var distance = 5 {
       willSet {
    @@ -232,7 +232,7 @@
     distance = 10 // 打印: 距离将被设置 10
     

    willSet 可用于在设置变量值之前执行一些代码

    -

    didSet

    +

    didSet

    var distance = 5 {
       didSet {
         print("距离设置为 \(distance)")
    @@ -242,7 +242,7 @@
     distance = 10 // 打印: 距离将被设置 10
                   // 打印: 它的旧值是:5
     
    -

    willSet 和 didSet

    +

    willSet 和 didSet

    var distance = 5 {
       willSet(newDistance) {
         print("距离将设置为 \(newDistance)")
    @@ -254,8 +254,8 @@
     }
     distance = 10
     
    -

    条件和逻辑

    -

    if 语句

    +

    条件和逻辑

    +

    if 语句

    var halloween = true 
     if halloween {
       print("不给糖就捣蛋!")
    @@ -268,7 +268,7 @@
     }
     // 输出: "5 大于 3"
     
    -

    else 语句

    +

    else 语句

    var turbulence = false
     
     if turbulence {
    @@ -278,7 +278,7 @@
     }
     // 打印: 你可以自由地四处走动。
     
    -

    else if 语句

    +

    else if 语句

    var weather = "rainy"
     if weather == "sunny" {
       print("拿点防晒霜")
    @@ -291,7 +291,7 @@
     }
     // 打印: 拿一把雨伞
     
    -

    比较运算符

    +

    比较运算符

    5 > 1          // true 
     6 < 10         // true 
     2 >= 3         // false
    @@ -308,14 +308,14 @@
     
  • != 不等于
  • -

    三元条件运算符

    +

    三元条件运算符

    var driverLicense = true
     
     driverLicense 
         ? print("驾驶座") : print("乘客座位") 
     // 打印: 驾驶座
     
    -

    switch 语句

    +

    switch 语句

    var secondaryColor = "green"
     
     switch secondaryColor {
    @@ -328,7 +328,7 @@
     }
     // 打印: 蓝色和黄色的混合
     
    -

    switch 语句:区间匹配

    +

    switch 语句:区间匹配

    let year = 1905
     var artPeriod: String
     
    @@ -342,7 +342,7 @@
     }
     // 打印: 后印象派
     
    -

    switch 语句:复合案例

    +

    switch 语句:复合案例

    let service = "Seamless"
     
     switch service {
    @@ -357,7 +357,7 @@
     }
     // 打印: 餐厅外卖
     
    -

    switch 语句:where 子句

    +

    switch 语句:where 子句

    let num = 7
     
     switch num {
    @@ -371,30 +371,30 @@
     
     // 打印: 7 奇数
     
    -

    逻辑运算符!

    +

    逻辑运算符!

    !true          // false
     !false         // true
     
    -

    逻辑运算符 &&

    +

    逻辑运算符 &&

    true && true    // true
     true && false   // false 
     false && true   // false 
     false && false  // false
     
    -

    逻辑运算符 ||

    +

    逻辑运算符 ||

    true || true    // true
     true || false   // true
     false || true   // true 
     false || false  // false
     
    -

    组合逻辑运算符

    +

    组合逻辑运算符

    !false && true || false // true
     

    !false && true 首先计算并返回 true 然后,表达式,true || false 评估并返回最终结果 true

    false || true && false  // false
     

    true && false 首先计算返回 false 然后,表达式,false || false 评估并返回最终结果 false

    -

    控制执行顺序

    +

    控制执行顺序

    // 没有括号:
     true || true && false || false
     // ---->  true 
    @@ -403,7 +403,7 @@
     (true || true) && (false || false)
     // ---->  false 
     
    -

    简单的 guard

    +

    简单的 guard

    func greet(name: String?) {
       guard let unwrapped = name else {
         print("Hello guest!")
    @@ -414,19 +414,19 @@
     greet(name: "Asma") // 输出:Hello Asma!
     greet(name: nil)    // 输出:Hello guest!
     
    -

    循环

    -

    范围

    +

    循环

    +

    范围

    let zeroToThree = 0...3
     // zeroToThree: 0, 1, 2, 3
     
    -

    stride() 函数

    +

    stride() 函数

    for oddNum in stride(from: 1, to: 5, by: 2) {
       print(oddNum)
     }
     // 打印: 1
     // 打印: 3
     
    -

    for-in 循环

    +

    for-in 循环

    for char in "hehe" {
       print(char)
     }
    @@ -435,7 +435,7 @@
     // 打印: h
     // 打印: e
     
    -

    continue 关键字

    +

    continue 关键字

    for num in 0...5 {
       if num % 2 == 0 {
         continue
    @@ -447,7 +447,7 @@
     // 打印: 5
     

    continue 关键字将强制循环继续进行下一次迭代

    -

    break 关键字

    +

    break 关键字

    for char in "supercalifragilistice" {
       if char == "c" {
         break
    @@ -460,7 +460,7 @@
     // 打印: e
     // 打印: r
     
    -

    使用下划线

    +

    使用下划线

    for _ in 1...3 {
       print("Olé")
     }
    @@ -468,7 +468,7 @@
     // 打印: Olé
     // 打印: Olé
     
    -

    while 循环

    +

    while 循环

    var counter = 1
     var stopNum = Int.random(in: 1...10)
     
    @@ -479,17 +479,17 @@
     // 循环打印,直到满足停止条件
     

    while 循环接受一个条件,并在所提供的条件为 true 时持续执行其主体代码。如果条件从不为假,则循环将继续运行,程序将陷入无限循环

    -

    数组和集合

    -

    Array 数组

    +

    数组和集合

    +

    Array 数组

    var scores = [Int]()
     // 数组为空:[]
     
    -

    .count 属性

    +

    .count 属性

    var grocery = ["🥓", "🥞", "🍪", "🥛", "🍊"]
     print(grocery.count)
     // 打印: 5
     
    -

    索引

    +

    索引

    索引是指项目在有序列表中的位置,使用下标语法 array[index] 从数组中检索单个元素。

    var vowels = ["a", "e", "i", "o", "u"]
    @@ -501,20 +501,20 @@
     print(vowels[4])  // 打印: u
     

    注意:Swift 数组是零索引的,这意味着第一个元素的索引为 0。

    -

    用数组字面量初始化

    +

    用数组字面量初始化

    // 使用类型推断:
     var snowfall = [2.4, 3.6, 3.4, 1.8, 0.0]
     // 明确类型:
     var temp: [Int] = [33, 31, 30, 38, 44]
     
    -

    .append() 方法和 += 运算符

    +

    .append() 方法和 += 运算符

    var gymBadges = ["Boulder", "Cascade"]
     gymBadges.append("Thunder")
     gymBadges += ["Rainbow", "Soul"]
     // ["Boulder", "Cascade", "Thunder",
     //   "Rainbow", "Soul"]
     
    -

    .insert() 和 .remove() 方法

    +

    .insert() 和 .remove() 方法

    var moon = ["🌖", "🌗", "🌘", "🌑"]
     moon.insert("🌕", at: 0)
     // ["🌕", "🌖", "🌗", "🌘", "🌑"]
    @@ -522,7 +522,7 @@
     moon.remove(at: 4)
     // ["🌕", "🌖", "🌗", "🌘"]
     
    -

    遍历数组

    +

    遍历数组

    var employees = ["小王", "张三", "王五"]
     for person in employees {
       print(person)
    @@ -531,7 +531,7 @@
     // 打印: 张三
     // 打印: 王五
     
    -

    集合(Set)

    +

    集合(Set)

    var paintingsInMOMA: Set = [
       "The Dream",
       "The Starry Night",
    @@ -539,17 +539,17 @@
     ]
     

    我们可以使用集合(Set)来存储相同数据类型的唯一元素

    -

    空集合(Set)

    +

    空集合(Set)

    var team = Set<String>()
     
     print(team)
     // 打印: [] 
     
    -

    填充集合

    +

    填充集合

    var vowels: Set = ["a", "e", "i", "o","u"]
     

    要创建一个填充有值的集合,请在赋值运算符之前使用 Set 关键字。

    -

    .insert()

    +

    .insert()

    var cookieJar: Set = [
       "Chocolate Chip",
       "Oatmeal Raisin"
    @@ -557,7 +557,7 @@
     // 添加一个新元素
     cookieJar.insert("Peanut Butter Chip")
     
    -

    .remove() 和 .removeAll() 方法

    +

    .remove() 和 .removeAll() 方法

    var oddNumbers: Set = [1, 2, 3, 5]
     
     // 移除现有元素
    @@ -565,7 +565,7 @@
     // 删除所有元素
     oddNumbers.removeAll()
     
    -

    .contains()

    +

    .contains()

    var names: Set = ["Rosa", "Doug", "Waldo"]
     print(names.contains("Lola")) //打印: false
     
    @@ -576,34 +576,34 @@
     }
     // 打印: There's Waldo!
     
    -

    迭代一个集合

    +

    迭代一个集合

    var recipe: Set = ["蛋", "面粉", "糖"]
     
     for ingredient in recipe {
       print ("在配方中包含\(ingredient)")
     }
     
    -

    .isEmpty 属性

    +

    .isEmpty 属性

    var emptySet = Set<String>()
     print(emptySet.isEmpty)  // 打印: true
     
     var populatedSet: Set = [1, 2, 3]
     print(populatedSet.isEmpty) // 打印: false
     
    -

    .count 属性

    +

    .count 属性

    var band: Set = ["张三", "王五", "赵六"]
     
     print("乐队有 \(band.count) 名演奏者。")
     // 打印: 乐队有 4 名演奏者。
     
    -

    .intersection() 交叉

    +

    .intersection() 交叉

    var setA: Set = ["A", "B", "C", "D"]
     var setB: Set = ["C", "D", "E", "F"]
     
     var setC = setA.intersection(setB)
     print(setC)  // 打印: ["D", "C"]
     
    -

    .union() 合并去重

    +

    .union() 合并去重

    var setA: Set = ["A", "B", "C", "D"]
     var setB: Set = ["C", "D", "E", "F"]
     
    @@ -611,7 +611,7 @@
     print(setC) 
     // 打印: ["B", "A", "D", "F", "C", "E"]
     
    -

    .symmetricDifference() 对称差

    +

    .symmetricDifference() 对称差

    var setA: Set = ["A", "B", "C", "D"]
     var setB: Set = ["C", "D", "E", "F"]
     
    @@ -619,7 +619,7 @@
     print(setC) 
     // 打印: ["B", "E", "F", "A"]
     
    -

    .subtracting() 减法

    +

    .subtracting() 减法

    var setA: Set = ["A", "B", "C", "D"]
     var setB: Set = ["C", "D"]
     
    @@ -627,8 +627,8 @@
     print(setC) 
     // 打印: ["B", "A"]
     
    -

    字典

    -

    基础字典

    +

    字典

    +

    基础字典

    var dictionaryName = [
       "Key1": "Value1",
       "Key2": "Value2",
    @@ -636,7 +636,7 @@
     ]
     

    成对数据或键值对的无序集合

    -

    Keys

    +

    Keys

    var fruitStand = [
       "Coconuts": 12,
       "Pineapples": 12,
    @@ -644,7 +644,7 @@
     ]
     

    每个都是唯一的,即使它们都包含相同的

    -

    类型一致性

    +

    类型一致性

    var numberOfSides = [
       "triangle": 3,
       "square": 4,
    @@ -652,21 +652,21 @@
     ]
     

    仅包含 String 键和 Int

    -

    初始化填充字典

    +

    初始化填充字典

    var employeeID = [
       "Hamlet": 1367,
       "Horatio": 8261,
       "Ophelia": 9318
     ]
     
    -

    初始化一个空字典

    +

    初始化一个空字典

    // 初始化器语法:
     var yearlyFishPopulation = [Int: Int]()
     
     // 空字典字面量语法:
     var yearlyBirdPopulation: [Int: Int] = [:]
     
    -

    添加到字典

    +

    添加到字典

    var pronunciation = [
       "library": "lai·breh·ree",
       "apple": "a·pl"
    @@ -674,7 +674,7 @@
     // 新键:“programming”,新值:“prow·gra”
     pronunciation["programming"] = "prow·gra"
     
    -

    删除键值对

    +

    删除键值对

    var bookShelf = [
       "Goodnight": "Margaret Wise Brown",
    @@ -692,7 +692,7 @@
     // 删除所有值
     bookShelf.removeAll()
     
    -

    修改键值对

    +

    修改键值对

    var change = [
       "Quarter": 0.29,
    @@ -707,7 +707,7 @@
     change.updateValue(.10, forKey: "Dime")
     

    要更改键值对的值,请使用 .updateValue() 方法或下标语法,通过将括号 [ ] 和其中的现有键附加到字典的名称,然后添加赋值运算符 (=) 后跟修改后的值

    -

    .isEmpty 属性

    +

    .isEmpty 属性

    var bakery = [String:Int]()
     
     // 检查字典是否为空
    @@ -716,14 +716,14 @@
     // 检查字典是否为空
     print(bakery.isEmpty)    // 打印 false
     
    -

    .count 属性

    +

    .count 属性

    var fruitStand = [
       "Apples": 12,
       "Oranges", 17
     ]
     print(fruitStand.count)  // 打印: 2
     
    -

    为变量赋值

    +

    为变量赋值

    var hex = [
       "red": "#ff0000",
       "yellow": "#ffff00",
    @@ -739,7 +739,7 @@
     // 打印: 红色的十六进制代码 #ff0000
     

    将键值对的值分配给变量将返回一个可选值。要提取值,请使用可选的展开

    -

    遍历字典

    +

    遍历字典

    var emojiMeaning = [
       "🤔": "Thinking Face",
       "😪": "Sleepy Face",
    @@ -758,8 +758,8 @@
       print(meaning)
     }
     
    -

    函数

    -

    基础函数

    +

    函数

    +

    基础函数

    func washCar() -> Void {
       print("Soap")
       print("Scrub")
    @@ -767,7 +767,7 @@
       print("Dry")
     }
     
    -

    调用函数

    +

    调用函数

    func greetLearner() {
      print("欢迎来到 Quick Reference!")
     }
    @@ -775,7 +775,7 @@
     greetLearner()
     // 打印: 欢迎来到 Quick Reference!
     
    -

    返回值

    +

    返回值

    let birthYear = 1994
     var currentYear = 2020
     
    @@ -785,7 +785,7 @@
     
     print(findAge()) // 打印: 26
     
    -

    多个参数

    +

    多个参数

    func convertFracToDec(numerator: Double, denominator: Double) -> Double {
       return numerator / denominator
    @@ -794,14 +794,14 @@
     let decimal = convertFracToDec(numerator: 1.0, denominator: 2.0) 
     print(decimal) // Prints:  0.5 
     
    -

    省略参数标签

    +

    省略参数标签

    func findDiff(_ a: Int, b: Int) -> Int {
       return a - b
     }
     
     print(findDiff(6, b: 4)) // 打印: 2
     
    -

    返回多个值

    +

    返回多个值

    func smartphoneModel() -> (name: String, version: String, yearReleased: Int) {
       return ("iPhone", "8 Plus", 2017)
    @@ -813,7 +813,7 @@
     print(phone.version)  // 打印: 8 Plus
     print(phone.yearReleased) // 打印: 2017
     
    -

    Parameters & Arguments

    +

    Parameters & Arguments

    func findSquarePerimet(side: Int) -> Int {
       return side * 4
     } 
    @@ -824,7 +824,7 @@
     // Parameter: side
     // Argument:  5
     
    -

    隐式返回

    +

    隐式返回

    func nextTotalSolarEclipse() -> String {
       "April 8th, 2024 🌎"
     }
    @@ -832,14 +832,14 @@
     print(nextTotalSolarEclipse())
     // 打印: April 8th, 2024 🌎
     
    -

    默认参数

    +

    默认参数

    func greet(person: String = "guest") {
       print("Hello \(person)")
     }
     greet() // Hello guest
     greet(person: "Aliya") // Hello Aliya
     
    -

    输入输出参数

    +

    输入输出参数

    var currentSeason = "冬天" 
     
    @@ -862,7 +862,7 @@
     
     print(currentSeason) // 春天 🌱
     
    -

    可变参数

    +

    可变参数

    func totalStudent(data: String...) -> Int {
       let numStudents = data.count
       return numStudents
    @@ -871,14 +871,14 @@
     print(totalStudent(data: "王五", "张三"))
     // 打印: 2
     
    -

    可选参数

    +

    可选参数

    func getFirstInitial(from name: String?) -> String? {
       return name?.first
     }
     

    函数可以接受可选类型并返回可选类型。当一个函数不能返回请求类型的合理实例时,它应该返回 nil

    -

    结构

    -

    结构创建

    +

    结构

    +

    结构创建

    struct Building {
       var address: String
       var floors: Int
    @@ -890,7 +890,7 @@
     }
     

    结构或结构用于以编程方式在代码中表示现实生活中的对象。结构是使用 struct 关键字创建的,后跟其名称,然后是包含其属性和方法的主体

    -

    默认属性值

    +

    默认属性值

    struct Car {
       var numOfWheels = 4
       var topSpeed = 80
    @@ -901,7 +901,7 @@
     print(reliantRobin.numOfWheels) // 打印: 3
     print(reliantRobin.topSpeed)    // 打印: 80
     
    -

    结构实例创建

    +

    结构实例创建

    struct Person {
       var name: String
       var age: Int
    @@ -915,7 +915,7 @@
     // Person 实例:
     var morty = Person(name: "张三", age: 14)
     
    -

    init() 方法

    +

    init() 方法

    struct TV {
       var size: Int
    @@ -930,11 +930,11 @@
     

    使用 TV

    var newTV = TV(size: 65, type: "LED")
     
    -

    检查类型

    +

    检查类型

    print(type(of: "abc")) // 打印: String
     print(type(of: 123))   // 打印: 123
     
    -

    变异方法(mutating)

    +

    变异方法(mutating)

    struct Menu {
       var menuItems = ["Fries", "Burgers"]
    @@ -949,7 +949,7 @@
     print(dinerMenu.menuItems) 
     // 打印: ["Fries", "Burgers", "Toast"]
     
    -

    结构方法

    +

    结构方法

    struct Dog {
       func bark() {
         print("Woof")
    @@ -958,8 +958,8 @@
     let fido = Dog()
     fido.bark() // 打印: Woof
     
    -

    Class

    -

    引用类型(类)

    +

    Class

    +

    引用类型(类)

    class Player {
       var name: String
    @@ -976,7 +976,7 @@
     print(player1.name) // Isabella
     print(player2.name) // Isabella
     
    -

    类的实例

    +

    类的实例

    class Person {
       var name = ""
       var age = 0
    @@ -985,7 +985,7 @@
     var sonny = Person()
     // sonny 现在是 Person 的一个实例
     
    -

    init() 方法

    +

    init() 方法

    class Fruit {
       var hasSeeds = true 
    @@ -1000,7 +1000,7 @@
     
    let apple = Fruit(color: "red")
     

    可以使用 init() 方法和相应的初始化属性来初始化类,在 init() 方法中,self 关键字用于引用类分配属性值的实际实例

    -

    类属性

    +

    类属性

    var ferris = Student()
     
     ferris.name = "Ferris Bueller"
    @@ -1008,7 +1008,7 @@
     ferris.gpa = 3.81
     ferris.honors = false
     
    -

    继承

    +

    继承

    假设我们有一个 BankAccount 类:

    class BankAccount {
    @@ -1032,7 +1032,7 @@
     }
     

    新的 SavingsAccount 类(子类)自动获得了 BankAccount 类(超类)的所有特征。 此外,SavingsAccount 类定义了一个 .interest 属性和一个 .addInterest() 方法。

    -

    示例

    +

    示例

    使用数据类型

    class Student {
       var name: String
    @@ -1048,7 +1048,7 @@
       var honors = false
     }
     
    -

    这是结构定义和类定义的示例

    +

    这是结构定义和类定义的示例

    struct Resolution {
       var width = 0
       var height = 0
    @@ -1064,8 +1064,8 @@
     
    let resolution = Resolution(width: 1920)
     let someVideoMode = VideoMode()
     
    -

    枚举

    -

    定义枚举

    +

    枚举

    +

    定义枚举

    enum Day {
       case monday
       case tuesday
    @@ -1078,7 +1078,7 @@
     
     let casualWorkday: Day = .friday
     
    -

    Switch 语句

    +

    Switch 语句

    enum Dessert {
       case cake(flavor: String)
       case vanillaIceCream(scoops: Int)
    @@ -1094,7 +1094,7 @@
     }
     // 打印: "你点了一个红色天鹅绒蛋糕"
     
    -

    CaseIterable

    +

    CaseIterable

    enum Season: CaseIterable {
       case winter
       case spring
    @@ -1107,7 +1107,7 @@
     }
     

    添加对 CaseIterable 协议的一致性以访问 allCases 属性,该属性返回枚举的所有案例的数组

    -

    原始值

    +

    原始值

    enum Beatle: String {
       case john, paul, george, ringo
     }
    @@ -1115,7 +1115,7 @@
     print("披头士是 \(Beatle.john.rawValue).")
     // 打印: 披头士是 john.
     
    -

    相关值

    +

    相关值

    enum Dessert {
       case cake(flavor: String)
       case vanillaIceCream(scoops: Int)
    @@ -1124,7 +1124,7 @@
     
     let order: Dessert = .cake(flavor: "红色天鹅绒")
     
    -

    实例方法

    +

    实例方法

    enum Traffic {
       case light
    @@ -1141,7 +1141,7 @@
     // currentTraffic 现在是 .heavy
     

    就像类和结构一样,枚举也可以有实例方法。如果实例方法改变了枚举的值,则需要将其标记为 mutating

    -

    从原始值初始化

    +

    从原始值初始化

    enum Hello: String {
       case english = "Hello"
       case japanese = "你好呀!"
    @@ -1152,7 +1152,7 @@
     print(hello1) // Optional(Hello.japanese)
     print(hello2) // nil
     
    -

    计算属性

    +

    计算属性

    enum ShirtSize: String {
       case small = "S"
       case medium = "M"
    @@ -1163,7 +1163,7 @@
       }
     }
     
    -

    另见

    +

    另见

    • Swift 文档(官方) (swift.or)
    • 快速编程语言(官方) (swift.or)
    • @@ -1184,8 +1184,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -1196,7 +1194,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/swiftui.html b/docs/swiftui.html index 8763f9e4..fee8d6a0 100644 --- a/docs/swiftui.html +++ b/docs/swiftui.html @@ -34,14 +34,14 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    SwiftUI 2.0 备忘清单

    该备忘单提供了使用 SwiftUI 的标签的一些示例等

    入门

    -

    入门

    +

    介绍

    SwiftUI 提供用于声明应用程序用户界面的视图、控件和布局结构

    SwiftUI 与 UIKit 效果一致

    +

    SwiftUI 与 UIKit 效果一致

    -

    View(视图)

    -

    Text

    +

    View(视图)

    +

    Text

    要在UI中显示文本,只需编写:

    Text("Hello World")
     
    @@ -104,7 +104,7 @@ .lineLimit(nil) .padding()
    -

    Text 设置文本格式

    +

    Text 设置文本格式

    static let dateFormatter: DateFormatter = {
       let formatter = DateFormatter()
    @@ -117,18 +117,18 @@
       Text("Task due date: \(now, formatter: Self.dateFormatter)")
     }
     
    -

    Label

    +

    Label

    可以使用以下代码行在文本旁边设置图标。

    Label("SwiftUI CheatSheet", systemImage: "up.icloud")
     

    文档 - Label

    -
    +

    可以设置URL,单击后将重定向到浏览器。

    Link("Click me", destination: URL(string: "your_url")!)
     

    文档 - Label

    -

    Image 图片

    +

    Image 图片

    显示与环境相关的图像的视图。

    Image("foo") // 图像名称是foo
    @@ -150,7 +150,7 @@
       .aspectRatio(contentMode: .fit)
     

    文档 - Image

    -

    Shape

    +

    Shape

    创建矩形的步骤

    Rectangle()
         .fill(Color.red)
    @@ -162,7 +162,7 @@
       .frame(width: 50, height: 50)
     

    文档 - Image

    -

    ProgressView 进度视图

    +

    ProgressView 进度视图

    显示任务完成进度的视图。

    @State private var progress = 0.5
     
    @@ -178,7 +178,7 @@
     

    文档 - ProgressView

    -

    Map 地图界面的视图

    +

    Map 地图界面的视图

    显示指定区域的地图

    import MapKit
    @@ -202,8 +202,8 @@
     }
     

    文档 - Map

    -

    Layout(布局)

    -

    Background

    +

    Layout(布局)

    +

    Background

    将图像用作背景

    Text("Hello World")
         .font(.largeTitle)
    @@ -213,7 +213,7 @@
                 .frame(width: 100, height: 100)
         )
     
    -

    VStack

    +

    VStack

    以垂直线排列其子项的视图

    VStack (alignment: .center, spacing: 20){
         Text("Hello")
    @@ -222,7 +222,7 @@
     }
     

    创建静态可滚动列表。文档 - VStack

    -

    HStack

    +

    HStack

    将其子级排列在一条水平线上的视图。

    创建静态可滚动列表

    HStack (alignment: .center, spacing: 20){
    @@ -232,7 +232,7 @@
     }
     

    文档 - HStack

    -

    LazyVStack

    +

    LazyVStack

    iOS 14 一种视图,将其子级排列在垂直增长的线中,仅在需要时创建项。

    ScrollView {
       LazyVStack(alignment: .leading) {
    @@ -243,7 +243,7 @@
     }
     

    文档 - LazyVStack

    -

    LazyHStack

    +

    LazyHStack

    将子项排列在水平增长的线中的视图,仅在需要时创建项。

    ScrollView(.horizontal) {
    @@ -255,7 +255,7 @@
     }
     

    文档 - LazyHStack

    -

    ZStack

    +

    ZStack

    覆盖其子项的视图,使子项在两个轴上对齐。

    ZStack {
         Text("Hello")
    @@ -269,7 +269,7 @@
     }
     

    文档 - ZStack

    -

    LazyVGrid

    +

    LazyVGrid

    容器视图,将其子视图排列在垂直增长的网格中,仅在需要时创建项目。

    var columns: [GridItem] = Array(repeating: .init(.fixed(20)), count: 5)
    @@ -283,7 +283,7 @@
     }
     

    文档 - LazyVGrid

    -

    LazyHGrid

    +

    LazyHGrid

    一种容器视图,将其子视图排列在水平增长的网格中,仅在需要时创建项目。

    var rows: [GridItem] =
       Array(
    @@ -299,7 +299,7 @@
     }
     

    文档 - LazyHGrid

    -

    Spacer

    +

    Spacer

    沿其包含的堆栈布局的主轴或如果不包含在堆栈中的两个轴上扩展的灵活空间。

    HStack {
         Image(systemName: "clock")
    @@ -308,7 +308,7 @@
     }
     

    文档 - Spacer

    -

    Divider

    +

    Divider

    可用于分隔其他内容的视觉元素。

    HStack {
         Image(systemName: "clock")
    @@ -317,8 +317,8 @@
     }.fixedSize()
     

    文档 - Divider

    -

    Input(输入)

    -

    Toggle 开关选择器

    +

    Input(输入)

    +

    Toggle 开关选择器

    在打开和关闭状态之间切换的控件。

    @State var isShowing = true // toggle state
     
    @@ -330,7 +330,7 @@
     
    Toggle("Hello World", isOn: $isShowing)
     

    文档 - Toggle

    -

    Button 按钮控件

    +

    Button 按钮控件

    在触发时执行操作的控件。

    Button(
    @@ -360,7 +360,7 @@
     .cornerRadius(5)
     

    文档 - Button

    -

    TextField 输入框

    +

    TextField 输入框

    显示可编辑文本界面的控件。

    @State var name: String = "John"    
    @@ -389,7 +389,7 @@
     }
     

    文档 - TextField

    -

    SecureField 密码输入框

    +

    SecureField 密码输入框

    用户安全地输入私人文本的控件。

    @State var password: String = "1234"    
     var body: some View {
    @@ -399,7 +399,7 @@
     }
     

    文档 - SecureField

    -

    TextEditor 多行可滚动文本编辑器

    +

    TextEditor 多行可滚动文本编辑器

    可以显示和编辑长格式文本的视图。

    @State private var fullText: String = "这是一些可编辑的文本..."
     
    @@ -429,7 +429,7 @@
     

    文档 - TextEditor

    -

    DatePicker 日期控件

    +

    DatePicker 日期控件

    日期选择器(DatePicker)的样式也会根据其祖先而改变。 在 FormList 下,它显示为单个列表行,您可以点击以展开到日期选择器(就像日历应用程序一样)。

    @State var selectedDate = Date()
    @@ -480,7 +480,7 @@
         displayedComponents: [.date])
     

    文档 - DatePicker

    -

    Slider 滑动输入条

    +

    Slider 滑动输入条

    用于从值的有界线性范围中选择一个值的控件。

    @State var progress: Float = 0
     
    @@ -501,7 +501,7 @@
     }.padding()
     

    文档 - Slider

    -

    Picker 选择控件

    +

    Picker 选择控件

    用于从一组互斥值中进行选择的控件。

    选择器样式的更改基于其祖先,在 FormList 下,它显示为单个列表行,您可以点击以进入一个显示所有可能选项的新屏幕。

    @@ -532,7 +532,7 @@ }.pickerStyle(SegmentedPickerStyle())

    SwiftUI 中,UISegmentedControl 只是 Picker的另一种样式。分段控制(SegmentedControl)在 iOS 13 中也焕然一新。文档 - Picker

    -

    Stepper 执行语义递增和递减操作的控件

    +

    Stepper 执行语义递增和递减操作的控件

    用于执行语义递增和递减操作的控件。

    @State var quantity: Int = 0
    @@ -565,7 +565,7 @@
     }
     

    文档 - Stepper

    -

    Tap

    +

    Tap

    对于单次敲击

    Text("Tap me!").onTapGesture {
       print("Tapped!")
    @@ -576,7 +576,7 @@
       print("Tapped!")
     }
     
    -

    Gesture 手势

    +

    Gesture 手势

    手势如轻敲手势、长按手势、拖拉手势

    Text("Tap")
       .gesture(
    @@ -600,7 +600,7 @@
               }
       )
     
    -

    OnChange

    +

    OnChange

    onChange 是一个新的视图修改器,可用于所有 SwiftUI 视图。它允许您侦听状态更改并相应地对视图执行操作

    TextEditor(text: $currentText)
       .onChange(of: clearText) { value in
    @@ -609,8 +609,8 @@
           }
       }
     
    -

    List(列表)

    -

    List 列表

    +

    List(列表)

    +

    List 列表

    一个容器,用于显示排列在单列中的数据行。创建静态可滚动列表

    List {
         Text("Hello world")
    @@ -618,7 +618,7 @@
         Text("Hello world")
     }
     
    -

    创建动态列表

    +

    创建动态列表

    let names = ["John", "Apple", "Seed"]
     List(names) { name in
    @@ -636,13 +636,13 @@
         }
     }
     
    -

    可混合的列表

    +

    可混合的列表

    List {
         Text("Hello world")
         Image(systemName: "clock")
     }
     
    -

    使其分组

    +

    使其分组

    添加 .listStyle(GroupedListStyle())

    List {
       Section(header: Text("UIKit"),
    @@ -657,7 +657,7 @@
     }.listStyle(GroupedListStyle())
     
    -

    插入分组

    +

    插入分组

    要使其插入分组(.insetGrouped),请添加 .listStyle(GroupedListStyle()) 并强制使用常规水平尺寸类 .environment(\.horizontalSizeClass, .regular)

    List {
    @@ -678,7 +678,7 @@
     
    .listStyle(InsetGroupedListStyle())
     

    文档 - List

    -

    ScrollView 滚动视图

    +

    ScrollView 滚动视图

    滚动视图。

    ScrollView(alwaysBounceVertical: true) {
         Image("foo")
    @@ -686,8 +686,8 @@
     }
     

    文档 - ScrollView

    -

    Containers(容器)

    -
    +

    Containers(容器)

    +

    NavigationView 或多或少类似于 UINavigationController,它处理视图之间的导航,显示标题,将导航栏放在顶部。

    NavigationView {
         Text("Hello")
    @@ -707,7 +707,7 @@
         )
     }
     
    -
    +

    按下时触发导航演示的按钮。这是 pushViewController 的替代品

    NavigationView {
         NavigationLink(destination:
    @@ -725,7 +725,7 @@
         }.navigationBarTitle(Text("Master"))
     }
     
    -

    Group

    +

    Group

    Group 创建多个视图作为一个视图,同时也避免了 Stack 的10视图最大限制

    VStack {
         Group {
    @@ -739,7 +739,7 @@
         }
     }
     
    -

    TabView

    +

    TabView

    一个视图,允许使用可交互的用户界面元素在多个子视图之间进行切换。

    TabView {
    @@ -789,7 +789,7 @@
             .tag(1)
     }
     
    -

    Form

    +

    Form

    用于对用于数据输入的控件(例如在设置或检查器中)进行分组的容器。

    NavigationView {
    @@ -813,7 +813,7 @@
     }
     

    您几乎可以在此表单中放入任何内容,它将为表单呈现适当的样式。文档 - Form

    -
    +

    Modal 过渡。我们可以显示基于布尔的 Modal。

    @State var isModal: Bool = false
     
    @@ -828,7 +828,7 @@
     })
     

    文档 - Sheet

    -

    Alert

    +

    Alert

    警报演示的容器。我们可以根据布尔值显示Alert。

    @State var isError: Bool = false
     
    @@ -841,7 +841,7 @@
         )
     })
     
    -

    Alert 也与可识别项绑定

    +

    Alert 也与可识别项绑定

    @State var error: AlertError?
     
    @@ -869,7 +869,7 @@
     }
     

    文档 - Alert

    -

    ActionSheet

    +

    ActionSheet

    操作表演示文稿的存储类型。我们可以显示基于布尔值的 ActionSheet

    @State var isSheet: Bool = false
     
    @@ -894,7 +894,7 @@
         self.actionSheet
     })
     
    -

    ActionSheet 也与可识别项绑定

    +

    ActionSheet 也与可识别项绑定

    @State var sheetDetail: SheetDetail?
     
     var body: some View {
    @@ -927,7 +927,7 @@
     }
     

    文档 - ActionSheet

    -

    另见

    +

    另见

    • SwiftUI 2.0 Cheat Sheet (github.com)
    • SwiftUI 2.0 备忘清单 (swiftui-example)
    • @@ -946,8 +946,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -958,7 +956,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/toml.html b/docs/toml.html index 08ad7354..a52bd2b0 100644 --- a/docs/toml.html +++ b/docs/toml.html @@ -34,7 +34,7 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    @@ -43,15 +43,15 @@

    这是 TOML 格式配置文件语法的快速参考备忘清单。

    入门

    -

    入门

    +

    介绍

    TOML 是一种最小的配置文件格式,由于明显的语义而易于阅读。

    -

    示例

    +

    示例

    bool = true
     date = 2006-05-27T07:32:00Z
     string = "hello"
    @@ -59,30 +59,30 @@
     float = 3.14
     scientificNotation = 1e+12
     
    -

    注释

    +

    注释

    # A single line comment example
     # block level comment example
     # 注释行 1
     # 注释行 2
     # 注释行 3
     
    -

    整数

    +

    整数

    int1 = +42
     int2 = 0
     int3 = -21
     integerRange = 64
     
    -

    浮点数

    +

    浮点数

    float2 = 3.1415
     float4 = 5e+22
     float7 = 6.626e-34
     
    -

    布尔值

    +

    布尔值

    bool1 = true
     bool2 = false
     boolMustBeLowercase = true
     
    -

    时间日期

    +

    时间日期

    date1 = 1989-05-27T07:32:00Z
     date2 = 1989-05-26T15:32:00-07:00
     date3 = 1989-05-27T07:32:00
    @@ -90,24 +90,24 @@
     time1 = 07:32:00
     time2 = 00:32:00.999999
     
    -

    字符串

    +

    字符串

    str1 = "I'm a string."
     str2 = "You can \"quote\" me."
     str3 = "Name\tJos\u00E9\nLoc\tSF."
     

    See: Strings

    -

    Table

    +

    Table

    [owner]
     name = "Tom Preston-Werner"
     dob = 1979-05-27T07:32:00-08:00
     

    See: Tables

    -

    数组

    +

    数组

    array1 = [1, 2, 3]
     array2 = ["Commas", "are", "delimiter"]
     array3 = [8001, 8001, 8002]
     
    -

    友好数组

    +

    友好数组

    array1 = [ "Don't mix", "different", "types" ]
     array2 = [ [ 1.2, 2.4 ], ["all", 'strings', """are the same""", '''type'''] ]
    @@ -116,22 +116,22 @@
       "ignored"
     ]
     
    -

    TOML 字符串

    -

    多行字符串

    +

    TOML 字符串

    +

    多行字符串

    multiLineString = """
     Multi-line basic strings are surrounded
     by three quotation marks on each side
     and allow newlines. 
     """
     
    -

    文字字符串

    +

    文字字符串

    path = 'C:\Users\nodejs\templates'
     path2 = '\\User\admin$\system32'
     quoted = 'Tom "Dubs" Preston-Werner'
     regex = '<\i\c*\s*>'
     

    用单引号括起来。不允许转义。

    -

    多行文字字符串

    +

    多行文字字符串

    re = '''\d{2} apps is t[wo]o many'''
     lines = '''
     The first newline is
    @@ -140,20 +140,20 @@
     is preserved.
     '''
     
    -

    TOML Tables

    -

    基本的

    +

    TOML Tables

    +

    基本的

    [name]
     foo = 1
     bar = 2
     

    foobar 是名为name 的表中的键

    -

    嵌套

    +

    嵌套

    [table1]
     	foo = "bar"
     [table1.nested_table]
     	baz = "bat"
     
    -

    类数组

    +

    类数组

    [[comments]]
     author = "Nate"
    @@ -162,7 +162,7 @@
     author = "Anonymous"
     text = "Love it!"
     
    -

    ↓ 等效的 JSON

    +

    ↓ 等效的 JSON

    {
     	"comments" : [
     		{
    @@ -176,11 +176,11 @@
     	]
     }
     
    -

    点分隔

    +

    点分隔

    [dog."tater.man"]
     type = "pug"
     
    -

    ↓ 等效的 JSON

    +

    ↓ 等效的 JSON

    {
       "dog": {
         "tater.man": {
    @@ -189,11 +189,11 @@
       }
     }
     
    -

    多嵌套

    +

    多嵌套

    [foo.bar.baz]
     bat = "hi"
     
    -

    ↓ 等效的 JSON

    +

    ↓ 等效的 JSON

    {
     	"foo" : {
     		"bar" : {
    @@ -204,19 +204,19 @@
     	}
     }
     
    -

    忽略空格

    +

    忽略空格

    [a.b.c]          # this is best practice
     [ d.e.f ]        # same as [d.e.f]
     [ g .  h  .i ]   # same as [g.h.i]
     [ j . "ʞ" .'l' ] # same as [j."ʞ".'l']
     
    -

    Inline Table

    +

    Inline Table

    name = { first = "Tom", last = "Preston-Werner" }
     point = { x = 1, y = 2 }
     animal = { type.name = "pug" }
     
    -

    另见

    +

    另见

    • Document (toml.io)

      @@ -247,8 +247,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -259,7 +257,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/typescript.html b/docs/typescript.html index bf7dab47..e27871fd 100644 --- a/docs/typescript.html +++ b/docs/typescript.html @@ -34,34 +34,34 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    TypeScript 备忘清单

    包含最重要基础、泛型、方法、class 等 TypeScript 强类型编程语言语法的快速参考备忘单。初学者的完整快速参考。

    入门 Interface

    -

    入门 Interface

    +

    介绍

    TypeScript 是具有类型语法的 JavaScript。Interface 是为了匹配它们的运行时行为而构建的。

    -

    内置类型基元

    +

    内置类型基元

    any, void,
     boolean, string, number,
     undefined, null,
     unknown, never,
     bigint, symbol
     
    -

    常见的内置 JS 对象

    +

    常见的内置 JS 对象

    Date, Error,
     Array, Map, Set,
     Regexp, Promise
     
    -

    内置

    -

    类型字面量

    +

    内置

    +

    类型字面量

    Object:

    { field: string }
     
    @@ -74,10 +74,10 @@

    Tuple:

    [string, number]
     
    -

    避免

    +

    避免

    Object, String, Number, Boolean
     
    -

    通用语法

    +

    通用语法

    /** 可选择从现有接口或类型(Response, HTTPAble)中获取属性 */
     interface JSONResponse extends Response, HTTPAble {
    @@ -100,14 +100,14 @@
       readonly body: string;
     }
     
    -

    泛型

    +

    泛型

    声明一个可以在你的 Interface 中改变的类型

    interface APICall<Response> {
       data: Response
     }
     
    -

    用法

    +

    用法

    const api: APICall<ArtworkCall> = ...
     
     api.data  // Artwork
    @@ -121,21 +121,21 @@
     
     api.data.status
     
    -

    重载

    +

    重载

    interface Expect {
       (matcher: boolean): string
       (matcher: string): boolean;
     }
     

    一个可调用 Interface 可以对不同的参数集有多个定义。

    -

    类一致性

    +

    类一致性

    interface Syncable {
       sync(): void
     }
     class Account implements Syncable { ... }
     

    您可以通过实现确保类 class 符合 Interface。

    -

    Get & Set

    +

    Get & Set

    对象可以有自定义的 gettersetter

    interface Ruler {
       get size(): number
    @@ -147,7 +147,7 @@
     r.size = 12
     r.size = "36"
     
    -

    通过合并扩展

    +

    通过合并扩展

    interface APICall {
       data: Response
     }
    @@ -157,55 +157,55 @@
     }
     

    Interface 被合并,多个声明将向类型定义添加新字段。

    -

    Type

    -

    Type vs Interface

    +

    Type

    +

    Type vs Interface

    • Interface 只能描述对象形状
    • Interface 可以通过多次声明来扩展
    • 在性能关键 Type 中,Interface 比较检查可以更快。
    -

    把类型想象成变量

    +

    把类型想象成变量

    就像您如何在不同范围内创建具有相同名称的变量一样,type 具有相似的语义。

    -

    使用实用程序类型构建

    +

    使用实用程序类型构建

    TypeScript 包含许多全局类型,它们将帮助您在类型系统中完成常见任务。检查他们的网站。

    -

    原始类型

    +

    原始类型

    type SanitizedInput = string;
     type MissingNo = 404;
     

    主要用于文档

    -

    对象字面类型

    +

    对象字面类型

    type Location = {
       x: number;
       y: number;
     };
     
    -

    联合类型

    +

    联合类型

    type Size = "small" | "medium" | "large"
     

    描述许多选项中的一个类型,例如已知字符串的列表。

    -

    交叉口类型

    +

    交叉口类型

    type Location = { x: number }
                   & { y: number }
     // { x: number, y: number }
     

    一种合并/扩展类型的方法

    -

    从值类型

    +

    从值类型

    const data = { ... }
     type Data = typeof data
     

    通过 typeof 运算符重用来自现有 JavaScript 运行时值的类型。

    -

    从函数返回类型

    +

    从函数返回类型

    const createFixtures = () => { ... }
     type Fixtures = ReturnType<typeof createFixtures>
     function test(fixture: Fixtures) {}
     

    将函数的返回值重新用作类型。

    -

    从模块类型

    +

    从模块类型

    const data: import("./data").data
     

    这些功能非常适合构建库、描述现有的 JavaScript 代码,您可能会发现在大多数 TypeScript 应用程序中很少使用它们。

    -

    对象字面量语法

    +

    对象字面量语法

    type JSONResponse = {
       version: number;                        // 字段
    @@ -221,7 +221,7 @@
     }
     

    用于节省空间的 Terser,请参阅 Interface 备忘清单了解更多信息,除了“static”匹配之外的所有内容。

    -

    映射类型

    +

    映射类型

    type Artist = {
       name: string, bio: string
     }
    @@ -235,7 +235,7 @@
     //    void, bio: (nv: string) => void }
     

    类似于类型系统的映射语句,允许输入类型更改新类型的结构。

    -

    模板联合类型

    +

    模板联合类型

    type SupportedLangs =  "en" | "pt" | "zh";
     type FooterLocaleIDs = "header" | "footer";
    @@ -245,7 +245,7 @@
     //         | "pt_header_id" | "pt_footer_id"
     //         | "zh_header_id" | "zh_footer_id"
     
    -

    条件类型

    +

    条件类型

    type HasFourLegs<Animal> = Animal extends { legs: 4 } ? Animal : never
     type Animals = Bird | Dog | Ant | Wolf;
    @@ -253,10 +253,10 @@
     // Dog | Wolf
     

    在类型系统中充当“if 语句”。 通过泛型创建,然后通常用于减少类型联合中的选项数量。

    -

    控制流动分析

    -

    If 声明

    +

    控制流动分析

    +

    If 声明

    -

    typeof(用于原语)

    +

    typeof(用于原语)

    const input = getUserInput()
     input // string | number
     
    @@ -264,7 +264,7 @@
      input // string
     }
     
    -

    对象中的“property”(对于对象)

    +

    对象中的“property”(对于对象)

    const input = getUserInput()
     input  // string | { error: ... }
     
    @@ -272,7 +272,7 @@
       input // { error: ... }
     }
     
    -

    instanceof(用于类)

    +

    instanceof(用于类)

    const input = getUserInput()
       input // number | number[]
     
    @@ -280,7 +280,7 @@
       input // number[]
     }
     
    -

    类型保护功能(适用于任何东西)

    +

    类型保护功能(适用于任何东西)

    const input = getUserInput()
        input // number | number[]
     
    @@ -288,7 +288,7 @@
       input // number[]
     }
     
    -

    任务

    +

    任务

    const data1 = {
       name: "Zagreus"
    @@ -320,10 +320,10 @@
     data = "Hello"
     data // string
     
    -

    关键点

    +

    关键点

    CFA 几乎总是采用联合,并根据代码中的逻辑减少联合内的类型数量。

    大多数时候 CFA 在自然 JavaScript 布尔逻辑中工作,但是有一些方法可以定义您自己的函数,这些函数会影响 TypeScript 如何缩小类型。

    -

    表达式

    +

    表达式

    const input = getUserInput()
     input // string | number
     const inputLength =
    @@ -332,13 +332,13 @@
        // input: string
     

    在进行布尔运算时,缩窄也发生在与代码相同的行上

    -

    可识别联合

    +

    可识别联合

    type Responses =
       | { status: 200, data: any }
       | { status: 301, to: string }
       | { status: 400, error: Error }
     
    -

    用法

    +

    用法

    const response = getResponse()
     response // Responses
     switch(response.status) {
    @@ -347,7 +347,7 @@
       case 400: return response.error
     }
     
    -

    断言函数

    +

    断言函数

    描述影响当前范围的 CFA 更改的函数,因为它抛出而不是返回 false。

    function assertResponse(obj: any): asserts obj is SuccessResponse {
    @@ -356,7 +356,7 @@
       }
     }
     
    -

    用法

    +

    用法

    const res = getResponse():
     res // SuccessResponse | ErrorResponse
     
    @@ -365,7 +365,7 @@
     
     res // SuccessResponse
     
    -

    in 操作符

    +

    in 操作符

    interface A {
       x: number;
     }
    @@ -382,13 +382,13 @@
     }
     

    操作符可以安全的检查一个对象上是否存在一个属性,它通常也被作为类型保护使用

    -

    Class

    -

    创建类实例

    +

    Class

    +

    创建类实例

    class ABC { ... }
     const abc = new ABC()
     

    新 ABC 的参数来自构造函数。

    -

    private x 与 #private

    +

    private x 与 #private

    前缀 private 是一个仅类型的添加,在运行时没有任何影响。 在以下情况下,类之外的代码可以进入项目:

    class Bag {
       private item: any
    @@ -397,17 +397,17 @@
     

    Vs #private 是运行时私有的,并且在 JavaScript 引擎内部强制执行,它只能在类内部访问:

    class Bag { #item: any }
     
    -

    Class 上的 “this”

    +

    Class 上的 “this”

    函数内部‘this’的值取决于函数的调用方式。 不能保证始终是您可能在其他语言中使用的类实例。

    您可以使用“此参数”、使用绑定功能或箭头功能来解决问题。

    -

    类型和值

    +

    类型和值

    一个类既可以用作类型也可以用作值。

    const a:Bag = new Bag()
     

    所以,小心不要这样做:

    class C implements Bag {}
     
    -

    通用语法

    +

    通用语法

    // 确保类符合一组接口或类型  ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈▶┈┈╮
     // 子类这个类 ┈┈┈┈┈┈┈┈↘                 ┈┈┈┈┈┈┈┈┈┈┈┈┈┴┈┈┈┈┈┈┈
    @@ -446,7 +446,7 @@
       static { this.#userCount = -1 }
     }
     
    -

    泛型

    +

    泛型

    声明一个可以在你的类方法中改变的类型。

    class Box<Type> {
       contents: Type
    @@ -457,7 +457,7 @@
     const stringBox = new Box("a package")
     

    这些功能是 TypeScript 特定的语言扩展,可能永远无法使用当前语法进入 JavaScript。

    -

    参数属性

    +

    参数属性

    class Location {
       constructor(public x: number, public y: number) {}
     }
    @@ -467,7 +467,7 @@
     loc.y // 40
     

    TypeScript 特定于类的扩展,可自动将实例字段设置为输入参数。

    -

    抽象类

    +

    抽象类

    abstract class Animal {
       abstract getName(): string;
       printName() {
    @@ -477,7 +477,7 @@
     class Dog extends Animal { getName(): { ... } }
     

    一个类可以被声明为不可实现,但可以在类型系统中被子类化。 class 成员也可以。

    -

    装饰器和属性

    +

    装饰器和属性

    import { Syncable, triggersSync, preferCache, required } from "mylib"
     
    @@ -491,7 +491,7 @@
     }
     

    您可以在类、类方法、访问器、属性和方法参数上使用装饰器。

    -

    索引签名

    +

    索引签名

    class MyClass {
       // 最好将索引数据存储在另一个地方
       // 而不是类实例本身。
    @@ -504,8 +504,8 @@
     }
     

    类可以声明索引签名,与其他对象类型的索引签名相同。

    -

    实用程序类型

    -

    Awaited<Type>

    +

    实用程序类型

    +

    Awaited<Type>

    type A = Awaited<Promise<string>>;
     // type A = string
     
    @@ -516,7 +516,7 @@
     // type C = number | boolean
     

    这种类型旨在模拟异步函数中的 await 或 Promises 上的 .then() 方法等操作 - 特别是它们递归解包 Promises 的方式。

    -

    Required<Type>

    +

    Required<Type>

    interface Props {
       a?: number;
       b?: string;
    @@ -528,7 +528,7 @@
     // 但在 'Required<Props>' 类型中是必需的。
     

    使 Type 中的所有属性成为必需

    -

    Readonly<Type>

    +

    Readonly<Type>

    interface Todo {
       title: string;
     }
    @@ -542,7 +542,7 @@
                 : Readonly<Type>;
     

    将 Type 中的所有属性设为只读

    -

    Partial<Type>

    +

    Partial<Type>

    interface Todo {
       title: string;
       description: string;
    @@ -562,7 +562,7 @@
     });
     

    Type 中的所有属性设为可选

    -

    Record<Keys, Type>

    +

    Record<Keys, Type>

    interface CatInfo {
       age: number;
       breed: string;
    @@ -578,7 +578,7 @@
     // 👉 const cats: Record<CatName, CatInfo>
     

    构造一个具有一组 Keys 类型的属性 Type 的类型

    -

    Pick<Type, Keys>

    +

    Pick<Type, Keys>

    interface Todo {
       name: string;
       description: string;
    @@ -596,7 +596,7 @@
      // 👉 const todo: TodoPreview
     

    从 Type 中选择一组其键在并集 Keys 中的属性

    -

    Exclude<UnionType, ExcludedMembers>

    +

    Exclude<UnionType, ExcludedMembers>

    type T0 = Exclude<"a" | "b" | "c", "a">;
     // 👉 type T0 = "b" | "c"
     
    @@ -608,7 +608,7 @@
     // 👉 type T2 = string | number
     

    UnionType排除那些可分配给 ExcludedMembers 的类型

    -

    Extract<Type, Union>

    +

    Extract<Type, Union>

    type T0 = Extract<
       "a" | "b" | "c", "a" | "f"
     >;
    @@ -620,7 +620,7 @@
     // type T1 = () => void
     

    通过从 Type 中提取所有可分配给 Union 的联合成员来构造一个类型。

    -

    NonNullable<Type>

    +

    NonNullable<Type>

    type T0 = NonNullable<
       string | number | undefined
     >;
    @@ -632,7 +632,7 @@
     // type T1 = string[]
     

    通过从 Type 中排除 null 和 undefined 来构造一个类型。

    -

    Omit<Type, Keys>

    +

    Omit<Type, Keys>

    interface Todo {
       name: string;
       completed: boolean;
    @@ -650,7 +650,7 @@
      // 👉 const todo: TodoPreview
     

    构造一个具有 Type 属性的类型,但类型 Keys 中的属性除外

    -

    Parameters<Type>

    +

    Parameters<Type>

    declare function f1(
       arg: { a: number; b: string }
     ): void;
    @@ -672,7 +672,7 @@
     // type T5 = never
     

    从函数类型 Type 的参数中使用的类型构造元组类型。

    -

    ConstructorParameters<Type>

    +

    ConstructorParameters<Type>

    type T0 = ConstructorParameters<
       ErrorConstructor
     >;
    @@ -692,8 +692,8 @@
     // type T3 = unknown[]
     

    从构造函数类型的类型构造元组或数组类型。它产生一个包含所有参数类型的元组类型(如果 Type 不是函数,则类型 never )。

    -

    内在字符串操作类型

    -

    Uppercase<StringType>

    +

    内在字符串操作类型

    +

    Uppercase<StringType>

    type Greeting = "Hello, world"
     type ShoutyGreeting = Uppercase<Greeting>
     // type ShoutyGreeting = "HELLO, WORLD"
    @@ -703,7 +703,7 @@
     // type MainID = "ID-MY_APP"
     

    将字符串中的每个字符转换为大写版本。

    -

    Lowercase<StringType>

    +

    Lowercase<StringType>

    type Greeting = "Hello, world"
     type QuietGreeting = Lowercase<Greeting>
     // type QuietGreeting = "hello, world"
    @@ -713,19 +713,19 @@
     // type MainID = "id-my_app"
     

    将字符串中的每个字符转换为等效的小写字母

    -

    Capitalize<StringType>

    +

    Capitalize<StringType>

    type LowercaseGreeting = "hello, world";
     type Greeting = Capitalize<LowercaseGreeting>;
     // type Greeting = "Hello, world"
     

    将字符串中的第一个字符转换为等效的大写字母

    -

    Uncapitalize<StringType>

    +

    Uncapitalize<StringType>

    type UppercaseGreeting = "HELLO WORLD";
     type UncomfortableGreeting = Uncapitalize<UppercaseGreeting>;
     // type UncomfortableGreeting = "hELLO WORLD"
     

    将字符串中的第一个字符转换为等效的小写字母

    -

    ReturnType<Type>

    +

    ReturnType<Type>

    declare function f1(): {
       a: number; b: string
     };
    @@ -757,7 +757,7 @@
     // type T6 = never
     

    构造一个由函数 Type 的返回类型组成的类型。

    -

    ThisType<Type>

    +

    ThisType<Type>

    type ObjectDescriptor<D, M> = {
       data?: D;
       // 方法中“this”的类型是 D & M
    @@ -787,7 +787,7 @@
     obj.moveBy(5, 5);
     

    此实用程序不返回转换后的类型。 相反,它用作上下文 this 类型的标记。 请注意,必须启用 noImplicitThis 标志才能使用此实用程序。

    -

    InstanceType<Type>

    +

    InstanceType<Type>

    class C {
       x = 0;
       y = 0;
    @@ -800,7 +800,7 @@
     // type T2 = never
     

    构造一个由 Type 中构造函数的实例类型组成的类型。

    -

    ThisParameterType<Type>

    +

    ThisParameterType<Type>

    function toHex(this: Number) {
       return this.toString(16);
     }
    @@ -812,7 +812,7 @@
     }
     

    提取函数类型的 this 参数的类型,如果函数类型没有 this 参数,则为未知。

    -

    OmitThisParameter<Type>

    +

    OmitThisParameter<Type>

    function toHex(this: Number) {
       return this.toString(16);
     }
    @@ -823,8 +823,8 @@
     console.log(fiveToHex());
     

    从 Type 中移除 this 参数。 如果 Type 没有显式声明此参数,则结果只是 Type。 否则,从 Type 创建一个不带此参数的新函数类型。 泛型被删除,只有最后一个重载签名被传播到新的函数类型中。

    -

    JSX

    -

    JSX 介绍

    +

    JSX

    +

    JSX 介绍

    JSX 规范是对 ECMAScript 的类似 XML 的语法扩展。

    • 使用 .tsx 扩展名命名您的文件
    • @@ -832,21 +832,21 @@
    • 不允许在 .tsx 文件中使用尖括号类型断言。
    • JSX 规范
    -

    as 运算符

    +

    as 运算符

    const foo = <foo>bar;
     // ❌ 不允许在 .tsx 👆 文件中使用尖括号类型断言。
     
     const foo = bar as foo;
     

    as 运算符在 .ts.tsx 文件中都可用,并且在行为上与尖括号类型断言样式相同。

    -

    基于值的元素

    +

    基于值的元素

    import MyComponent from "./myComponent";
     
     <MyComponent />; // ok
     <SomeOtherComponent />; // ❌ error
     

    基于值的元素只是由范围内的标识符查找。

    -

    内在的元素

    +

    内在的元素

    declare namespace JSX {
       interface IntrinsicElements {
         foo: any;
    @@ -862,7 +862,7 @@
       }
     }
     
    -

    函数组件

    +

    函数组件

    interface FooProp {
       name: string;
    @@ -879,7 +879,7 @@
     );
     

    该组件被定义为一个 JavaScript 函数,其第一个参数是一个 props 对象。 TS 强制它的返回类型必须可分配给 JSX.Element。

    -

    函数组件重载

    +

    函数组件重载

    interface CeProps {
       children: JSX.Element[] | JSX.Element;
     }
    @@ -898,7 +898,7 @@
       // ...
     }
     
    -

    函数子组件

    +

    函数子组件

    interface MenuProps extends React.LiHTMLAttributes<HTMLUListElement> { ... }
     const InternalMenu = (props: MenuProps, ref?: React.ForwardedRef<HTMLUListElement>) => (
    @@ -918,7 +918,7 @@
     <Menu.Item />     // ✅ ok
     <Menu.SubMenu />  // ✅ ok
     
    -

    有效组件

    +

    有效组件

    declare namespace JSX {
       interface ElementClass {
    @@ -943,7 +943,7 @@
     <NotAValidFactoryFunction />; // ❌ error
     

    默认情况下,JSX.ElementClass 是 {},但可以对其进行扩展,以将 JSX 的使用限制为仅限于符合适当接口的类型。

    -

    类组件

    +

    类组件

    type Props = {
       header: React.ReactNode;
    @@ -963,7 +963,7 @@
     
     <MyComponent header={<h1>Header</h1>} body={<i>body</i>} />
     
    -

    泛型组件

    +

    泛型组件

    // 一个泛型组件
     type SelectProps<T> = { items: T[] };
    @@ -985,8 +985,6 @@ function anchorPoint() {
       Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active'))
       if (elm?.tagName === 'H3') {
         elm?.parentElement?.parentElement?.classList.add('active');
    -    const box = elm?.parentElement?.parentElement;
    -    console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap'))
       }
     }
     anchorPoint();
    @@ -997,7 +995,6 @@ function updateAnchor(element) {
         tocanchor.classList.remove('is-active-link');
       });
       const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`);
    -  console.log('anchor', anchor)
       if (anchor) {
         anchor.classList.add('is-active-link');
       }
    diff --git a/docs/vim.html b/docs/vim.html
    index 0a4ec408..1e8fd83f 100644
    --- a/docs/vim.html
    +++ b/docs/vim.html
    @@ -34,19 +34,19 @@
         document.documentElement.setAttribute('data-color-mode', mode);
         localStorage.setItem(LOCAL_NANE, mode);
       }
    -

    +

    Vim 备忘清单

    Vim 8.2 快速参考备忘单的有用集合,可帮助您更快地学习 vim 编辑器。

    入门

    -

    入门

    +

    运动图

    ▼/▶ 光标   ▽/▷ 目标
     
    -

    左右动作

    +

    左右动作

    ╭┈┈┈┈┈┈┈┈┈┈┈┈┈ |      
     ├┈┈┈┈┈┈┈┈┈┈┈┈┈ 0      $ ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮
     ┆  ╭┈┈┈┈┈┈┈┈┈┈ ^      fe ┈┈┈┈┈┈┈┈╮       ┆
    @@ -58,7 +58,7 @@
     ▽  ▽  ▽▽ ▽ ▽  ▽▼      ▼▽ ▽ ▽ ▽  ▽▽       ▽
        echo "A cheatsheet from quickReference"
     
    -

    上下动作

    +

    上下动作

                      - SCREEN 1 START
        ╭┈┬┈┈┈┈┈┈┈┈┈▷  #!/usr/bin/python
        ┆ ┆     ╭┈┈┈▷      
    @@ -75,7 +75,7 @@
     ┆                 - SCREEN 1 END
     ╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈▷  print("SCREEN 2")
     
    -

    动作

    +

    动作

    @@ -100,7 +100,7 @@
    快捷方式说明
    h | j | k | l方向键
    <C-u> / <C-d>上/下半页
    <C-b> / <C-f>向上/向下翻页
    -

    字(词)

    +

    字(词)

    @@ -120,7 +120,7 @@
    快捷方式说明
    b / w上一个/下一个单词
    ge / e上一个/下一个词尾
    -

    +

    @@ -140,7 +140,7 @@
    快捷方式说明
    0 (zero) / $行的开始/结束
    ^行开头 (非空白)
    -

    字符串

    +

    字符串

    @@ -164,7 +164,7 @@
    快捷方式说明
    Fe / fe移动到上一个/下一个e
    To / to在上一个/下一个o之前/之后移动
    | / n|转到第一个/n
    -

    文档

    +

    文档

    @@ -188,7 +188,7 @@
    快捷方式说明
    gg / G第一行/最后一行
    :n | nG转到第 n
    } / {下一个/上一个空行
    -

    窗口

    +

    窗口

    @@ -208,7 +208,7 @@
    快捷方式说明
    H / M / L上/中/下屏幕
    zt / zz / zb上/中/下这条线
    -

    插入模式

    +

    插入模式

    @@ -248,7 +248,7 @@
    快捷方式说明
    i / a在光标之前/之后插入
    I / A插入行的开始/结束
    o / O (letter)在下方/上方插入新行
    s / S删除字符/行并插入
    C / cc更改到/当前行的结尾
    gi在最后一个插入点插入
    Esc | <C-[>退出插入模式
    -

    保存和退出

    +

    保存和退出

    @@ -300,7 +300,7 @@
    快捷方式说明
    :w保存
    :q关闭文件
    :wq | :x | ZZ保存并退出
    :wqa保存并退出所有文件
    :q! | ZQ强制退出
    :qa关闭所有文件
    :qa!强制退出所有文件
    :w new.txt写入new.txt
    :sav new.txt保存并编辑new.txt
    :w !sudo tee %写入只读文件
    -

    正常模式

    +

    正常模式

    @@ -336,7 +336,7 @@
    快捷方式说明
    r替换一个字符
    R进入替换模式
    u / 3u撤消更改1/3
    U在一行上撤消更改
    J加入下一行
    <C-r> / 5 <C-r>重做更改1/5
    -

    剪切和粘贴

    +

    剪切和粘贴

    @@ -389,7 +389,7 @@
    快捷方式说明
    x删除字符 (剪切)
    p / P在之后/之前粘贴
    xp交换两个字符
    D删除到行尾 (剪切)
    dw删除单词 (剪切)
    dd删除线 (剪切)
    ddp交换两条线
    yy拉线 (复制)
    "*p | "+p从系统剪贴板粘贴
    "*y | "+y粘贴到系统剪贴板
    -

    在可视化模式下

    +

    在可视化模式下

    @@ -413,7 +413,7 @@
    快捷方式说明
    d | x删除选择 (剪切)
    s替换选择
    yYank 选择 (复制)
    -

    重复

    +

    重复

    @@ -445,7 +445,7 @@
    快捷方式说明
    .重复上一个命令
    ;重复最新的 ftFT
    ,重复最新的ftFT颠倒
    &重复最后一个:s
    @:重复命令行命令
    -

    可视化模式

    +

    可视化模式

    @@ -477,7 +477,7 @@
    快捷方式说明
    v进入可视化模式
    V进入视线模式
    <C-v>进入可视化阻挡模式
    ggVG选择所有文本
    > / <向右/向左移动文本
    -

    +

    @@ -510,8 +510,8 @@
    :--
    qi录制宏 i
    q停止录制宏
    @i运行宏i
    7@i运行宏 i 7 次
    @@重复上一个宏

    您可以为任何字母保存宏,而不仅仅是 i

    -

    Vim 运算符

    -

    用法

    +

    Vim 运算符

    +

    用法

    @@ -533,7 +533,7 @@
    快捷方式说明
    dw
    运算符动作

    可用运算符动作 结合使用以使用它们

    -

    可用运算符

    +

    可用运算符

    @@ -590,7 +590,7 @@
    快捷方式说明
    d删除
    yYank (复制)
    c更改 (删除然后插入)
    p粘贴
    =格式代码
    g~切换案例
    gU大写
    gu小写
    >右缩进
    <左缩进
    !通过外部程序过滤
    -

    例子

    +

    例子

    @@ -651,7 +651,7 @@
    组合说明
    dd删除当前行
    dj删除两行
    dw删除到下一个单词
    db删除到单词的开头
    dfa删除直到 a 字符
    d/hello删除直到 hello
    cc更改当前行,与 S 同义
    yy复制当前行
    >j缩进 2 行
    ggdG删除完整的文档
    gg=G缩进一个完整的文档
    ggyG复制整个文档
    -

    计数

    +

    计数

    [数字] <运算符> <动作>
     <运算符> [数字] <动作>
     
    @@ -686,8 +686,8 @@
    组合说明
    2dd删除 2
    6yy复制 6
    d3w删除 3
    d5j向下删除 5
    >4k向上缩进 4
    -

    Vim 文本对象

    -

    用法

    +

    Vim 文本对象

    +

    用法

    @@ -709,7 +709,7 @@
    快捷方式说明
    v        i / a
    Operatorinner(内部) / around(周围)

    文本块内部或周围使用 operator 进行操作

    -

    文本对象

    +

    文本对象

    @@ -762,7 +762,7 @@
    快捷方式说明
    p段落
    w单词
    WWORD
    (被空格包围)
    s句子
    [ ( { <[]、() 或 {} 块
    ] ) } >[]、() 或 {} 块
    ' " `带引号的字符串
    b一个块 [(
    B[{中的一个块
    t一个 HTML 标签块

    查看 :help text-objects

    -

    删除

    +

    删除

    @@ -793,7 +793,7 @@
    快捷方式说明
    diw删除内词
    dis删除内句
    di"引号中删除
    da"删除引号 (包括引号)
    dip删除段落
    -

    选择

    +

    选择

    @@ -832,7 +832,7 @@
    快捷方式说明
    vi"选择内引号“...{.underline}”
    va"选择引号"..."{.underline}
    vi[选择内括号 [...{.underline}]
    va[选择括号[...]{.underline}
    viw选择内词
    vip选择内部段落
    vipip选择更多段落
    -

    杂项

    +

    杂项

    @@ -867,8 +867,8 @@
    快捷方式说明
    ciw换内字
    ci"更改内部引号
    cit更改内部标签 (HTML)
    cip更改内部段落
    yipYank 段落
    yapYank 段落 (包括换行符)
    -

    Vim 多个文件

    -

    Buffers (缓冲器)

    +

    Vim 多个文件

    +

    Buffers (缓冲器)

    @@ -927,7 +927,7 @@
    :--
    :e file在新缓冲区中编辑文件
    :bn转到下一个缓冲区
    :bp转到上一个缓冲区
    :bd从缓冲区列表中删除文件
    :b 5打开缓冲区 #5
    :b file按文件转到缓冲区
    :ls列出所有打开的缓冲区
    :sp file打开和拆分窗口
    :vs file打开和垂直拆分窗口
    :hid隐藏此缓冲区
    :wn写入文件并移至下一个
    :tab ba将所有缓冲区编辑为选项卡
    -

    窗口

    +

    窗口

    @@ -987,7 +987,7 @@
    :--
    <C-w> s拆分窗口
    <C-w> v垂直拆分窗口
    <C-w> w切换窗口
    <C-w> q退出一个窗口
    <C-w> T拆分成一个新标签
    <C-w> x用下一个交换当前
    <C-w> - / +减少/增加高度
    <C-w> < / >减少/增加宽度
    <C-w> |最大宽度
    <C-w> =同样高和宽
    <C-w> h / l转到左/右窗口
    <C-w> j / k转到上/下窗口
    -

    选项卡

    +

    选项卡

    @@ -1038,7 +1038,7 @@
    快捷方式说明
    :tabe [file]E在新选项卡中编辑文件
    :tabf [file]如果在新选项卡中存在则打开
    :tabcC失去当前选项卡
    :tabo关闭o其他选项卡
    :tabs列出所有标签
    :tabr转到第一个r标签
    :tabl转到 last 选项卡
    :tabm 0转到位置 0
    :tabn转到 next 选项卡
    :tabp转到p上一个标签
    -

    正常模式

    +

    正常模式

    @@ -1061,8 +1061,8 @@
    快捷方式说明
    gt转到 next 选项卡
    gT转到p上一个标签
    2gt转到标签编号 2
    -

    Vim 搜索和替换

    -

    搜索

    +

    Vim 搜索和替换

    +

    搜索

    @@ -1105,7 +1105,7 @@
    :--
    /foo向前搜索
    /foo\c向前搜索 (不区分大小写)
    ?foo向后搜索
    /\v\d+使用 regex 搜索
    n下一个匹配的搜索模式
    N上一场比赛
    *向前搜索当前单词
    #向后搜索当前单词
    -

    更换行

    +

    更换行

    :[range]s/{pattern}/{str}/[flags]
     

    @@ -1143,7 +1143,7 @@
    :--
    :s/old/new先更换
    :s/old/new/g全部替换
    :s/\vold/new/g全部替换为 regex
    :s/old/new/gc全部替换_(确认)_
    :s/old/new/i先忽略大小写替换
    :2,6s/old/new/g2-6 行之间替换
    -

    替换文件

    +

    替换文件

    :%s/{pattern}/{str}/[flags]
     

    @@ -1177,7 +1177,7 @@
    :--
    :%s/old/new先更换
    :%s/old/new/g全部替换
    :%s/old/new/gc全部替换 (确认)
    :%s/old/new/gi全部替换 (忽略大小写)
    :%s/\vold/new/g全部替换为 regex
    -

    范围

    +

    范围

    @@ -1225,7 +1225,7 @@
    :--
    %整个文件
    ’<,’>当前选择
    55
    5,105 行到第 10
    $最后一行
    2,$2 行到最后
    .当前行
    ,3接下来的 3
    -3,转发 3
    -

    全局命令

    +

    全局命令

    :[range]g/{pattern}/[command]
     
    @@ -1268,7 +1268,7 @@
    :--
    :g/foo/d删除包含 foo 的行
    :g!/foo/d删除不包含 foo 的行
    :g/^\s*$/d删除所有空行
    :g/foo/t$将包含 foo 的行复制到 EOF
    :g/foo/m$将包含 foo 的行移动到 EOF
    :g/^/m0反转文件
    :g/^/t.复制每一行
    -

    Inverse(逆) :g

    +

    Inverse(逆) :g

    :[range]v/{pattern}/[command]
     

    @@ -1286,7 +1286,7 @@
    :--
    :v/foo/d删除不包含foo的行
    (还有:g!/foo/d)
    -

    Flags(标志)

    +

    Flags(标志)

    @@ -1313,7 +1313,7 @@
    :--
    g替换所有出现
    i忽略大小写
    I不要忽略大小写
    c确认每个替换
    -

    替换表达式(魔术)

    +

    替换表达式(魔术)

    @@ -1356,7 +1356,7 @@
    :--
    & | \0替换为整个匹配的
    \1...\9替换为 0-9 组
    \u大写下一个字母
    \U后面的大写字符
    \l小写下一个字母
    \L后面的字符小写
    \e\u\U\l\L 的结尾
    \E\u\U\l\L 的结尾
    -

    例子

    +

    例子

    :s/a\|b/xxx\0xxx/g               # 将 "a b"      修改为 "xxxaxxx xxxbxxx"
     :s/test/\U& file/                # 将 "test"     修改为 "TEST FILE"
    @@ -1375,13 +1375,13 @@
     :v/./,/./-j                      # 将空行压缩成空行
     :g/<p1>/,/<p2>/d                 # 从 <p1> 到 <p2> 包含删除
     
    -

    Vimdiff

    -

    用法

    +

    Vimdiff

    +

    用法

    $ vimdiff file1 file2 [file3]
     $ vim -d file1 file2 [file3]
     
    -

    编辑

    +

    编辑

    :[range]diffget [bufspec]
     :[range]diffput [bufspec]
    @@ -1423,7 +1423,7 @@
     
    快捷方式说明
    do / :diffget获取(get)差异
    dp / :diffput放差价
    :dif重新扫描差异
    :diffo关闭差异模式
    :1,$+1diffget获取所有差异
    ZQ不做改动就退出

    请参阅:范围

    -

    折叠

    +

    折叠

    @@ -1472,7 +1472,7 @@
    快捷方式说明
    zo / zO打开
    zc / zC
    za / zA切换
    zv这条线的打开折叠
    zM关闭所有
    zR打开所有
    zm折叠更多 (折叠级别 += 1)
    zr少折叠 (折叠级别 -= 1)
    zx更新折叠
    -

    跳跃

    +

    跳跃

    @@ -1492,8 +1492,8 @@
    快捷方式说明
    ]c下一个区别
    [c以前的区别
    -

    各种各样的

    -

    Case

    +

    各种各样的

    +

    Case

    @@ -1554,7 +1554,7 @@
    快捷方式说明
    vU大写 字母
    vu小写 字符
    ~切换案例 字符
    viw U大写
    viw u小写
    viw ~切换案例
    VU / gUU大写
    Vu / guu小写
    V~ / g~~切换案例 线
    gggUG大写 所有文本
    ggguG小写 所有文本
    ggg~G切换大小写 所有文本
    -

    跳跃

    +

    跳跃

    @@ -1582,7 +1582,7 @@
    快捷方式说明
    <C-o>返回上一个
    <C-i>向前
    gf转到光标中的文件
    ga显示十六进制、ASCII值
    -

    其他命令行

    +

    其他命令行

    @@ -1630,7 +1630,7 @@
    :--
    :h帮助打开帮助视图
    :edit!重新加载当前文件
    :2,8m0将行 2-8 移动到 0
    :noh清除搜索亮点
    :sort排序行
    :ter打开终端窗口
    :set paste启用插入粘贴子模式
    :set nopaste禁用插入粘贴子模式
    :cq退出并出现错误
    (正在中止 Git)
    -

    导航

    +

    导航

    @@ -1662,7 +1662,7 @@
    快捷方式说明
    %最近/匹配的{[()]}
    [( | [{上一个 ({
    ]) | ]{下一个)}
    [m上一个方法开始
    [M上一个方法结束
    -

    计数器

    +

    计数器

    @@ -1682,7 +1682,7 @@
    快捷方式说明
    <C-a>增加数量
    <C-x>减少数量
    -

    选项卡

    +

    选项卡

    @@ -1723,7 +1723,7 @@
    快捷方式说明
    :tag Classname跳转到 Classname 的第一个定义
    <C-]>跳转到定义
    g]查看所有定义
    <C-t>回到最后一个标签
    <C-o> <C-i>后退前进
    :tselect Classname查找类名的定义
    :tjump Classname查找类名的定义 (自动选择第一个)
    -

    格式化

    +

    格式化

    @@ -1747,7 +1747,7 @@
    :--
    :ce 88 列之间的中心线
    :ri 44 列右对齐行
    :le左对齐线

    查看 :help formatting

    -

    标记

    +

    标记

    @@ -1844,7 +1844,7 @@
    快捷方式说明
    `^插入模式下光标的最后位置
    `.当前缓冲区的最后更改
    `"最后退出的当前缓冲区
    `0在上次编辑的文件中
    ''返回当前缓冲区中跳出的行
    ``返回当前缓冲区中跳转的位置
    `[到先前更改或拉出的文本的开头
    `]到之前更改或拉出的文本的结尾
    `<到最后一个可视化选择的开始
    `>到最后一个可视化选择的结尾
    ma将此光标位置标记为a
    `a跳转到光标位置a
    'a跳转到位置为 a 的行首
    d'a从当前行删除到标记 a 的行
    d`a从当前位置删除到标记 a 的位置
    c'a将文本从当前行更改为 a
    y`a将文本从当前位置拉到 a 的位置
    :marks列出所有当前标记
    :delm a删除标记a
    :delm a-d删除标记abcd
    :delm abc删除标记abc
    -

    计算器

    +

    计算器

    @@ -1865,7 +1865,7 @@
    快捷方式说明
    <C-r> = 7*7显示结果
    <C-r> = 10/2显示结果

    在 INSERT 模式下执行此操作

    -

    Shell

    +

    Shell

    @@ -1892,7 +1892,7 @@
    :--
    :!<shell>解释 Shell 命令
    :r!<shell>读入shell的输出
    :r!date插入日期
    :!!date用日期替换当前行
    -

    命令行

    +

    命令行

    @@ -1916,7 +1916,7 @@
    快捷方式说明
    <C-r><C-w>将当前单词插入命令行
    <C-r>"注册 粘贴
    <C-x><C-f>在插入模式下自动完成路径
    -

    技巧

    +

    技巧

    删除重复行

    :sort | %!uniq -u
     
    @@ -1928,8 +1928,8 @@ :%w !xclip -i -sel c # GNU/Linux :%w !xsel -i -b # GNU/Linux
    -

    理解 Vim

    -

    动词理解

    +

    理解 Vim

    +

    动词理解

    d  # 表示删除delete
     r  # 表示替换replace
     c  # 表示修改change
    @@ -1937,21 +1937,21 @@
     v  # 表示选取visual select
     

    动词代表了我们打算对文本进行什么样的操作

    -

    名词理解

    +

    名词理解

    w  # 表示一个单词word
     s  # 表示一个句子sentence
     p  # 表示一个段落paragraph
     t  # 表示一个 HTML 标签tag
     

    名词代表了我们即将处理的文本。引号或者各种括号所包含的文本称作一个文本块。

    -

    介词理解

    +

    介词理解

    i  # 表示在...之内 inside
     a  # 表示环绕... around
     t  # 表示到...位置前 to
     f  # 表示到...位置上 forward
     

    介词界定了待编辑文本的范围或者位置。

    -

    数词理解

    +

    数词理解

    数词指定了待编辑文本对象的数量,从这个角度而言,数词也可以看作是一种介词。引入数词之后,文本编辑命令的语法就升级成了下面这样:

    动词 介词/数词 名词
    @@ -1967,7 +1967,7 @@
     
    2dw # 两次删除单词(等价于删除两个单词): twice delete word
     3x  # 三次删除字符(等价于删除三个字符): three times delete character
     
    -

    组词为句理解

    +

    组词为句理解

    有了这些基本的语言元素,我们就可以着手构造一些简单的命令了。文本编辑命令的基本语法如下:

    动词 介词 名词
     
    @@ -1980,7 +1980,7 @@ dfx # 删除文本直到字符“x”(包括字符“x”): delete forward x
    -

    另见

    +

    另见

    • 搞得像IDE一样的 Vim (github.io)
    • Vim 官方网站 (vim.org)
    • @@ -2002,8 +2002,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -2014,7 +2012,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/vscode.html b/docs/vscode.html index aa71c209..92e9a787 100644 --- a/docs/vscode.html +++ b/docs/vscode.html @@ -34,7 +34,7 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    @@ -42,8 +42,8 @@

    这个 VSCode (Visual Studio Code) 快速参考备忘单显示了它的键盘快捷键和命令。

    Windows

    -

    Windows

    +

    一般的

    @@ -79,7 +79,7 @@
    --
    Ctrl Shift P / F1显示命令面板
    Ctrl P快速打开,转到文件
    Ctrl Shift N新窗户
    Ctrl Shift W关闭窗口
    Ctrl ,用户设置
    Ctrl K Ctrl S键盘快捷键
    -

    基本编辑

    +

    基本编辑

    @@ -192,7 +192,7 @@
    --
    Ctrl X剪切行
    Ctrl C复制行
    Alt / 向上/向下移动行
    Shift Alt / 向上/向下复制行
    Ctrl Shift K删除行
    Ctrl Enter在下面插入行
    Ctrl Shift Enter在上面插入行
    Ctrl Shift \跳转到匹配的括号
    Ctrl ] / [缩进/突出行
    Home / End转到行首/行尾
    Ctrl Home转到文件开头
    Ctrl End转到文件末尾
    Ctrl / 向上/向下滚动行
    Alt PgUp / PgDn向上/向下滚动页面
    Ctrl Shift [折叠(折叠)区域
    Ctrl Shift ]展开(展开)区域
    Ctrl K Ctrl [折叠(折叠)所有子区域
    Ctrl K Ctrl ]展开(展开)所有子区域
    Ctrl K Ctrl 0折叠(折叠)所有区域
    Ctrl K Ctrl J展开(展开)所有区域
    Ctrl K Ctrl C添加行注释
    Ctrl K Ctrl U删除行注释
    Ctrl /切换行注释
    Shift Alt A切换块评论
    Alt Z切换自动换行
    -

    导航

    +

    导航

    @@ -244,7 +244,7 @@
    --
    Ctrl T显示所有符号
    Ctrl G去线
    Ctrl P转到文件
    Ctrl Shift O转到符号
    Ctrl Shift M显示问题面板
    F8转到下一个错误
    Shift F8转到上一个错误
    Ctrl Shift Tab浏览编辑组历史
    Alt / 后退/前进
    Ctrl M切换 Tab 移动焦点
    -

    搜索和替换

    +

    搜索和替换

    @@ -284,7 +284,7 @@
    --
    Ctrl F寻找
    Ctrl H代替
    F3 / Shift F3查找下一个/上一个
    Alt Enter选择所有出现的查找匹配项
    Ctrl D将选择添加到下一个查找匹配项
    Ctrl K Ctrl D将最后一个选择移动到下一个查找匹配项
    Alt C / R / W切换区分大小写/正则表达式/整个单词
    -

    多光标和选择

    +

    多光标和选择

    @@ -344,7 +344,7 @@
    --
    Alt Click插入光标
    Ctrl Alt / 在上方/下方插入光标
    Ctrl U撤消上一次光标操作
    Shift Alt I在选定的每一行的末尾插入光标
    Ctrl I选择当前行
    Ctrl Shift L选择当前选择的所有匹配项
    Ctrl F2选择当前单词的所有出现
    Shift Alt 展开选择
    Shift Alt 收缩选择
    Shift Alt <Drag>列(框)选择
    Ctrl Shift Alt <Arrow>列(框)选择
    Ctrl Shift Alt PgUp / PgDn列(框)选择页上/下
    -

    丰富的语言编辑

    +

    丰富的语言编辑

    @@ -404,7 +404,7 @@
    --
    Ctrl <Space> Ctrl I触发建议
    Ctrl Shift <Space>触发参数提示
    Shift Alt F格式化文档
    Ctrl K Ctrl F格式选择
    F12转到定义
    Alt F12窥视定义
    Ctrl K F12打开定义到一边
    Ctrl .快速解决
    Shift F12显示参考
    F2重命名符号
    Ctrl K Ctrl X修剪尾随空格
    Ctrl K M更改文件语言
    -

    编辑管理

    +

    编辑管理

    @@ -444,7 +444,7 @@
    --
    Ctrl F4 Ctrl W关闭编辑器
    Ctrl K F关闭文件夹
    Ctrl \拆分编辑器
    Ctrl 1 / 2 / 3专注于第一、第二或第三编辑组
    Ctrl K Ctrl / 专注于上一个/下一个编辑组
    Ctrl Shift PgUp / PgDn向左/向右移动编辑器
    Ctrl K / 移动活动编辑器组
    -

    文件管理

    +

    文件管理

    @@ -512,7 +512,7 @@
    --
    Ctrl N新建文件
    Ctrl O打开文件
    Ctrl S保存
    Ctrl Shift S另存为
    Ctrl K S保存所有
    Ctrl F4关闭
    Ctrl K Ctrl W关闭松油
    Ctrl Shift T重新打开关闭的编辑器
    Ctrl K Enter保持预览模式编辑器打开
    Ctrl TabOpen next
    Ctrl Shift TabOpen previous
    Ctrl K P复制活动文件的路径
    Ctrl K R在资源管理器中显示活动文件
    Ctrl K O在新窗口/实例中显示活动文件
    -

    展示

    +

    展示

    @@ -584,7 +584,7 @@
    --
    F11切换全屏
    Shift Alt 0切换编辑器布局(水平/垂直)
    Ctrl = / -放大/缩小
    Ctrl B切换侧边栏可见性
    Ctrl Shift E显示资源管理器/切换焦点
    Ctrl Shift F显示搜索
    Ctrl Shift G显示源代码管理
    Ctrl Shift D显示调试
    Ctrl Shift X显示扩展
    Ctrl Shift H在文件中替换
    Ctrl Shift J切换搜索详细信息
    Ctrl Shift U显示输出面板
    Ctrl Shift V打开 Markdown 预览
    Ctrl K V打开 Markdown 预览到一边
    Ctrl K ZZen 模式(Esc Esc 退出)
    -

    调试

    +

    调试

    @@ -661,8 +661,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -673,7 +671,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/vue.html b/docs/vue.html index 13f74d51..9d91aa4d 100644 --- a/docs/vue.html +++ b/docs/vue.html @@ -34,7 +34,7 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    @@ -42,8 +42,8 @@

    渐进式 JavaScript 框架 Vue 3 备忘清单的快速参考列表,包含常用 API 和示例。

    入门

    -

    入门

    +

    介绍

    Vue 是一套用于构建用户界面的渐进式框架

    注意:Vue 3.x 版本对应 Vue Router 4.x 路由版本

    -

    创建应用

    +

    创建应用

    已安装 16.0 或更高版本的 Node.js

    $ npm init vue@latest
    @@ -80,7 +80,7 @@
     
    $ npm run build
     

    此命令会在 ./dist 文件夹中为你的应用创建一个生产环境的构建版本

    -

    应用实例

    +

    应用实例

    import { createApp } from 'vue'
     
    @@ -98,7 +98,7 @@
       </button>
     </div>
     
    -

    通过 CDN 使用 Vue

    +

    通过 CDN 使用 Vue

    <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
     <div id="app">{{ message }}</div>
     <script>
    @@ -113,7 +113,7 @@
     </script>
     
    -

    使用 ES 模块构建版本

    +

    使用 ES 模块构建版本

    <div id="app">{{ message }}</div>
     <script type="module">
       import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'
    @@ -127,30 +127,30 @@
     </script>
     
    -

    模板语法

    -

    文本插值

    +

    模板语法

    +

    文本插值

    <span>Message: {{ msg }}</span>
     

    使用的是 Mustache 语法 (即双大括号),每次 msg 属性更改时它也会同步更新

    -

    原始 HTML

    +

    原始 HTML

    <p>Using text interpolation: {{ rawHtml }}</p>
     <p>Using v-html directive: <span v-html="rawHtml"></span></p>
     

    双大括号{{}}会将数据解释为纯文本,使用 v-html 指令,将插入 HTML

    -

    Attribute 绑定

    +

    Attribute 绑定

    <div v-bind:id="dynamicId"></div>
     

    简写

    <div :id="dynamicId"></div>
     
    -

    布尔型 Attribute

    +

    布尔型 Attribute

    <button :disabled="isButtonDisabled">
       Button
     </button>
     
    -

    动态绑定多个值

    +

    动态绑定多个值

    data() {
       return {
    @@ -164,55 +164,55 @@
     

    通过不带参数的 v-bind,你可以将它们绑定到单个元素上

    <div v-bind="objectOfAttrs"></div>
     
    -

    使用 JavaScript 表达式

    +

    使用 JavaScript 表达式

    {{ number + 1 }}
     {{ ok ? 'YES' : 'NO' }}
     {{ message.split('').reverse().join('') }}
     
     <div :id="`list-${id}`"></div>
     
    -

    仅支持表达式(例子都是无效)

    +

    仅支持表达式(例子都是无效)

    <!-- 这是一个语句,而非表达式 -->
     {{ var a = 1 }}
     <!-- 条件控制也不支持,请使用三元表达式 -->
     {{ if (ok) { return message } }}
     
    -

    调用函数

    +

    调用函数

    <span :title="toTitleDate(date)">
       {{ formatDate(date) }}
     </span>
     
    -

    指令 Directives

    +

    指令 Directives

    <p v-if="seen">Now you see me</p>
     
    -

    参数 Arguments

    +

    参数 Arguments

    <a v-bind:href="url"> ... </a>
     <!-- 简写 -->
     <a :href="url"> ... </a>
     
    -

    绑定事件

    +

    绑定事件

    <a v-on:click="doSomething"> ... </a>
     <!-- 简写 -->
     <a @click="doSomething"> ... </a>
     
    -

    动态参数

    +

    动态参数

    <a v-bind:[attributeName]="url"> ... </a>
     <!-- 简写 -->
     <a :[attributeName]="url"> ... </a>
     

    这里的 attributeName 会作为一个 JS 表达式被动态执行

    -

    动态的事件名称

    +

    动态的事件名称

    <a v-on:[eventName]="doSomething"> ... </a>
     <!-- 简写 -->
     <a @[eventName]="doSomething">
     
    -

    修饰符 Modifiers

    +

    修饰符 Modifiers

    <form @submit.prevent="onSubmit">
       ...
     </form>
     

    .prevent 修饰符会告知 v-on 指令对触发的事件调用 event.preventDefault()

    -

    指令语法

    +

    指令语法

    v-on:submit.prevent="onSubmit"
     ──┬─ ─┬──── ─┬─────  ─┬──────
       ┆   ┆      ┆        ╰─ Value 解释为JS表达式
    @@ -233,8 +233,6 @@ function anchorPoint() {
       Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active'))
       if (elm?.tagName === 'H3') {
         elm?.parentElement?.parentElement?.classList.add('active');
    -    const box = elm?.parentElement?.parentElement;
    -    console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap'))
       }
     }
     anchorPoint();
    @@ -245,7 +243,6 @@ function updateAnchor(element) {
         tocanchor.classList.remove('is-active-link');
       });
       const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`);
    -  console.log('anchor', anchor)
       if (anchor) {
         anchor.classList.add('is-active-link');
       }
    diff --git a/docs/vue2.html b/docs/vue2.html
    index 047f386b..093ebb7b 100644
    --- a/docs/vue2.html
    +++ b/docs/vue2.html
    @@ -34,7 +34,7 @@
         document.documentElement.setAttribute('data-color-mode', mode);
         localStorage.setItem(LOCAL_NANE, mode);
       }
    -

    +

    @@ -42,8 +42,8 @@

    渐进式 JavaScript 框架 Vue 2 备忘清单的快速参考列表,包含常用 API 和示例。

    入门

    -

    介绍

    +

    入门

    +

    介绍

    Vue 是一套用于构建用户界面的渐进式框架

    注意:Vue 2.x 版本对应 Vue Router 3.x 路由版本

    -

    快速创建 Vue 项目 (Vue CLI)

    +

    快速创建 Vue 项目 (Vue CLI)

    npx @vue/cli create hello-world
     
    -

    声明式渲染

    +

    声明式渲染

    <div id="app">
       {{ message }}
     </div>
    @@ -67,7 +67,7 @@
       }
     })
     
    -

    基础例子

    +

    基础例子

    <div id="example">
       <p>原始信息: "{{ message }}"</p>
    @@ -96,7 +96,7 @@
     
    原始信息:  "Hello"
     计算的反向信息:  "olleH"
     
    -

    绑定元素属性

    +

    绑定元素属性

    <div id="app-2">
       <span v-bind:title="message">
         鼠标悬停几秒钟查看此处动态绑定的提示信息!
    @@ -112,7 +112,7 @@
       }
     })
     
    -

    条件

    +

    条件

    <div id="app-3">
       <p v-if="seen">现在你看到我了</p>
     </div>
    @@ -126,7 +126,7 @@
     })
     

    控制切换一个元素是否显示

    -

    循环

    +

    循环

    <div id="app-4">
       <ol>
         <li v-for="todo in todos">
    @@ -147,7 +147,7 @@
       }
     })
     
    -

    点击事件处理

    +

    点击事件处理

    <div id="app-5">
       <p>{{ message }}</p>
       <button v-on:click="reverseMessage">
    @@ -169,7 +169,7 @@
       }
     })
     
    -

    输入事件处理

    +

    输入事件处理

    <div id="app-6">
       <p>{{ message }}</p>
       <input v-model="message">
    @@ -183,15 +183,15 @@
       }
     })
     
    -

    模板语法

    -

    文本

    +

    模板语法

    +

    文本

    <span>Message: {{ msg }}</span>
     <span v-once>
       这个将不会改变: {{ msg }}
     </span>
     

    使用 v-once 指令,执行一次性地插值,当数据改变时,插值处的内容不会更新

    -

    原始 HTML

    +

    原始 HTML

    <p>解释为普通文本: {{ rawHtml }}</p>
     <p>
       使用 v-html 指令: 
    @@ -199,14 +199,14 @@
     </p>
     

    使用 v-html 指令,输出真正的 HTML

    -

    属性

    +

    属性

    <div v-bind:id="dynamicId"></div>
     <button v-bind:disabled="isDisabled">
       Button
     </button>
     

    如果 isDisabled 的值是 null/undefined/false 则 disabled 不会被渲染出来

    -

    JavaScript 表达式

    +

    JavaScript 表达式

    <div id="app">
       <span>消息: {{ msg }}</span>
       <span>{{ msg + '这是字符串' }}</span>
    @@ -215,30 +215,30 @@
       <div v-bind:id="'list-' + id"></div>
     <div>
     
    -

    指令

    +

    指令

    <p v-if="seen">
       现在你看到我了
     </p>
     

    v-if 指令将根据表达式 seen 的值的真假来插入/移除 <p> 元素

    -

    指令参数

    +

    指令参数

    <a v-bind:href="url">...</a>
     

    v-bind 指令将该元素 href 属性与表达式 url 的值绑定

    <a v-on:click="doSomething">...</a>
     

    v-on 指令,用于监听 DOM 事件,oSomething 是事件名

    -

    指令动态参数 v2.6

    +

    指令动态参数 v2.6

    <a v-on:[eventName]="doSomething">...</a>
     

    eventName 的值为 focus 时,v-on:[eventName] 将等价于 v-on:focus

    -

    指令修饰符

    +

    指令修饰符

    <form v-on:submit.prevent="onSubmit">
       ...
     </form>
     

    .prevent 修饰符告诉 v-on 指令对于触发的事件调用 event.preventDefault()

    -

    指令缩写

    +

    指令缩写

    <!-- 完整语法 -->
     <a v-bind:href="url">...</a>
     <!-- 缩写 -->
    @@ -246,14 +246,14 @@
     <!-- 动态参数的缩写 (2.6.0+) -->
     <a :[key]="url"> ... </a>
     
    -

    Class 与 Style 绑定

    -

    对象语法

    +

    Class 与 Style 绑定

    +

    对象语法

    <div v-bind:class="{ active: isActive }">
     
     </div>
     

    传给 v-bind:class 一个对象,以动态地切换 class

    -

    与普通的 class 属性共存

    +

    与普通的 class 属性共存

    <div
       class="static"
    @@ -272,7 +272,7 @@
     

    结果渲染为

    <div class="static active"></div>
     
    -

    绑定的数据对象不必内联定义在模板里

    +

    绑定的数据对象不必内联定义在模板里

    <div v-bind:class="classObject"></div>
     
    @@ -287,18 +287,18 @@

    结果渲染为

    <div class="static active"></div>
     
    -

    三元表达式

    +

    三元表达式

    <div v-bind:class="[
       isActive ? activeClass : ''
     ]">
     </div>
     
    -

    数组

    +

    数组

    <div v-bind:class="[
       { active: isActive }, errorClass
     ]"></div>
     
    -

    数组语法

    +

    数组语法

    <div v-bind:class="[
       activeClass, errorClass
     ]">
    @@ -313,7 +313,7 @@
     

    结果渲染为

    <div class="active text-danger"></div>
     
    -

    内联样式

    +

    内联样式

    <div v-bind:style="{
         color: activeColor,
         fontSize: fontSize + 'px'
    @@ -328,7 +328,7 @@
     

    结果渲染为

    <div style="color: red; font-size: 30px;"></div>
     
    -

    内联样式对象通常更好

    +

    内联样式对象通常更好

    <div v-bind:style="styleObject"></div>
     

    如下 data

    @@ -340,22 +340,22 @@ }

    同样的,对象语法常常结合返回对象的计算属性使用

    -

    内联样式数组语法

    +

    内联样式数组语法

    <div v-bind:style="[
       baseStyles, overridingStyles
     ]"></div>
     
    -

    内联样式多重值

    +

    内联样式多重值

    <div :style="{
       display: ['-webkit-box', 'flex']
     }"></div>
     
    -

    条件渲染

    -

    v-if

    +

    条件渲染

    +

    v-if

    <h1 v-if="awesome">Vue is awesome!</h1>
     <h1 v-else>Oh no 😢</h1>
     
    -

    v-else-if

    +

    v-else-if

    <div v-if="type === 'A'">A</div>
     <div v-else-if="type === 'B'">B</div>
    @@ -365,7 +365,7 @@
     </div>
     

    @2.1.0 新增,必须紧跟在带 v-if 或者 v-else-if 的元素之后

    -

    v-else

    +

    v-else

    <div v-if="Math.random() > 0.5">
       现在你看到我了
    @@ -375,12 +375,12 @@
     </div>
     

    v-else 元素必须紧跟在带 v-if 或者 v-else-if 的元素的后面

    -

    <template> 上使用 v-if 条件渲染分组

    +

    <template> 上使用 v-if 条件渲染分组

    <template v-if="ok">
       <p>Paragraph 1</p>
     </template>
     
    -

    用 key 管理可复用的元素

    +

    用 key 管理可复用的元素

    <template v-if="loginType === 'username'">
       <label>Username</label>
    @@ -391,14 +391,14 @@
       <input placeholder="输入邮箱" key="email-input">
     </template>
     
    -

    v-show

    +

    v-show

    <h1 v-show="ok">
       Hello!
     </h1>
     

    带有 v-show 的元素始终会被渲染并保留在 DOM 中,只是简单地切换元素的 CSS 属性 display

    -

    列表渲染

    -

    v-for

    +

    列表渲染

    +

    v-for

    <ul id="example-1">
       <li
         v-for="item in items"
    @@ -417,7 +417,7 @@
       }
     })
     
    -

    v-for 可选的第二个参数(索引)

    +

    v-for 可选的第二个参数(索引)

    <li v-for="(item, index) in items">
       {{ index }}
       {{ item.message }}
    @@ -434,7 +434,7 @@
     

    也可以用 of 替代 in 作为分隔符

    <div v-for="item of items"></div>
     
    -

    v-for 使用对象

    +

    v-for 使用对象

    <li v-for="value in object">
       {{ value }}
    @@ -464,7 +464,7 @@
       {{ index }}. {{ name }}: {{ value }}
     </div>
     
    -

    v-for/v-if

    +

    v-for/v-if

    <li
       v-for="todo in todos"
       v-if="!todo.isComplete"
    @@ -480,7 +480,7 @@
     </ul>
     <p v-else>No todos left!</p>
     
    -

    组件上使用 v-for

    +

    组件上使用 v-for

    <my-component
       v-for="(item, index) in items"
       v-bind:item="item"
    @@ -489,8 +489,8 @@
     ></my-component>
     

    2.2.0+ 的版本里,当在组件上使用 v-for 时,key 现在是必须的

    -

    事件处理

    -

    监听事件

    +

    事件处理

    +

    监听事件

    <div id="example-1">
       <button v-on:click="counter += 1">
         +1
    @@ -505,7 +505,7 @@
       }
     })
     
    -

    事件处理方法

    +

    事件处理方法

    <div id="example-2">
       <!-- `greet` 是在下面定义的方法名 -->
    @@ -535,7 +535,7 @@
     

    也可以用 JavaScript 直接调用方法

    example2.greet() // => 'Hello Vue.js!'
     
    -

    内联处理器中的方法

    +

    内联处理器中的方法

    <div id="example-3">
       <button v-on:click="say('hi')">
    @@ -570,7 +570,7 @@
       }
     }
     
    -

    事件修饰符

    +

    事件修饰符

    <!-- 阻止单击事件继续传播 -->
     <a v-on:click.stop="doThis"></a>
     <!-- 提交事件不再重载页面 -->
    @@ -589,7 +589,7 @@
     <!-- 点击事件将只会触发一次 -->
     <a v-on:click.once="doThis"></a>
     
    -

    事件修饰符 passive

    +

    事件修饰符 passive

    <!-- 滚动事件的默认行为(即滚动行为)会立即触发 -->
     <!-- 而不会等待 `onScroll` 完成  -->
     <!-- 包含 event.preventDefault() 的情况 -->
    @@ -598,7 +598,7 @@
     </p>
     

    这个 .passive 修饰符尤其能够提升移动端的性能。

    -

    按键修饰符

    +

    按键修饰符

    <!-- 在 key 是 Enter 时调用 vm.submit() -->
     <input v-on:keyup.enter="submit">
     <!-- 在 key 是 PageDown 时被调用 -->
    @@ -608,7 +608,7 @@
     <!-- Ctrl + Click -->
     <div v-on:click.ctrl="doSomething">
     
    -

    .exact 修饰符

    +

    .exact 修饰符

    <!-- 即使 Alt 或 Shift 被一同按下时也会触发 -->
     <button v-on:click.ctrl="onClick">
     <!-- 有且只有 Ctrl 被按下的时候才触发 -->
    @@ -616,8 +616,8 @@
     <!-- 没有任何系统修饰符被按下的时候才触发 -->
     <button v-on:click.exact="onClick">
     
    -

    计算属性和侦听器

    -

    基础例子

    +

    计算属性和侦听器

    +

    基础例子

    <div id="example">
       <p>Original message: "{{ message }}"</p>
       <p>
    @@ -640,7 +640,7 @@
       }
     })
     
    -

    计算属性缓存 vs 方法

    +

    计算属性缓存 vs 方法

    <p>
       计算的反向消息:"{{ reversedMessage() }}"
     </p>
    @@ -654,7 +654,7 @@
     }
     

    两种方式的最终结果确实是完全相同的。然而,不同的是计算属性是基于它们的响应式依赖进行缓存的

    -

    计算属性 vs 侦听属性

    +

    计算属性 vs 侦听属性

    <div id="demo">{{ fullName }}</div>
     
    @@ -692,7 +692,7 @@ } })
    -

    计算属性的 setter

    +

    计算属性的 setter

    computed: {
       fullName: {
    @@ -707,19 +707,19 @@
       }
     }
     
    -

    表单输入绑定

    -

    文本

    +

    表单输入绑定

    +

    文本

    <input v-model="msg" placeholder="编辑我">
     <p>msg is: {{ msg }}</p>
     
    -

    多行文本

    +

    多行文本

    <span>Multiline message is:</span>
     <textarea
       v-model="message"
       placeholder="添加多行"></textarea>
     <p>{{ message }}</p>
     
    -

    复选框

    +

    复选框

    <input
       type="checkbox"
       id="checkbox"
    @@ -727,7 +727,7 @@
     >
     <label for="checkbox">{{ checked}}</label>
     
    -

    多个复选框

    +

    多个复选框

    <input type="checkbox" id="jack" value="Jack" v-model="checkedNames">
     <label for="jack">Jack</label>
    @@ -746,7 +746,7 @@
       }
     })
     
    -

    单选按钮

    +

    单选按钮

    <div id="example-4">
       <input type="radio" id="one" value="One"
         v-model="picked">
    @@ -766,7 +766,7 @@
       }
     })
     
    -

    选择框

    +

    选择框

    <select v-model="selected">
       <option disabled value="">请选择</option>
       <option>A</option>
    @@ -783,7 +783,7 @@
       }
     })
     
    -

    选择框(数组)

    +

    选择框(数组)

    <select v-model="selected" multiple>
       <option>A</option>
       <option>B</option>
    @@ -799,7 +799,7 @@
       }
     })
     
    -

    v-for 渲染的动态选项

    +

    v-for 渲染的动态选项

    <select v-model="selected">
       <option
    @@ -824,7 +824,7 @@
       }
     })
     
    -

    值绑定

    +

    值绑定

    <!-- 当选中时,pc 为字符串 "a" -->
     <input type="radio" v-model="pc" value="a">
     
    @@ -835,7 +835,7 @@
       <option value="abc">ABC</option>
     </select>
     
    -

    单选按钮

    +

    单选按钮

    <input
       type="radio"
       v-model="pick"
    @@ -844,7 +844,7 @@
     

    当选中时

    vm.pick === vm.a
     
    -

    复选框

    +

    复选框

    <input
       type="checkbox"
       v-model="toggle"
    @@ -858,7 +858,7 @@
     // 当没有选中时
     vm.toggle === 'no'
     
    -

    选择框的选项

    +

    选择框的选项

    <select v-model="selected">
       <!-- 内联对象字面量 -->
       <option v-bind:value="{ number: 123 }">
    @@ -870,7 +870,7 @@
     
    typeof vm.selected // => 'object'
     vm.selected.number // => 123
     
    -

    修饰符

    +

    修饰符

    <!-- lazy:在“change”时而非“input”时更新 -->
     <input v-model.lazy="msg">
     
    @@ -880,8 +880,8 @@
     <!-- trim:自动过滤用户输入的首尾空白字符 -->
     <input v-model.trim="msg">
     
    -

    组件基础

    -

    单文件组件

    +

    组件基础

    +

    单文件组件

    • HTML/CSS/JS 三部分存放到一个 Hello.vue 文件中 @@ -930,7 +930,7 @@
    -

    基本示例

    +

    基本示例

    Vue.component('button-counter', {
       data: function () {
    @@ -962,7 +962,7 @@
       <button-counter></button-counter>
     </div>
     
    -

    单个根元素

    +

    单个根元素

    Vue.component('blog-post', {
       props: ['post'],
       template: `
    @@ -981,7 +981,7 @@
     >
     </blog-post>
     
    -

    向子组件传递数据

    +

    向子组件传递数据

    Vue.component('blog-post', {
       props: ['title'],
       template: '<h3>{{ title }}</h3>'
    @@ -991,7 +991,7 @@
     
    <blog-post title="写博客"></blog-post>
     <blog-post title="如此有趣"></blog-post>
     
    -

    data 必须是一个函数

    +

    data 必须是一个函数

    data: function () {
       return {
         count: 0
    @@ -999,7 +999,7 @@
     }
     

    组件的 data 选项必须是一个函数

    -

    监听子组件事件

    +

    监听子组件事件

    Vue.component('blog-post', {
       props: ['post'],
    @@ -1047,7 +1047,7 @@
       }
     }
     
    -

    在组件上使用 v-model

    +

    在组件上使用 v-model

    自定义事件也可以用于创建支持 v-model 的自定义输入组件。

    <input v-model="searchText">
    @@ -1086,7 +1086,7 @@
     >
     </custom-input>
     
    -

    通过插槽分发内容

    +

    通过插槽分发内容

    <alert-box>
       发生了不好的事情。
     </alert-box>
    @@ -1101,7 +1101,7 @@
       `
     })
     
    -

    动态组件示例

    +

    动态组件示例

    <div id="dynamic-component-demo" class="demo">
       <button
    @@ -1139,7 +1139,7 @@
       });
     </script>
     
    -

    解析 DOM 模板时的注意事项

    +

    解析 DOM 模板时的注意事项

    有些 HTML 元素,诸如 <ul><ol><table><select>,对于哪些元素可以出现在其内部是有严格限制的。有些元素,诸如 <li><tr><option>,只能出现在其它某些特定的元素内部

    <table>
       <blog-post-row></blog-post-row>
    @@ -1154,8 +1154,8 @@
     
  • <script type="text/x-template">
  • -

    过渡 & 动画

    -

    单元素/组件的过渡

    +

    过渡 & 动画

    +

    单元素/组件的过渡

    <template>
       <button v-on:click="show = !show">
    @@ -1186,7 +1186,7 @@
       }
     </style>
     
    -

    CSS 过渡

    +

    CSS 过渡

    <template>
       <button @click="show = !show">
    @@ -1221,7 +1221,7 @@
       }
     </style>
     
    -

    CSS 动画

    +

    CSS 动画

    <template>
       <button @click="show = !show">切换展示</button>
    @@ -1258,7 +1258,7 @@
     }
     </style>
     
    -

    过渡的类名

    +

    过渡的类名

    @@ -1295,7 +1295,7 @@
    :-:-
    v-enter定义进入过渡的开始状态 #
    v-enter-active定义进入过渡生效时的状态 #
    v-enter-to (2.1.8)定义进入过渡的结束状态 #
    v-leave定义离开过渡的开始状态 #
    v-leave-active定义离开过渡生效时的状态 #
    v-leave-to (2.1.8)定义离开过渡的结束状态 #

    如果你使用了 <transition name="my-tran">,那么 v-enter 会替换为 my-tran-enter

    -

    自定义过渡的类名

    +

    自定义过渡的类名

    @@ -1339,7 +1339,7 @@ <p v-if="show">hello</p> </transition> -

    显性的过渡持续时间

    +

    显性的过渡持续时间

    <transition> 组件上的 duration prop 定制一个显性的过渡持续时间 (以毫秒计):

    <transition :duration="1000">
       ...
    @@ -1353,7 +1353,7 @@
       ...
     </transition>
     
    -

    初始渲染的过渡

    +

    初始渲染的过渡

    可以通过 appear attribute 设置节点在初始渲染的过渡

    <transition appear>
    @@ -1382,7 +1382,7 @@
     </transition>
     

    无论是 appear attribute 还是 v-on:appear 钩子都会生成初始渲染过渡

    -

    JavaScript 钩子

    +

    JavaScript 钩子

    <transition
       v-on:before-enter="beforeEnter"
       v-on:enter="enter"
    @@ -1398,7 +1398,7 @@
     </transition>
     

    钩子函数可以结合 CSS transitions/animations 使用,也可以单独使用

    -

    列表的进入/离开过渡

    +

    列表的进入/离开过渡

    <template>
       <button v-on:click="add">添加</button>
    @@ -1445,8 +1445,8 @@
       }
     </style>
     
    -

    Vue 2 API 参考

    -

    全局配置

    +

    Vue 2 API 参考

    +

    全局配置

    @@ -1494,7 +1494,7 @@
    :-:-
    silent取消所有的日志与警告 #
    optionMergeStrategies自定义合并策略的选项 #
    devtools是否允许 devtools 检查 #
    errorHandler未捕获错误的处理函数 (开发模式生效) #
    warnHandler (2.4.0)运行时警告处理函数 #
    ignoredElements忽略 Vue 之外的 (自定义元素) #
    keyCodesv-on 自定义键位别名 #
    performance (2.2.0)性能追踪 #
    productionTip (2.2.0)是否生成生产提示 #
    -

    全局 API

    +

    全局 API

    @@ -1554,7 +1554,7 @@
    :-:-
    Vue.extendVue 构造器,创建一个“子类” #
    Vue.nextTick执行延迟回调 #
    Vue.set向响应式对象中添加一个属性 #
    Vue.delete删除对象的 property #
    Vue.directive注册或获取全局指令 #
    Vue.filter注册或获取全局过滤器 #
    Vue.component注册或获取全局组件 #
    Vue.use安装 Vue.js 插件 #
    Vue.mixin全局注册一个混入 #
    Vue.compile将模板字符串编译成 render 函数 #
    Vue.observable (2.6.0)让一个对象可响应 #
    Vue.versionVue 安装版本号 #
    -

    数据

    +

    数据

    @@ -1589,7 +1589,7 @@
    :-:-
    data实例的数据对象 #
    props接收来自父组件的数据 #
    propsData创建实例时传递 props #
    computed计算属性将被混入到 Vue 实例中 #
    methods将被混入到 Vue 实例中 #
    watch对象键是观察的表达式,值是回调函数 #
    -

    DOM

    +

    DOM

    @@ -1616,7 +1616,7 @@
    :-:-
    el实例的挂载目标 #
    template字符串模板作为 Vue 实例的标识使用 #
    render字符串模板的代替方案 #
    renderError (2.2.0)render错误时提供另一种渲染 #
    -

    生命周期钩子

    +

    生命周期钩子

    @@ -1672,7 +1672,7 @@
    :-:-
    beforeCreate实例初始化之后 #
    created实例创建完成后被立即同步调用 #
    beforeMount在挂载开始之前被调用 #
    mounted实例被挂载后调用 #
    beforeUpdate数据改变后 DOM 更新之前调用 #
    updated数据更改更新完毕之后被调用 #
    activatedkeep-alive 缓存组件激活时调用 #
    deactivatedkeep-alive 缓存的组件失活时调用 #
    beforeDestroy实例销毁之前调用 #
    destroyed实例销毁后调用 #
    errorCaptured (2.5.0)来自后代组件的错误时被调用 #
    -

    资源

    +

    资源

    @@ -1695,7 +1695,7 @@
    :-:-
    directives包含 Vue 实例可用指令的哈希表 #
    filters包含 Vue 实例可用过滤器的哈希表 #
    components包含 Vue 实例可用组件的哈希表 #
    -

    组合

    +

    组合

    @@ -1722,7 +1722,7 @@
    :-:-
    parent指定已创建的实例之父实例 #
    mixins接收一个混入对象的数组 #
    extends声明扩展另一个组件 #
    provide/inject (2.2.0)祖组件向所有子孙后代注入依赖 #
    -

    其它

    +

    其它

    @@ -1757,7 +1757,7 @@
    :-:-
    name允许组件模板递归地调用自身 #
    delimiters改变纯文本插入分隔符 #
    functional使组件无状态和无实例 #
    model (2.2.0)使用 v-model 时定制 prop 和 event #
    inheritAttrs (2.4.0)#
    comments (2.4.0)是否保留模板中的HTML注释 #
    -

    实例方法 / 数据

    +

    实例方法 / 数据

    @@ -1780,7 +1780,7 @@
    :-:-
    vm.$watch观察 Vue 实例上的一个表达式
    或者一个函数计算结果的变化 #
    vm.$set全局 Vue.set 的别名 #
    vm.$delete全局 Vue.delete 的别名 #
    -

    实例 property

    +

    实例 property

    @@ -1844,7 +1844,7 @@
    :-:-
    vm.$data观察的数据对象 #
    vm.$props (2.2.0)组件接收的 props 对象 #
    vm.$el实例使用的根 DOM 元素 #
    vm.$options实例的初始化选项 #
    vm.$parent父实例 #
    vm.$root当前组件树的根实例 #
    vm.$children当前实例的直接子组件 #
    vm.$slots访问被插槽分发的内容 #
    vm.$scopedSlots (2.1.0)访问作用域插槽 #
    vm.$refsDOM 元素和组件实例 #
    vm.$isServer是否运行于服务器 #
    vm.$attrs (2.4.0)包含父作用域中不作为 prop 被识别的属性绑定 ( #
    vm.$listeners (2.4.0)包含了父作用域中的 (不含 .native 修饰器的) v-on 事件监听器 #
    -

    实例方法 / 事件

    +

    实例方法 / 事件

    @@ -1871,7 +1871,7 @@
    :-:-
    vm.$on监听当前实例上的自定义事件 #
    vm.$once监听一个自定义事件,只触发一次 #
    vm.$off移除自定义事件监听器 #
    vm.$emit触发当前实例上的事 #
    -

    实例方法 / 生命周期

    +

    实例方法 / 生命周期

    @@ -1898,7 +1898,7 @@
    :-:-
    vm.$mount手动地挂载一个未挂载的实例 #
    vm.$forceUpdate迫使 Vue 实例重新渲染 #
    vm.$nextTick回调延迟执行 #
    vm.$destroy完全销毁一个实例 #
    -

    指令

    +

    指令

    @@ -1966,7 +1966,7 @@
    :-:-
    v-text更新元素的 textContent #
    v-html更新元素的 innerHTML #
    v-show切换元素的 display css 属性 #
    v-if有条件地渲染元素 #
    v-else#
    v-else-if (2.1.0)#
    v-for多次渲染元素或模板块 #
    v-on绑定事件监听器 #
    v-bind动态地绑定一个或多个属性 #
    v-model创建双向绑定 #
    v-slot提供插槽或接收 prop 的插槽 #
    v-pre跳过元素和它的子元素编译过程 #
    v-cloak保持在元素上直到实例结束编译 #
    v-once只渲染元素和组件一次 #
    -

    特殊 attribute

    +

    特殊 attribute

    @@ -2001,7 +2001,7 @@
    :-:-
    key用在 Vue 的虚拟 DOM 算法 #
    ref元素或子组件注册引用信息 #
    is限制是否更新 #
    slot推荐 2.6.0 新增的 v-slot #
    slot-scope推荐 2.6.0 新增的 v-slot #
    scope2.5.0 新增的 slot-scope 取代 #
    -

    内置的组件

    +

    内置的组件

    @@ -2032,7 +2032,7 @@
    :-:-
    <component>渲染一个元组件为动态组件 #
    <transition>单个元素/组件的过渡效果 #
    <transition-group>多个元素/组件的过渡效果 #
    <keep-alive>不活动的实例缓存不销毁 #
    <slot>组件模板中的内容分发插槽 #
    -

    v-on (事件)修饰符

    +

    v-on (事件)修饰符

    @@ -2077,7 +2077,7 @@
    :-:-
    v-on:click.stop #调用 event.stopPropagation()。
    v-on:click.prevent #调用 event.preventDefault()。
    v-on:click.capture #添加事件侦听器时使用 capture 模式。
    v-on:click.self #只当事件是从侦听器绑定的元素本身触发时才触发回调。
    v-on:click.{keyCode|keyAlias} #只当事件是从特定键触发时才触发回调。
    v-on:click.native #监听组件根元素的原生事件。
    v-on:click.once #只触发一次回调。
    v-on:click.passive (2.3.0) #以 { passive: true } 模式添加侦听器
    -

    v-on (鼠标)修饰符

    +

    v-on (鼠标)修饰符

    @@ -2101,7 +2101,7 @@
    :-:-
    v-on:click.left #只当点击鼠标左键时触发
    v-on:click.right #只当点击鼠标右键时触发
    v-on:click.middle #只当点击鼠标中键时触发

    (2.2.0) 中新增

    -

    系统修饰键

    +

    系统修饰键

    @@ -2128,7 +2128,7 @@
    :-:-
    v-on:keyup.ctrl (2.1.0)#
    v-on:keyup.alt (2.1.0)#
    v-on:keyup.shift (2.1.0)#
    v-on:keyup.meta (2.1.0)#
    -

    Keyboard 按键修饰符

    +

    Keyboard 按键修饰符

    @@ -2175,7 +2175,7 @@
    :-:-
    v-on:keyup.enter#
    v-on:keyup.tab#
    v-on:keyup.delete 捕获“删除”和“退格”键 #
    v-on:keyup.esc#
    v-on:keyup.space#
    v-on:keyup.up#
    v-on:keyup.down#
    v-on:keyup.left#
    v-on:keyup.right#
    -

    v-bind 修饰符

    +

    v-bind 修饰符

    @@ -2199,7 +2199,7 @@
    :-:-
    v-bind.prop #作为一个 DOM property 绑定而不是作为 attribute 绑定。(差别在哪里?)
    v-bind.camel (2.1.0+) #将 kebab-case attribute 名转换为 camelCase。
    v-bind.sync (2.3.0+) #语法糖,会扩展成一个更新父组件绑定值的 v-on 侦听器。
    -

    另见

    +

    另见

    • Vue Essentials Cheat-Sheet.pdf (vuemastery.com)
    • Vue 2 官方文档 (vuejs.org)
    • @@ -2218,8 +2218,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -2230,7 +2228,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/webstorm.html b/docs/webstorm.html index 49ffe50c..6ea71ace 100644 --- a/docs/webstorm.html +++ b/docs/webstorm.html @@ -34,15 +34,15 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    WebStorm 备忘清单

    此快速参考备忘单列出了在 Windows/Linux 或 Mac 上运行的 WebStorm 的默认键盘快捷键

    Webstorm Windows & Linux 键盘映射

    -

    Webstorm Windows & Linux 键盘映射

    +

    编辑

    @@ -199,7 +199,7 @@
    快捷键说明
    Ctrl Space基本代码完成
    Alt Enter显示意图操作,快速修复
    Ctrl P参数信息
    Ctrl Q快速文档查找
    Ctrl mouse over简要信息
    Ctrl F1插入符号处的错误或警告
    Alt Insert生成代码...
    Ctrl Alt T环绕...
    Ctrl J插入实时模板
    Ctrl /用行注释/取消注释
    Ctrl Shift /用块评论/取消评论
    Ctrl W选择连续增加的代码块
    Ctrl Shift W将当前选择减少到以前的状态
    Alt+Q上下文信息
    Ctrl Alt L重新格式化代码
    Ctrl Alt I自动缩进行
    Tab缩进选定的行
    Shift Tab取消缩进选定的行
    Ctrl Shift V从最近的缓冲区粘贴...
    Ctrl D复制当前行或选定块
    Ctrl Y删除插入符号处的行
    Alt Shift Up向上移动队列
    Alt Shift Down下移线
    Ctrl Shift J连接线
    Ctrl Enter分割线
    Shift Enter开始新行
    Ctrl Shift U在插入符号或选定块中切换单词的大小写
    Ctrl Shift ]选择直到代码块结束
    Ctrl Shift [选择直到代码块开始
    Ctrl Delete删除到词尾
    Ctrl Backspace删除到单词开头
    Ctrl +展开代码块
    Ctrl -折叠代码块
    Ctrl Shift +展开全部
    Ctrl Shift -全部收缩
    Ctrl F4关闭活动编辑器选项卡
    -

    一般的

    +

    一般的

    @@ -247,7 +247,7 @@
    快捷键说明
    Double Shift到处搜索
    Ctrl Shift A寻找行动
    Alt 0...9打开相应的工具窗口
    Ctrl Shift F12切换最大化编辑器
    Alt Shift F添加到收藏夹
    Alt Shift I检查当前文件
    Ctrl `快速切换电流方案
    Ctrl Alt S打开设置对话框
    Ctrl Tab在工具和选项卡之间切换
    -

    导航

    +

    导航

    @@ -388,7 +388,7 @@
    快捷键说明
    Ctrl B | Ctrl + Click前往 declaration
    Ctrl N前往 class
    Ctrl Shift N转到文件
    Ctrl Alt Shift N转到符号
    Alt Right转到下一个编辑器选项卡
    Alt Left转到上一个编辑器选项卡
    F12返回上一个工具窗口
    Esc转到编辑器
    Ctrl G去行
    Ctrl E最近的文件弹出
    Ctrl Alt Right向前导航
    Ctrl Alt Left向后导航
    Ctrl Shift Backspace导航到最后一个编辑位置
    Alt F1在任何视图中选择当前文件或符号
    Ctrl Alt B转到实施
    Ctrl Shift I打开快速定义查找
    Ctrl Shift B转到类型声明
    Ctrl U转到超方法/超类
    Alt Up转到上一个方法
    Alt Down转到下一个方法
    Ctrl ] / [移动到代码块结束/开始
    Cltrl Shift M将插入符号移动到匹配的大括号
    Ctrl F12文件结构弹出
    Ctrl H类型层次结构
    Ctrl Alt H调用层次结构
    F2 / Shift F2下/上一个突出显示的错误
    F4 / Ctrl Enter跳转到源
    Alt Home跳转到导航栏
    F11切换书签
    Ctrl Shift F11使用助记符切换书签
    Ctrl 0...9转到编号的书签
    Shift F11显示书签
    -

    多个插入符号和选择

    +

    多个插入符号和选择

    @@ -420,7 +420,7 @@
    快捷键说明
    Alt Click添加或删除插入符号
    Shift Ctrl + Alt-J选择所有出现
    Alt J选择下一个出现
    Alt Shift J取消选择事件
    Esc取消选择所有出现或插入符号
    -

    调试

    +

    调试

    @@ -468,7 +468,7 @@
    快捷键说明
    F8跨过去
    F7踏入
    Shift F7智能步入
    Shift F8走出去
    Alt F9运行到光标
    Alt F8评估表达式
    F9简历计划
    Ctrl F8切换断点
    Ctrl Shift F8查看断点
    -

    运行

    +

    运行

    @@ -508,7 +508,7 @@
    快捷键说明
    Alt Shift F10选择配置并运行
    Alt Shift F9选择配置和调试
    Shift F10运行
    Shift F9调试
    Ctrl Shift F10从编辑器运行上下文配置
    Alt Shift R重新运行测试
    Alt F11运行 Gulp/Grunt/npm 任务
    -

    使用搜索

    +

    使用搜索

    @@ -536,7 +536,7 @@
    快捷键说明
    Alt F7查找用法
    Ctrl F7在文件中查找用法
    Ctrl Shift F7突出显示文件中的用法
    Ctrl Alt F7显示用法
    -

    VCS/本地历史

    +

    VCS/本地历史

    @@ -564,7 +564,7 @@
    快捷键说明
    Alt `VCS 快速弹出窗口
    Ctrl K将项目提交到 VCS
    Ctrl T从 VCS 更新项目
    Alt Shift C查看最近的更改
    -

    搜索/替换

    +

    搜索/替换

    @@ -600,7 +600,7 @@
    快捷键说明
    Ctrl F寻找
    F3找下一个
    Shift F3查找上一个
    Ctrl Shift F在路径中查找
    Ctrl R代替
    Ctrl Shift R在路径中替换
    -

    重构

    +

    重构

    @@ -665,8 +665,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -677,7 +675,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/xpath.html b/docs/xpath.html index 5d50f8f4..6ee058c9 100644 --- a/docs/xpath.html +++ b/docs/xpath.html @@ -34,7 +34,7 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    @@ -42,8 +42,8 @@

    这是一份 XPath 选择器备忘单,其中列出了常用的 XPath 定位方法和 CSS 选择器

    XPath 选择器

    -

    XPath 选择器

    +

    入门

    XPath 即为 XML 路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的计算机语言。

      @@ -60,7 +60,7 @@ $x('//h1')[0].innerText $x('//a[text()="XPath"]')[0].click() -

    后代选择器

    +

    后代选择器

    @@ -100,7 +100,7 @@
    XpathCSS
    //h1h1
    //div//pdiv p
    //ul/liul > li
    //ul/li/aul > li > a
    //div/*div > *
    /:root
    /html/body:root > body
    -

    有序选择器

    +

    有序选择器

    @@ -136,7 +136,7 @@
    XpathCSS
    //ul/li[1]ul > li:first-child
    //ul/li[2]ul > li:nth-child(2)
    //ul/li[last()]ul > li:last-child
    //li[@id="id"][1]li#id:first-child
    //a[1]a:first-child
    //a[last()]a:last-child
    -

    属性选择器

    +

    属性选择器

    @@ -185,7 +185,7 @@
    XpathCSS
    //*[@id="id"]#id
    //*[@class="class"].class
    //input[@type="submit"]input[type="submit"]
    //a[@id="abc"][@for="xyz"]a#abc[for="xyz"]
    //a[@rel]a[rel]
    //a[starts-with(@href, '/')]a[href^='/']
    //a[ends-with(@href, '.pdf')]a[href$='pdf']
    //a[contains(@href, '://')]a[href*='://']
    //a[contains(@rel, 'help')]a[rel~='help']
    -

    兄弟姐妹选择器

    +

    兄弟姐妹选择器

    @@ -209,7 +209,7 @@
    XpathCSS
    //h1/following-sibling::ulh1 ~ ul
    //h1/following-sibling::ul[1]h1 + ul
    //h1/following-sibling::[@id="id"]h1 ~ #id
    -

    最有用的路径表达式

    +

    最有用的路径表达式

    @@ -245,7 +245,7 @@
    XpathCSS
    nodename选择名称为 nodename 的所有节点
    /从根节点中选择
    //从当前节点中选择文档中与选择匹配的节点,无论它们在哪里
    .选择当前节点
    ..选择当前节点的父节点
    @选择属性
    -

    杂项选择器

    +

    杂项选择器

    @@ -290,7 +290,7 @@
    XpathCSS
    //h1[not(@id)]h1:not([id])
    //button[text()="Submit"]文字匹配
    //button[contains(text(),"Go")]文本包含(子字符串)
    //product[@price > 2.50]算术
    //ul[*]有孩子
    //ul[li]有孩子(具体)
    //a[@name or @href]或逻辑
    //a | //div联合(加入结果)
    -

    jQuery

    +

    jQuery

    @@ -319,7 +319,7 @@
    XpathCSS
    //ul/li/..$('ul > li').parent()
    //li/ancestor-or-self::section$('li').closest('section')
    //a/@href$('a').attr('href')
    //span/text()$('span').text()
    -

    运算符

    +

    运算符

    @@ -403,8 +403,8 @@
    运算符说明示例
    |计算两个节点集//book | //cd
    +添加6 + 4
    -减法6 - 4
    *乘法6 * 4
    div分配8 div 4
    =平等的price=9.80
    !=不相等price!=9.80
    <小于price<9.80
    <=小于或等于price<=9.80
    >大于price>9.80
    >=大于或等于price>=9.80
    or或者price=9.80 or price=9.70
    andprice>9.00 and price<9.90
    mod模数(除法余数)5 mod 2
    -

    XPath 表达式

    -

    步骤和轴

    +

    XPath 表达式

    +

    步骤和轴

    @@ -429,7 +429,7 @@
    ----
    //ul/a[@id='link']
    AxisStepAxisStep
    -

    前缀

    +

    前缀

    @@ -457,7 +457,7 @@
    前缀例子意思是
    ////hr[@class='edge']任何地方
    //html/body/div
    ././div/p相对的
    -

    Axes

    +

    Axes

    @@ -480,14 +480,14 @@
    Axis(轴)例子意思是
    ///ul/li/a孩子
    ////[@id="list"]//a后裔
    -

    XPath Predicates(谓词)

    -

    Predicates(谓词)

    +

    XPath Predicates(谓词)

    +

    Predicates(谓词)

    //div[true()]
     //div[@class="head"]
     //div[@class="head"][@id="top"]
     

    仅当某些条件为真时才限制节点集。它们可以被链接起来。

    -

    操作符

    +

    操作符

    # 比较
     //a[@id = "xyz"]
     //a[@id != "xyz"]
    @@ -497,7 +497,7 @@
     //div[@id="head" and position()=2]
     //div[(x and y) or not(z)]
     
    -

    使用节点

    +

    使用节点

    # 在函数内部使用它们
     //ul[count(li) > 2]
     //ul[count(li[@class='hide']) > 0]
    @@ -506,7 +506,7 @@
     //ul[li]
     

    您可以在谓词中使用节点。

    -

    索引

    +

    索引

    //a[1]                # 第一个<a>
     //a[last()]           # 最后一个<a>
     //ol/li[2]            # 第二个<li>
    @@ -514,18 +514,18 @@
     //ol/li[position()>1] #:not(:first-child)
     

    [] 与数字一起使用,或者使用 last()position()

    -

    链接顺序

    +

    链接顺序

    a[1][@href='/']
     a[@href='/'][1]
     

    顺序很重要,这两个是不同的。

    -

    嵌套谓词

    +

    嵌套谓词

    //section[.//h1[@id='hi']]
     

    如果它有一个具有 id='hi'<h1> 后代,则返回 <section>

    -

    XPath 函数

    +

    XPath 函数

    -

    节点功能

    +

    节点功能

    name()            # //[starts-with(name(), 'h')]
     text()            # //button[text()="Submit"]
                       # //button/text()
    @@ -535,7 +535,7 @@
     
    count()           # //table[count(tr)=1]
     position()        # //ol/li[position()=2]
     
    -

    字符串函数

    +

    字符串函数

    contains()        # font[contains(@class,"head")]
     starts-with()     # font[starts-with(@class,"head")]
     ends-with()       # font[ends-with(@class,"head")]
    @@ -548,17 +548,17 @@
     normalize-space()
     string-length()
     
    -

    布尔函数

    +

    布尔函数

    not(expr)         # button[not(starts-with(text(),"Submit"))]
     
    -

    类型转换

    +

    类型转换

    string()
     number()
     boolean()
     
    -

    XPath Axes

    +

    XPath Axes

    -

    使用轴

    +

    使用轴

    //ul/li                       # ul > li
     //ul/child::li                # ul > li (same)
     //ul/following-sibling::li    # ul ~ li
    @@ -591,7 +591,7 @@
     
     
    //ul/child::li
    AxisStepAxisStep

    表达式的步骤由 / 分隔,通常用于选择子节点。 这并不总是正确的:您可以使用 :: 指定不同的“轴”。

    -

    子轴

    +

    子轴

    # 都一样
     //ul/li/a
     //child::ul/child::li/child::a
    @@ -606,7 +606,7 @@
     //ul[count(li) > 2]
     //ul[count(child::li) > 2]
     
    -

    后代或自我轴

    +

    后代或自我轴

    # 都一样
     //div//h4
     //div/descendant-or-self::h4
    @@ -616,7 +616,7 @@
     //ul//[last()]
     //ul/descendant-or-self::[last()]
     
    -

    其他轴

    +

    其他轴

    @@ -696,13 +696,13 @@
    AxisAbbrevNotes
    ancestor选择当前节点的所有祖先(父母、祖父母等)
    ancestor-or-self选择当前节点所有祖先(父、祖父等)和当前节点本身
    attribute@@hrefattribute::href 的缩写
    childdivchild::div 的缩写
    descendant选择当前节点的所有后代(子、孙等)
    descendant-or-self/////descendant-or-self::node()/的缩写 选择当前节点和当前节点本身的所有后代(子、孙等)
    namespace选择当前节点的所有命名空间节点
    self..self::node() 的缩写,选择当前节点
    parent....parent::node() 的缩写,选择当前节点的父节点
    following选择文档中当前节点结束标记之后的所有内容
    following-sibling选择当前节点之后的所有兄弟节点
    preceding选择文档中出现在当前节点之前的所有节点,除了祖先、属性节点和命名空间节点
    preceding-sibling选择当前节点之前的所有兄弟节点

    您还可以使用其他轴。

    -

    联合

    +

    联合

    //a | //span
     

    使用 | 连接两个表达式。

    -

    XPath 更多示例

    +

    XPath 更多示例

    -

    示例

    +

    示例

    //*                 # 所有元素
     count(//*)          # 计算所有元素
     (//h1)[1]/text()    # 第一个 h1 标题的文本
    @@ -710,7 +710,7 @@
                         # ...扩展到 //li[child::span]
     //ul/li/..          # 使用 .. 选择父级
     
    -

    查找(父)家长

    +

    查找(父)家长

    //section[h1[@id='section-name']]
     

    查找直接包含 h1#section-name<section>

    @@ -718,15 +718,15 @@

    查找包含 h1#section-name<section>。 (与上面相同,但使用后代或自我而不是孩子)

    -

    最近的

    +

    最近的

    ./ancestor-or-self::[@class="box"]
     

    jQuery$().closest('.box') 一样工作。

    -

    属性

    +

    属性

    //item[@price > 2*@discount]
     

    查找 <item> 并检查其属性

    -

    另见

    +

    另见

    • Devhints (devhints.io)
    • Xpath test bed (whitebeam.org)
    • @@ -744,8 +744,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -756,7 +754,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/docs/yaml.html b/docs/yaml.html index bfbdb9fe..616f0550 100644 --- a/docs/yaml.html +++ b/docs/yaml.html @@ -34,7 +34,7 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    +

    @@ -43,8 +43,8 @@

    这是理解和编写 YAML 格式配置文件的快速参考备忘单。

    入门

    -

    入门

    +

    介绍

    YAML 是一种数据序列化语言,旨在供人类直接读写

    • YAML 不允许使用制表符
    • @@ -55,7 +55,7 @@
    • Ansible playbook 是 YAML 文件
    -

    标量类型

    +

    标量类型

    n1: 1            # 整数
     n2: 1.234        # 浮点
    @@ -65,7 +65,7 @@
     b: false         # 布尔类型
     d: 2015-04-05    # 日期类型
     
    -

    ↓ 等效的 JSON

    +

    ↓ 等效的 JSON

    {
       "n1": 1,
       "n2": 1.234,
    @@ -77,32 +77,32 @@
     }
     

    使用空格缩进。 元素部分之间必须有空间。

    -

    变量

    +

    变量

    some_thing: &VAR_NAME foobar
     other_thing: *VAR_NAME
     
    -

    ↓ 等效的 JSON

    +

    ↓ 等效的 JSON

    {
       "some_thing": "foobar",
       "other_thing": "foobar"
     }
     
    -

    注释

    +

    注释

    # A single line comment example
     # block level comment example
     # comment line 1
     # comment line 2
     # comment line 3
     
    -

    多行字符串

    +

    多行字符串

    description: |
       hello
       world
     
    -

    ↓ 等效的 JSON

    +

    ↓ 等效的 JSON

    {"description": "hello\nworld\n"}
     
    -

    继承

    +

    继承

    parent: &defaults
       a: 2
    @@ -111,7 +111,7 @@
       <<: *defaults
       b: 4
     
    -

    ↓ 等效的 JSON

    +

    ↓ 等效的 JSON

    {
       "parent": {
         "a": 2,
    @@ -123,7 +123,7 @@
       }
     }
     
    -

    参考

    +

    参考

    values: &ref
       - Will be
    @@ -132,7 +132,7 @@
     other_values:
       i_am_ref: *ref
     
    -

    ↓ 等效的 JSON

    +

    ↓ 等效的 JSON

    {
       "values": [
         "Will be",
    @@ -146,59 +146,59 @@
       }
     }
     
    -

    折叠的字符串

    +

    折叠的字符串

    description: >
       hello
       world
     
    -

    ↓ 等效的 JSON

    +

    ↓ 等效的 JSON

    {"description": "hello world\n"}
     
    -

    两份文件

    +

    两份文件

    ---
     document: this is doc 1
     ---
     document: this is doc 2
     

    YAML使用---将指令与文档内容分开。

    -

    YAML Collections

    -

    序列

    +

    YAML Collections

    +

    序列

    - Mark McGwire
     - Sammy Sosa
     - Ken Griffey
     
    -

    ↓ 等效的 JSON

    +

    ↓ 等效的 JSON

    [
       "Mark McGwire",
       "Sammy Sosa",
       "Ken Griffey"
     ]
     
    -

    映射

    +

    映射

    hr:  65       # Home runs
     avg: 0.278    # Batting average
     rbi: 147      # Runs Batted In
     
    -

    ↓ 等效的 JSON

    +

    ↓ 等效的 JSON

    {
       "hr": 65,
       "avg": 0.278,
       "rbi": 147
     }
     
    -

    映射到序列

    +

    映射到序列

    attributes:
       - a1
       - a2
     methods: [getter, setter]
     
    -

    ↓ 等效的 JSON

    +

    ↓ 等效的 JSON

    {
       "attributes": ["a1", "a2"],
       "methods": ["getter", "setter"]
     }
     
    -

    映射序列

    +

    映射序列

    children:
       - name: Jimmy Smith
         age: 15
    @@ -208,7 +208,7 @@
         name: Sammy Sosa
         age: 12
     
    -

    ↓ 等效的 JSON

    +

    ↓ 等效的 JSON

    {
       "children": [
         {"name": "Jimmy Smith", "age": 15},
    @@ -217,7 +217,7 @@
       ]
     }
     
    -

    序列的序列

    +

    序列的序列

    my_sequences:
       - [1, 2, 3]
       - [4, 5, 6]
    @@ -227,7 +227,7 @@
         - 9
         - 0 
     
    -

    ↓ 等效的 JSON

    +

    ↓ 等效的 JSON

    {
       "my_sequences": [
         [1, 2, 3],
    @@ -236,14 +236,14 @@
       ]
     }
     
    -

    映射的映射

    +

    映射的映射

    Mark McGwire: {hr: 65, avg: 0.278}
     Sammy Sosa: {
         hr: 63,
         avg: 0.288
       }
     
    -

    ↓ 等效的 JSON

    +

    ↓ 等效的 JSON

    {
       "Mark McGwire": {
         "hr": 65,
    @@ -255,7 +255,7 @@
       }
     }
     
    -

    嵌套集合

    +

    嵌套集合

    Jack:
       id: 1
       name: Franc
    @@ -265,7 +265,7 @@
         - b
       location: {country: "A", city: "A-A"}
     
    -

    ↓ 等效的 JSON

    +

    ↓ 等效的 JSON

    {
       "Jack": {
         "id": 1,
    @@ -278,26 +278,26 @@
       }
     }
     
    -

    无序集

    +

    无序集

    set1: !!set
       ? one
       ? two
     set2: !!set {'one', "two"}
     
    -

    ↓ 等效的 JSON

    +

    ↓ 等效的 JSON

    {
       "set1": {"one": null, "two": null},
       "set2": {"one": null, "two": null}
     }
     

    集合表示为一个映射,其中每个键都与一个空值相关联

    -

    有序映射

    +

    有序映射

    ordered: !!omap
     - Mark McGwire: 65
     - Sammy Sosa: 63
     - Ken Griffy: 58
     
    -

    ↓ 等效的 JSON

    +

    ↓ 等效的 JSON

    {
       "ordered": [
          {"Mark McGwire": 65},
    @@ -306,8 +306,8 @@
       ]
     }
     
    -

    YAML 参考

    -

    条款

    +

    YAML 参考

    +

    条款

    • 序列又名数组或列表
    • 标量又名字符串或数字
    • @@ -315,7 +315,7 @@

    基于 YAML.org refcard

    -

    文档指标

    +

    文档指标

    @@ -338,7 +338,7 @@
    :-:-
    %指令指标
    ---文档标题
    ...文档终结者
    -

    收集指标

    +

    收集指标

    @@ -374,7 +374,7 @@
    :-:-
    ?关键指标
    :价值指标
    -嵌套系列条目指示器
    ,单独的内联分支条目
    []环绕串联系列分支
    {}环绕在线键控分支
    -

    别名指标

    +

    别名指标

    @@ -393,7 +393,7 @@
    :-:-
    &锚属性
    *别名指示符
    -

    特殊键

    +

    特殊键

    @@ -412,7 +412,7 @@
    :-:-
    =默认“值”映射键
    <<合并来自另一个映射的键
    -

    标量指标

    +

    标量指标

    @@ -451,7 +451,7 @@
    :-:-
    ''环绕内联未转义标量
    "环绕内嵌转义标量
    ``
    >折叠标量指示器
    -剥离 chomp 修饰符(|->-
    +保留 chomp 修饰符(|+>+
    1-9显式缩进修饰符(|1>2)。
    修饰符可以组合(|2-, >+1
    -

    标签属性(通常未指定)

    +

    标签属性(通常未指定)

    @@ -488,7 +488,7 @@
    :-:-
    none未指定的标签(由应用程序自动解析)
    !非特定标签(默认情况下,!!map/!!seq/!!str
    !foo主要(按照惯例,表示本地 !foo 标记)
    !!foo次要的(按照惯例,表示 tag:yaml.org,2002:foo
    !h!foo需要 %TAG !h! <prefix>(然后表示 <prefix>foo
    !<foo>逐字标记(始终表示“foo”)
    -

    杂项指标

    +

    杂项指标

    @@ -507,7 +507,7 @@
    #一次性评论指示器
    `@两者都保留供将来使用
    -

    核心类型(默认自动标签)

    +

    核心类型(默认自动标签)

    @@ -531,16 +531,16 @@
    !!map{Hash table, dictionary, mapping}
    !!seq{List, array, tuple, vector, sequence}
    !!strUnicode 字符串
    -

    转义码

    +

    转义码

    -

    Numeric

    +

    Numeric

    • \x12 (8-bit)
    • \u1234 (16-bit)
    • \U00102030 (32-bit)
    -

    Protective

    +

    Protective

    • \\ (\)
    • \" (")
    • @@ -548,7 +548,7 @@
    • \<TAB> (TAB)
    -

    C

    +

    C

    • \0 (NUL)
    • \a (BEL)
    • @@ -560,7 +560,7 @@
    • \v (VTAB)
    -

    额外的

    +

    额外的

    • \e (ESC)
    • \_ (NBSP)
    • @@ -569,7 +569,7 @@
    • \P (PS)
    -

    更多类型

    +

    更多类型

    @@ -588,7 +588,7 @@
    !!set{cherries, plums, apples}
    !!omap[one: 1, two: 2]
    -

    与语言无关的标量类型

    +

    与语言无关的标量类型

    @@ -625,7 +625,7 @@
    {~, null}空(无值)。
    [1234, 0x4D2, 02333][十进制整数、十六进制整数、八进制整数]
    [1_230.15, 12.3015e+02][固定浮点数,指数浮点数]
    [.inf, -.Inf, .NAN][无穷大(浮点数),负数,不是数字]
    {Y, true, Yes, ON}布尔真
    {n, FALSE, No, off}布尔假
    -

    另见

    +

    另见

    • YAML Reference Card (yaml.org)
    • Learn X in Y minutes (learnxinyminutes.com)
    • @@ -646,8 +646,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -658,7 +656,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/index.html b/index.html index dbb6508d..23b707b7 100644 --- a/index.html +++ b/index.html @@ -34,11 +34,11 @@ document.documentElement.setAttribute('data-color-mode', mode); localStorage.setItem(LOCAL_NANE, mode); } -

    Quick Reference

    +

    Quick Reference

    为开发人员分享快速参考备忘清单【速查表】 (主要是方便自己),在看到 Reference 快速参考备忘单,感觉非常简单,造轮子使命感突然来了,造个中文版本的,为了方便自己的技术栈查阅,立马撸起来 :)。如果您发现此处的备忘单不合适,您可以通过提交 PR 来修复它或提供更好的备忘清单,只针对【中文】用户。以下是开源天使提供的一些备忘清单和快速参考 :)。

    -

    编程

    +

    前端

    +

    Nodejs

    +

    工具

    +

    工具

    nginx @@ -203,7 +206,7 @@ XPath

    -

    Linux 命令

    +

    Linux 命令

    Awk @@ -258,7 +261,7 @@ Screen

    -

    其它

    +

    看到缺少什么了吗?

    +

    看到缺少什么了吗?

    上面的列表没有看到你想要的? 您是否正在寻找一些备忘清单或参考资料,或者您有一些片段备忘清单要分享,这是一个最好的机会!

    请求添加备忘单(速查表) @@ -323,8 +326,6 @@ function anchorPoint() { Array.from(document.querySelectorAll('.h2wrap-body .wrap')).forEach((elm) => elm.classList.remove('active')) if (elm?.tagName === 'H3') { elm?.parentElement?.parentElement?.classList.add('active'); - const box = elm?.parentElement?.parentElement; - console.log('elm:2', box, document.querySelectorAll('.h2wrap-body .wrap')) } } anchorPoint(); @@ -335,7 +336,6 @@ function updateAnchor(element) { tocanchor.classList.remove('is-active-link'); }); const anchor = element || document.querySelector(`a.tocs-link[href='${decodeURIComponent(window.location.hash)}']`); - console.log('anchor', anchor) if (anchor) { anchor.classList.add('is-active-link'); } diff --git a/style/style.css b/style/style.css index 26d30016..eb45ddce 100644 --- a/style/style.css +++ b/style/style.css @@ -624,6 +624,14 @@ body:not(.home) .h2wrap-body > .wrap:hover .h3wrap > h3 a::after { display: initial; } +.wrap.h3body-exist .wrap-header.h3wrap { + flex: initial; +} + +.wrap.h3body-exist > .h3wrap-body { + flex: 1; +} + .wrap-header.h3wrap { z-index: 0; width: 100%;