前端面试复习

130 阅读5分钟

Javascriot的基础数据类型

  • Number(数字类型)
  • String(字符串类型)
  • Bollean(布尔类型true/false)
  • Null(为空对象占位)
  • Undefined(空值类型)
  • symbol(用于一个对象中的私有化属性)
  • 以上都是存储在堆中,当不再引用时javascript会自动回收这些基础类型的数据

Javascript的引用数据类型

  • Object对象类型:可以给自身添加属性和方法分为两种 ,1私有化通过new porpType.name 实现 2 Object.Create/Object.name
  • Array[string,Object,Function,string,nulber,Bollean...]数组数据类型也可以是多维数组,数组内特性有内置的遍历接口和长度/和操作数组的方法列如reverse,push,shift等
  • function:函数
  • 以上都是引用类型,与基础类型的区别就是存储的位置不同类型不同,引用数据的key存储在堆内,通过堆的key(也可以理解为地址)去查找指向栈内的Value值,引用数据类型一但定义无法自动销毁

javascript计算小数点问题

0.1+0.2 = 0.30000004 解决方法:parseFloat((0.1+0.2).toFixed(10))清除浮点 取整

nextTick

  • 在下次 DOM 更新循环结束之后执行延迟回调

  • 在修改数据之后立即使用这个方法,获取更新后的 DOM

  • 原理

  • Vue 在修改数据后,视图不会立刻更新,而是等同一事件循环中的所有数据变化完成之后,再统一进行视图更新

  • 应用场景:

  • 需要在视图更新之后,基于新的视图进行操作。

宏观任务:同步任务队列

微观任务:同步任务中产生的微任务如异步执行任务

操作字符串的基本方法

  • replace(匹配的元素,替换的元素)匹配替换某个字节
  • string.concat('需要合并的参数')
  • slice(start,end)删除字节
  • substring()删除字符串,参数为删除字符的起止位置
  • substr(起始位置,删除多少个)
  • trim()删除所有空格
  • stimRight()清除字符串后面空格
  • stimLeft()清除字符串前面空格
  • repeat(2)复制字符串2次 'adcabc'
  • toLowerCase()/toUpperCase() 转换英文字符串大小写
  • indexOf('string')查询字符串返回索引
  • charAt()查询字符串成功返回索引
  • includes()查询字符串返回布尔值
  • solit()分隔字符串返回一个数组【1,2,3,4】
  • search()查询字符串中的字节成功返回下标索引

操作数组的基本方法

  • array.isArray()返回布尔值确定它是不是数组
  • array.toString()把数组转换为字符串,每个元素以逗号,隔开'a,b,c'
  • array.join()把数组转换为字符串隔开的内容与join的参数有关如果没有参数默认以逗号隔开
  • array.push(1,2,3)向数组尾部插入1,2,3
  • array.pop()从数组尾部移除最后一项
  • [1,2,3].slice(1) = [2,3]移除数组中指定的内容
  • [a,b,c,d]splice(1,1,'g') = [g,b,c,d] splice(起始位置,删除的个数,替换的内容)

原型链

  • 就是javascript的继承机制,是指获取JavaScript对象的属性会顺着其_proto_的指向寻找,直至找到Object.prototype

作用域

  • 作用域的作用是一个函数内部的成员不会被外部访问,避免了环境污染
  • 内部成员可以依次先从函数内部向上查找需要访问的成员

this指向问题

在严格模式中this默认指向的是undefined 在普通函数的环境下this指向window 在箭头函数的函数环境下的this指向调用这个函数的对象

call/apply的异同点

call 改变另外一个函数成员的this指向 funa.call(funb,第二个参数是Funb的多个形参/成员) call在开发中的作用:当函数A的方基本法通用与函数B 且函数B有函数A没有的方法或者成员时这个用call/apply来继承函数A的功能 apply方法和call方法作用一样 不同点是pally的传参数量有限制只有两位 第一位是 被继承的目标FunA 第二位是FunA的形参成员必须是一个数组 [成员1,成员2,成员3,....]

节流/防抖

节流:不管这个事件触发多少次在第一次触发这个事件后每隔N秒才能再次触发这个事件 防抖:是触发间隔大于设置间隔的时间才会触发,所以每次在小于间隔设置的时间要清除定时器;

闭包

  • 优点:可以在函数内部私有化创建成员
  • 缺点:内存泄漏 占用性能
  • 闭包的形成:子级作用域的函数内部调用父级作用域函数内部的成员,当父级函数执行完毕javascript垃圾回收机制会回收所有执行完毕的成员时子级函数内部的成员还在调用父级函数内部的成员导致父级函数内部的成员无法被javascript自动回收机制回收。
  • 如何解决闭包问题:1 在写业务时不形成闭包 2 立即执行函数:立即执行 完毕回收

递归

递归的理解:逻辑循环/函数循环/函数自调用 列如当我们需要去查询一个N维数组中的某个成员是否存在时在函数内部判断形参的成员长度大于0时就把这个成员以实参的形式传入自己的形参函数直到找到这个查询的成员内容或者成员的子级成员长度为0

事件冒泡/事件捕获

事件冒泡的解决方法:通过已知的父级元素给子级元素添加事件 /vue中使用事件修饰符click.stop来阻止冒泡

对TypeScriot的理

跨域的发生:不同浏览器

同源策略:域名/端口/协议相同则是同源