JavaScript面试题

  1. 列举常用的字符串方法
    1. indexOf(要查找的字符,开始索引) 查找某个字符串第一次出现的位置
      lastIndexOf(要查找的字符,开始索引) 查找某个子字符串最后一次出现的位置
      replace(被替换的内容,要替换的内容)  替换好的字符串
      substr(从哪个索引开始,截取多少个) 返回截取到的内容
      substring(从哪个索引开始,到哪个索引截止),包含开始索引,不包含结束索引;返回截取到的内容
      slice(起始索引,结束索引)  截取出来的字符串
      split(指定的切割符)  一个用指定切割符切割好的数组
      toLowerCase() 转成 小写字母
      toUpperCase() 转成 大写字母
      charAt() 是找到字符串中指定索引位置的内容返回
      trim() 去除空白内容以后的字符串

       

  2. 列举常用的数组方法
    1. join():用指定的分隔符将数组每一项拼接为字符串
      push() :向数组的末尾添加新元素
      pop():删除数组的最后一项
      shift():删除数组的第一项
      unshift():向数组首位添加新元素
      slice():按照条件查找出其中的部分元素
      splice():对数组进行增删改
      fill(): 方法能使用特定值填充数组中的一个或多个元素
      concat():用于连接两个或多个数组
      indexOf():检测当前值在数组中第一次出现的位置索引
      lastIndexOf():检测当前值在数组中最后一次出现的位置索引
      includes():判断一个数组是否包含一个指定的值
      sort():对数组的元素进行排序
      reverse():对数组进行倒序
      find():返回匹配的值
      findIndex():返回匹配位置的索引
      toLocaleString()、toString():将数组转换为字符串
      
      ES5新增的数组方法
      forEach():ES5 及以下循环遍历数组每一项,没有return返回值
      map():ES6 循环遍历数组每一项
      filter():“过滤”功能
      reduce() 汇总功能
      every():判断数组中每一项都是否满足条件
      some():判断数组中是否存在满足条件的项
      entries() 、keys() 、values():遍历数组
      

       

  3. js的数据类型有哪些
    1. js有7中数据类型
      基础数据类型:
          1、String类型,用于表示字符串;
          2、Number类型,用于表示数字;
          3、Boolean类型;
          4、Undefined类型;
          5、Null类型;
      引用数据类型:
          1、Array数组;
          2、Object类型。
      

        

  4. 什么是作用域链
    1. 在函数中如果在当前作用域中没有查到值,就会向上级作用域去查,直到查到全局作用域,这样一个查找过程形成的链条就叫做作用域链
      

        

  5. 什么是事件委托,应用场景,优缺点
    1. 事件委托也称为事件托管或事件代理,就是把目标节点的事件绑定到祖先节点上;它是利用事件冒泡原理,管理某一类型的所有事件,利用父元素来代表子元素的某一类型事件的处理方式
      

        

  6. 什么是深拷贝?什么是浅拷贝?如何实现深拷贝?
    1. 如何区分深拷贝与浅拷贝,简单点来说,就是假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝,拿人手短,如果B没变,那就是深拷贝,自食其力。
      

       

  7. 数组冒泡排序的原理
  8. 数组排序的方法
  9. 谈谈你对this的理解
  10. get请求和post请求的区别
  11. DOM常见的操作及API
  12.  let、const、var的区别 
  13.  从输入url到浏览器显示页面发生了什么
  14.  如何实现前端性能优化
  15. 什么是事件流,解决事件冒泡
  16. 什么是原型对象
    1. 所有的构造函数在初始化时,都会自动生成一个特殊的实例话对象,构造函数的prototype属性指向该对象,该对象称为原型对象,或prototype对象
      

       

  17.  什么是原型链
    1. 原型链:由一系列__proto__属性,串联起来的原型对象,称为原型链
      原型链的意义:实例化对象在访问属性和方法时,会先访问自身的属性和方法,如果自身不存在对应的属性和方法,则会自动通过__proto__属性在整个原型链上查找,只要找到对应的属性和方法,
      就能正确执行,如果原型链上没找到,则报错

        

  18. 前端性能优化可以从哪些方面?
    1. 1..loading
      2.骨架屏
      3.压缩 HTML 
      4.删除不必要的注释
      5.删除不必要的属性
      6.使用语义化标签
      7.减少iframe数量
      8.削减DOM数量和层级数量
      9.减少 HTTP 请求次数
      10.减少重排重绘
      11.javascript脚本放到页面底部
      12.将javascript和css从外部引入
      13.减少DOM操作
      14.节流与防抖
      15.合理的ajax恳求
      16.尽量少用@import
      17.避免!important,可以选择其他选择器
      18.CSS文件压缩
      19.CSS层级嵌套最好不要超过3层
      20.删除无用的css
      21.慎用*通配符
      22.小图片引入雪碧图。
      23.图片压缩
      24.图片懒加载
      25.采用svg图片或者字体图标
      26.Base64
      27.缓存加载器
      28.Hot update 热更新
      29.DNS预解析
      参考连接:https://blog.csdn.net/chaoPerson/article/details/130743570
      

        

  19. new一个实例化对象的四个阶段
    1. 1. 创建一个空的实例化对象
      2. 让构造函数中的this指向空的实例化对象
      3. 执行(调用)构造函数,从而创建实例化对象自身的属性和方法
      4. 返回实例化对象
      

        

  20. 什么是回流和重绘
    1. 回流指的是元素的尺寸,布局,位置发生变化,导致页面的布局需要重新计算
      重绘指的是元素的外观发生变化,但尺寸和布局不变,只需要重新绘制元素.
      回流必将引起重绘,而重绘不一定会引起回流。
      

        

  21. 常见HTTP状态码的含义
  22. 什么是防抖和节流,描述防抖的原理和节流的原理
    1. 本质上是优化高频率执行代码的一种手段;
      为了优化体验,需要对resize、scroll、keypress、mousemove 等事件进行调用次数的限制,对此我们就可以采用 防抖(debounce) 和 节流(throttle) 的方式来减少调用频率
      防抖: n 秒内只运行一次,若在 n 秒内重复触发,只有一次生效
      节流: n 秒后在执行该事件,若在 n 秒内被重复触发,则重新计时
      

        

  23. 什么是事件循环
  24. call、apply、bind的区别
  25. 什么是闭包,闭包的优缺点
  26. 简述js的垃圾回收机制
  27. 什么是内存泄露
  28. ES6新特性,并简述她们的作业
    1. let关键字,用于声明只在块级作用域起作用的变量。
      const关键字,用于声明一个常量。
      结构赋值,一种新的变量赋值方式。常用于交换变量值,提取函数返回值,设置默认值。
      Symbol数据类型,定义一个独一无二的值。
      Proxy代理,用于编写处理函数,来拦截目标对象的操作。
      for...of遍历,可遍历具有iterator 接口的数据结构。
      Set结构,存储不重复的成员值的集合。
      Map结构,键名可以是任何类型的键值对集合。
      Promise对象,更合理、规范地处理异步操作。
      Class类定义类和更简便地实现类的继承。
      

        

  29. 说一下promise
  30. 说一个async await
  31. promise.all 和 promise.race 的用法和区别
  32. promise的特点是什么?也就是三个状态
    1. promise一共有三个状态,分别是进行中,成功或者失败,如果成功的话通过resolve方法将正确结果返回出去,通过.then的方式接收,
      失败的话通过reject的方式将错误结果返回出去,通过.catch的方式接收,pending状态是进行中,一旦进行,状态就是不可逆的
  33. for-in和for-of的区别
  34. 说说var、let、const之间的区别
    1. 1、变量提升
      var声明的变量存在变量提升,即变量可以在声明之前调用,值为undefined
      let和const不存在变量提升,即它们所声明的变量一定要在声明后使用,否则报错
      
      2、暂时性死区
      var不存在暂时性死区。let和const存在暂时性死区,只有等到声明变量的那一行代码出现,才可以获取和使用该变量
      
      3、块级作用域
      var不存在块级作用域
      let和const存在块级作用域
      
      4、重复声明
      var允许重复声明变量
      let和const在同一作用域不允许重复声明变量
      
      5、修改声明的变量
      var和let可以
      const声明一个只读的常量。一旦声明,常量的值就不能改变
      
      6、使用
      能用const的情况尽量使用const,其他情况下大多数使用let,避免使用var
      

        

  35. 箭头函数和普通函数的区别
  36. 三种本地存储的区别
  37. 说说最近最流行的一些东西吧?常去哪些网站?
  38. 列举10条移动端兼容性问题
  39. 如何将最终的金额,专为","逗号分隔的形式
    1. function numberFormate(num) { // 数字格式化为x,xxx,xxx,xxx
          // 1. 将num专为数字类型
          num = parseFloat(num);
          // 2. 判断是否是一个数字
          if (!Number.isNaN(num)) {
              // 3. 将数字按照.进行分割(主要是针对浮点数)
              let str = Math.abs(num).toString().split('.');
              // 4. 整数部分按照3个一组,看可以分为几组
              const a = Math.ceil(str[0].length / 3);
              // 5. 不够3个一组的,自动补充0
              str[0] = str[0].padStart(a * 3, '0');
              const numArr = [];
              // 6. 将数字按照3个一组进行截取
              for (let i = 0; i < a; i++) {
                  numArr.push(str[0].substring(i * 3, (i + 1) * 3));
              }
              // console.log(numArr);
              // 7. 将数组中的第一个值中前面补充的0去除
              numArr[0] = parseInt(numArr[0]);
              // 8. 将数组中的数字按照逗号进行拼接,并且拼接上小数点后面的值
              const formateStr = numArr.join(',') + (str[1] ? '.' + str[1] : '');
              // 9. 判断初始值是正值还是负值,需不需要添加-
              return num < 0 ? "-" + formateStr : formateStr;
          } else {
              throw new TypeError("传入的参数必须是数字");
          }
      }
      console.log(numberFormate(1123456789.2234)); // 结果为1,123,456,789.2234
      
  40. 大文件的分割处理(大文件切片上传,断点续传)
  41. 前端常用的几种加密方法
  42. 前端常见的攻击手段及防御方法
  43. 用类的方式编写一个b继承a的方法,描述代码实现流程
  44. 了解Node么? Node的使用场景都有哪些?
  45. 对于前端自动化构建工具有了解吗,简单介绍下
  46. js的typeof返回哪些数据类型 

 

posted @ 2023-12-01 12:21  冉姑娘  阅读(148)  评论(0编辑  收藏  举报