携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第7天,点击查看活动详情
最近处于面试找工作阶段,面了几家之后发现自己的基础知识不够牢固,很多基础知识处于模糊或者不清楚状态,故此重新复习之前学习基础知识做的笔记,通过翻阅笔记发现一些已经淡忘的基础知识还是很有趣的,由于现在开发都是框架一把梭,很少用原生去写,久而久之就忘却了。万丈高楼平地起,基础知识还是要拾回来的。
字符串
- 字符串比较是逐位获取 Unicode 码进行比较,可以手动调用API获取字符的 Unicode 编码,或者通过传入 Unicode 码获取其所标示的字符
// 字符a Unicode 为 97
'a'.charCodeAt()
// Unicode 97 表示字符 a
String.fromCharCode(97)
这组API在实际业务开发中很少用到,但是在做算法题的时候用途还是很大的,一般用来映射字符索引。
- 字符截取
// end 传入负数时表示从后往前截取,Vue源码中用来截取值类型
str.slice(begin, end)
// 用法与 slice 类型,但begin > end时,两值会互换
str.substring(begin, end)
- 字符出现次数
// split 可用作于计算字符出现次数
let str = "hello world";
// 字符 l 出现的次数为:
str.split('l').length - 1 // 3
数组
- 数组遍历
数组有很多遍历函数,如 forEach、map等,但是 for 循环的效率比这些函数要高
- find 函数
记得当年作为应届生去面试的时候,面试官让我纸上手写find,当时基础知识不牢固,以为find普通函数,传入查找值返回true/false,然后照着这个手写了一版,被面试官嘲笑了,他说是传入一个函数,找到时返回索引,找不到返回 -1,然而抱着怀疑心态面完回去查发现并不是这样,只怪自己学艺不精,不然当时挺想反驳回去的。
find 是 es6 出现的数组 API,是一个高阶函数,以函数为入参,找到则返回该值,找不到返回 undefined,第二个参数可指定 fn 的执行上下文。
// 手写实现一下
Array.prototype.myFind = function(fn, thisArg) {
if (!Array.isArray(this)) return ;
for (let i = 0; i < this.length; i++) {
let ans = false;
if (thisArg) ans = fn.call(thisArg, this[i], i, this);
else ans = fn(this[i], i, this);
if (ans) return this[i];
}
}
es6 特性
-
数组新增了很多方法,包括数组扁平化等。较少用到的可能是 of 函数,of函数创建数组解决了 new Array 创建的一些弊端。
-
fill 方法解算法题的时候用到的比较多,需要注意的是如果填充引用值,如 fill([]),那么所有的填充项都是同一个数组,都会指向同一个地址,填充项改成new Array 或者函数都试过了,结果都是一样,所以只能用循环去一项项填充,目前没找到更好的办法。
Dom操作
- dom操作很多,记住常用的几个就好,研究 Vue diff 实现的时候比较有用。
Event
- 自定义事件
<div>event dom</div>
<div>other</div>
<script>
// 事件的派发和监听需要是同一个元素
const eventEl = document.querySelectorAll('div')[0]
const otherEl = document.querySelectorAll('div')[1]
const myEvent = new CustomEvent('myEvent')
eventEl.addEventListener('myEvent', () => {
console.log('自定义事件执行')
})
otherEl.onclick = () => {
console.log('click !!')
eventEl.dispatchEvent(myEvent)
}
</script>
很多框架底层都用了这套API做自定义事件。
正则表达式
- 正则在处理一些复杂的字符匹配替换问题的时候会有妙用,不过规则较多不容易记全,需要系统的做一个笔记方便查阅。比如非贪婪匹配,正向预查和反向引用,解决一些复杂匹配问题的时候非常香。
总结
基础知识还是相当重要的,回头学习复习时发现了已模糊的知识。比如addEventListener的第三个参数作用。
现在业务开发一般都是用框架一把梭,基础知识很少使用,久而久之就忘记了,系统学习基础知识的时,可边学边做笔记,方便后续复习查阅笔记。
上面这个网址是作者近几个月做的搭建平台开源项目,目前处于基础功能阶段,功能陆续更新中,感觉搭建平台有很大的可玩性,欢迎试用和提意见!