需要循环遍历本地图片地址时,打包后会出现图片找不到,解决方法,可以把图片通过 js import 进来,之后使用 import 的变量来循环
词法作用域
1 | function init() { |
init() 创建了一个局部变量 name 和一个名为 displayName() 的函数。displayName() 是定义在 init() 里的内部函数,仅在该函数体内可用。displayName() 内没有自己的局部变量,然而它可以访问到外部函数的变量,所以 displayName() 可以使用父函数 init() 中声明的变量 name 。但是,如果有同名变量 name 在 displayName() 中被定义,则会使用 displayName() 中定义的 name 。
linux 源码包安装
- wget http://xxxx 获取源码包
- 解压,tar zxvf xxx.tar.gz
- ./configure –prefix=/usr/local/xxx 指定安装路径
- make 编译
- make install 安装
- 配置环境变量
1
vim /etc/profile
然后在文件的最后一行,添加下面的内容,然后保存退出。
1 | export PATH=$PATH:/usr/local/git/bin |
使用 source 命令生效。
1 | source /etc/profile |
ECMAScript 中有 6 种简单数据类型(也称为基本数据类型):Undefined、Null、Boolean、Number、String、Symbol (new in ES 6,表示独一无二的值)。还有一种复杂数据类型-Object,Object 本质上是由一组无序的名值对组成的。
除 Object 以外的所有类型都是不可变的(值本身无法被改变)。我们称这些类型的值为“原始值”。
如:JavaScript 中对字符串的操作一定返回了一个新字符串,原始字符串并没有被改变
什么是正则表达式:
查找符合某些复杂规则的字符串。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。
例:查找 hi:
\bhi\b
\b 用于匹配一个位置,指 hi 前面或后面没有字符(匹配单词的开始或结束)
例:查找 hi 后面不远处跟着一个 Lucy:
\bhi\b.*\bLucy\b
. 是一个元字符,用于匹配除换行符外的任意字符
.* 表示任意数量的不包含换行的字符
例:0\d\d-\d\d\d\d\d\d\d\d 以 0 开头,然后两个数字,-,最后 8 个数字
(012-12345678)——> 可以简写成 0\d{2}-\d{8}
例:简单的 IP 地址分配
(\d{1,3}\.){3}\d{1,3}——a.b.c.d
\d{1,3}匹配 1 到 3 位数字,.匹配一个点(.),(\d{1,3}.){3}重复三次
abcd 数值处于 0-255
((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}((2[0-4]\d|25[0-5]|[01]?\d\d?))
2[0-4]\d——匹配200-249之间的数值
25[0-5]——匹配250-255之间的数值
[01]?\d\d?——匹配0-199之间的数值
\b(\w+)\b\s+\1\b可以用来匹配重复的单词,像go go, 或者kitty kitty。
这个表达式首先是一个单词,也就是单词开始处和结束处之间的多于一个的字母或数字(\b(\w+)\b),这个单词会被捕获到编号为 1 的分组中,然后是 1 个或几个空白符(\s+),最后是分组 1 中捕获的内容(也就是前面匹配的那个单词)(\1)
遍历菜单数组,获取选中的子节点的所有父节点元素
- 假设有一个数组如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41let menus = [
{
key: "menu1",
label: "一级菜单1",
icon: "",
},
{
key: "menu2",
label: "一级菜单2",
icon: "",
},
{
key: "menu3",
label: "一级菜单3",
icon: "",
children: [
{
key: "menu3_1",
label: "一级菜单3_1",
icon: "",
children: [
{
key: "menu3_1_1",
label: "一级菜单3_1_1",
icon: "",
},
],
},
{
key: "menu3_2",
label: "一级菜单3_2",
icon: "",
},
],
},
{
key: "menu4",
label: "未开发页面演示",
icon: "",
},
]; - 需要获取到选中菜单 menu3_1_1 的所有父元素,即 menu3,menu3_1 和 menu3_1_1,js 代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26/**
* selectMenus 切换菜单时候触发的事件,参数为更改的菜单 key
* breadCrumb 选中菜单的所有父元素的数组集
*/
let breadCrumb = [];
// 遍历菜单
function eachMenus(item, name) {
for (let i = 0, j = item.length; i < j; i++) {
breadCrumb.push(item[i].label);
if (item[i].children) {
eachMenus(item[i].children, name);
} else {
if (item[i].key === name) {
return;
} else {
breadCrumb.splice(this.breadCrumb.length - 1, 1);
}
}
}
breadCrumb.splice(this.breadCrumb.length - 1, 1);
}
function selectMenus(name) {
breadCrumb = [];
eachMenus(menus, name);
}