没事儿的时候刷点儿面试题

86 阅读2分钟

很多面试题,网上已经有很多题解,本文只是记录下自己刷题中即使有了答案但依然模糊的知识点,形式不一,有些题目只是单纯汇总和延伸下,方便自己掌握知识。(虽然工作好多年,感觉基础还是好薄弱哭唧唧~)题目可能描述并不完全,根据关键字应该能搜到。不定期更新。欢迎有小伙伴指正错误,共同进步~

1. 为什么通常在发送数据埋点请求的时候使用的是 1x1 像素的透明 gif 图片?

我个人项目中确实没有做过埋点的工作,因此此题作为一个知识补充

为什么通常在发送数据埋点请求的时候使用的是 1x1 像素的透明 gif 图片?.png

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环境中,并没有区别。

image.png

另外,该题还可以进行扩展,

  1. 常见的类数组还有哪些?
  2. 类数组如何转换为数组?
  3. 数组的方法有哪些,哪些会改变原数组,哪些不会改变原数组?
  4. 数组的常见方法的实现。
  5. 如何区分一个数据是否是数据类型?=>类型判断 => 原型链
  6. 稀疏数组
  7. 数组和map、set等等的区别

之前总结了一些方法

let arr1 = [1, 2, 3], arr2 = ["a", "b"];

方法名字使用方法执行返回结果原数组
concatvar arr = arr.concat(value1[, value2[, ...[, valueN]]])arr1.concat(arr2)[1, 2, 3, "a", "b"][1, 2, 3]
pusharr.push(element1, ..., elementN)arr1.push(4)4(length)[1, 2, 3, 4]
poparr.pop()arr1.pop()3[1, 2]
shiftarr.shift()arr1.shift()1[2, 3]
unshiftarr.unshift(element1, ..., elementN)arr1.unshift(4)4(length)[4, 1, 2, 3]
Joinarr.join([separator])arr1.join()1,2,3[1, 2, 3]
includesarr.includes(valueToFind[, fromIndex])arr1.includes(2)true[1, 2, 3]
indexOfarr.indexOf(searchElement[, fromIndex])arr1.indexOf(2)1[1, 2, 3]
lastIndexOfarr.indexOf(searchElement[, fromIndex])arr1.lastIndexOf(1)1[1, 2, 3]
reversearr.reverse()arr1.reverse()[3, 2, 1][3, 2, 1]
sortarr.sort([compareFunction])arr1.sort()[1, 2, 3][1, 2, 3]
slicearr.slice([begin[, end]])arr1.slice(1)[2, 3][1, 2, 3]
splicearr.splice(start[, deleteCount[, item1[, item2[, ...]]]])arr1.splice(0,1)[1][2, 3]
fillarr.fill(value[, start[, end]])arr1.fill(0, 1)[1, 0, 0][1, 0, 0]