setTimeout、setInterval被遗忘的第三个参数

今天在看Promise的时候发现定时器还有第三个参数,之前一直都没注意,也没有用过,很惊喜😄。

1
2
3
4
5
function timeout(ms) {
return new Promise((resolve, reject) => {
setTimeout(resolve, ms, 'done');
});
}

阅读全文

数据结构

数据结构

数据结构是相互之间存在一种或多种特定关系的数据元素的集合。

队列(queue)

队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。

阅读全文

面试题系列

js部分

第一题

1
'undefined' in window; // true

阅读全文

JS颜色十六进制转换为rgb

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
function getRGB(color) {
// 检查十六进制颜色值格式
var colorReg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/,
rgbColor = [],
i;

function formatColor(colorFragment) {
// parseInt第二个参数代表的是:说明第一个参数属于什么数值类型
return parseInt('0x'+colorFragment, 16);
}

if (!!color && colorReg.test(color)) {
for (i = 1; i < color.length; i++) {
// 区分四位和七位十六进制颜色值
if (color.length === 4) {
rgbColor.push(formatColor(color.slice(i, i+1).concat(color.slice(i, i+1))));
} else {
rgbColor.push(formatColor(color.substr(i, 2)));
i++;
}
}
return 'rgb('+rgbColor.join(',')+')';

} else {
return color;
}

}

阅读全文

按字节数截取字符串

需要提前说明的知识点:

字符串的length属性返回的是字符的个数,不是字节的个数耨!

按字节数截取字符串

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
function strEllipsis(str, targetLen) {
if (str == null) return '';

if (typeof str != "string"){
str += "";
} else {
str = str.trim();
}

let len = str.length,
charLength = 0;

for (let i = 0; i < len; i++) {
if (/[^\x00-\xff]/.test(str.charAt(i))) {
// 说明是汉字或者全角字符,都按2个字节处理
charLength += 2;
} else {
charLength += 1;
}

// 如果出现截取半个汉字或者全角字符的情况,则舍弃截取少一位
if (charLength > targetLen) {
return str.substr(0, i)+'...';
}

if (i == (len-1) && (charLength <= targetLen)) {
return str.substr(0, i+1);
}

}
}

阅读全文

return使用注意点

场景描述

一天晚上,我在控制台输出了这样一段代码,结果给我报了个非法的返回语句错误?咿,for循环中不能用return吗?以前也用过呢!这次是咋回事,一时难以理解。

阅读全文