js面试解析(1)

110 阅读2分钟

这是我参与11月更文挑战的第8天,活动详情查看:2021最后一次更文挑战

js数据类型,区别

  • 基本数据类型
    • Number
    • String
    • null
    • undefined
    • Boolean
    • symbol
    • bigint
  • 引用数据类型
    • object: 普通对象、数组对象、正则对象、日期对象、Math数学函数对象
    • function
  • 两种数据存储方式
    • 基本数据:栈,占据空间小、大小固定,属于被频繁使用的数据
    • 引用数据:堆,占据空间大,大小不固定,引用数据类型在栈中存储了指针,该指针会指向堆中该实体的起始地址。
  • 两种数据类型的区别
    • 堆比栈空间大,栈比堆运行速度快
    • 堆内存是无序存储,可以根据引用直接获取
    • 基本数据类型比较稳定,而且相对来说占用的内存小
    • 引用数据类型大小是动态的,而且是无限的

nullundefined的区别

  • undefined 表示一个变量自然的、最原始的状态值,而 null 则表示一个变量被人为的设置为空对象,而不是原始状态。所以,在实际使用过程中,为了保证变量所代表的语义,不要对一个变量显式的赋值 undefined,当需要释放一个对象时,直接赋值为 null 即可

mapforEach的区别

  • 相同点
    • 都是循环遍历数组中的每一项
    • 每次执行匿名函数都支持三个参数:item(当前每一项)index(索引值)arr(原数组)
    • 匿名函数中的this都是指向window
    • 只能遍历数组
  • 不同点
    • map()会分配内存空间存储新数组并返回,foreach()不会返回数据
    • foreach()允许callback更改原始数组的元素,map()返回新的数组
var arr = [1,6,89,34]
let a = arr.forEach((ele, index) => {
  arr[index] = ele * 2
});
console.log(a) // 输出:undefined
let arr2 = arr.map((ele) => {
  return ele * 2
})
console.log(arr2, arr2 === arr) // 输出:[4,24,356,136] false

for..of可以遍历哪些对象?

  • 遍历所有数据结构的统一方式
  • ES6新增的遍历方法,但只限于迭代器(iterator),所以普通对象用for..of遍历是会报错的。
  • 可迭代对象
    • Array
    • Map
    • Set
    • String
    • TypedArray
    • arguments
  • 举例
// 数组Array
for (const item of arr2) {
  console.log(item)  // 输出:4 24 356 136
}
// map对象
const m = new Map()
m.set("one",1)
m.set("two",2)
for (const item of m) {
  console.log(item)
}
// 输出:['one',1]
//       ['two',2]
// 使用数组的解构,获得key,value
for (const [key,value] of m) {
  console.log(key,value)
}
// 输出:one,1
//       two,2
  • foreach不同点:可以打断循环遍历
  • for..in适合:遍历键值对对象
  • for..of遍历普通对象会出错
const obj = {
  name: 'zs',
  age: 18
}
for (const item of obj) {
  console.log(item)
}
// 输出:Uncaught TypeError: obj is not iterable