很多面试题,网上已经有很多题解,本文只是记录下自己刷题中即使有了答案但依然模糊的知识点,形式不一,有些题目只是单纯汇总和延伸下,方便自己掌握知识。(虽然工作好多年,感觉基础还是好薄弱哭唧唧~)题目可能描述并不完全,根据关键字应该能搜到。不定期更新。欢迎有小伙伴指正错误,共同进步~
1. 为什么通常在发送数据埋点请求的时候使用的是 1x1 像素的透明 gif 图片?
我个人项目中确实没有做过埋点的工作,因此此题作为一个知识补充
2. 输出以下代码执行的结果并解释为什么
const obj = {
2: 3,
3: 4,
length: 2,
push: Array.prototype.push,
splice: Array.prototype.splice,
};
obj.push(1);
obj.push(2);
console.log(obj);
该题考察类数组相关知识,搜索对应关键词即可。令我疑惑的是它在chrome的打印结果。上为未加splice,下为加了splice。我以为有什么深意,不能理解。后面多方查询,得到的答案是也许这只是chrome浏览器的显示方式。在firefox以及node环境中,并没有区别。
另外,该题还可以进行扩展,
- 常见的类数组还有哪些?
- 类数组如何转换为数组?
- 数组的方法有哪些,哪些会改变原数组,哪些不会改变原数组?
- 数组的常见方法的实现。
- 如何区分一个数据是否是数据类型?=>类型判断 => 原型链
- 稀疏数组
- 数组和map、set等等的区别
之前总结了一些方法
let arr1 = [1, 2, 3], arr2 = ["a", "b"];
| 方法名字 | 使用方法 | 执行 | 返回结果 | 原数组 |
|---|---|---|---|---|
| concat | var arr = arr.concat(value1[, value2[, ...[, valueN]]]) | arr1.concat(arr2) | [1, 2, 3, "a", "b"] | [1, 2, 3] |
| push | arr.push(element1, ..., elementN) | arr1.push(4) | 4(length) | [1, 2, 3, 4] |
| pop | arr.pop() | arr1.pop() | 3 | [1, 2] |
| shift | arr.shift() | arr1.shift() | 1 | [2, 3] |
| unshift | arr.unshift(element1, ..., elementN) | arr1.unshift(4) | 4(length) | [4, 1, 2, 3] |
| Join | arr.join([separator]) | arr1.join() | 1,2,3 | [1, 2, 3] |
| includes | arr.includes(valueToFind[, fromIndex]) | arr1.includes(2) | true | [1, 2, 3] |
| indexOf | arr.indexOf(searchElement[, fromIndex]) | arr1.indexOf(2) | 1 | [1, 2, 3] |
| lastIndexOf | arr.indexOf(searchElement[, fromIndex]) | arr1.lastIndexOf(1) | 1 | [1, 2, 3] |
| reverse | arr.reverse() | arr1.reverse() | [3, 2, 1] | [3, 2, 1] |
| sort | arr.sort([compareFunction]) | arr1.sort() | [1, 2, 3] | [1, 2, 3] |
| slice | arr.slice([begin[, end]]) | arr1.slice(1) | [2, 3] | [1, 2, 3] |
| splice | arr.splice(start[, deleteCount[, item1[, item2[, ...]]]]) | arr1.splice(0,1) | [1] | [2, 3] |
| fill | arr.fill(value[, start[, end]]) | arr1.fill(0, 1) | [1, 0, 0] | [1, 0, 0] |