美文网首页
面试系列(一)基础知识 持续更新...

面试系列(一)基础知识 持续更新...

作者: 撑船的摆渡人 | 来源:发表于2020-03-21 23:19 被阅读0次

JS中使用typeof 能得到哪些类型

typeof '1' ===> string
typeof 1 ===> number
typeof NaN ===> number
typeof true ===> boolean
typeof undefined ===> undefined
typeof console.log ===> function
typeof null ===> object
typeof [] ===> object
typeof {} ===> object
typeof new Object() ===> object
typeof Symbol() ===> symbol
  1. JS中使用typeof 能得到哪些类型
    1. string、number、boolean、undefined、function、object
    2. typeof 只能区分值类型
    3. 变量类型
      1. 值类型:string、number、boolean、undefined、null
      2. 引用类型 对象、数组、函数
  2. 何时用 === 何时用 ==
    1. === 值相等、类型也想等 ,== 可以进行类型转换。
      1. obje.a==null => obj.a === null || obj.a === undefined
    2. 变量计算
      1. 强制类型转换
        • 字符串拼接 10+'10' = '1010'
        • == 运算符 10 == '10'、 0 ==''、null == undefined
        • if 语句 if(10) {...} 、if(''){}
          • if中为false 的情况:0、NaN、null、undefined、''、false
        • 逻辑运算 (10 && 0) 、('' || '1')、(!10)、(!!10)
  3. JS中有哪些内置函数
    1. 数据封装类对象
      1. Object
      2. Array
      3. Boolean
      4. Number
      5. String
      6. Function
      7. Date
      8. RegExp
      9. Error
    2. 内置对象
      1. Math
      2. JSON
  4. JS变量按照存储方式区分为哪些类型,并描述其特点
    1. 值类型
    2. 引用类型
  5. 如何理解JSON
    1. 是一个JS对象
    2. JSON.stringify({a:1,b:2}) // 将对象转换成字符串
    3. JSON.parse('{"a":1,"b":2}') // 将字符串转换成对象
      1. 判断数组中是否包含某个对象
        1. JSON.stringify(data).indexOf(JSON.stringify(val)) !== -1; //true
      2. 判断对象或数组是否相等
        1. JSON.stringify(a) === JSON.stringify(b); //true
      3. localStorage/sessionStorage默认只能存储字符串
      4. 实现对象深拷贝
  6. 浏览器的渲染机制?
    浏览器的渲染机制一般分为以下几个步骤
    处理 HTML 并构建 DOM 树。
    处理 CSS 构建 CSSOM 树。
    将 DOM 与 CSSOM 合并成一个渲染树。
    根据渲染树来布局,计算每个节点的位置。
    调用 GPU 绘制,合成图层,显示在屏幕上。
  7. 描述一下重绘与回流?
    重绘(repaint): 当元素样式的改变不影响布局时,浏览器将使用重绘对元素进行更新,此时由于只需要UI层面的重新像素绘制,因此 损耗较少
    回流(reflow): 当元素的尺寸、结构或触发某些属性时,浏览器会重新渲染页面,称为回流。此时,浏览器需要重新经过计算,计算后还需要重新页面布局,因此是较重的操作。会触发回流的操作:
    页面初次渲染
    浏览器窗口大小改变
    元素尺寸、位置、内容发生改变
    元素字体大小变化
    添加或者删除可见的 dom 元素
    激活 CSS 伪类(例如::hover)
    查询某些属性或调用某些方法
    clientWidth、clientHeight、clientTop、clientLeft
    offsetWidth、offsetHeight、offsetTop、offsetLeft
    scrollWidth、scrollHeight、scrollTop、scrollLeft
    getComputedStyle()
    getBoundingClientRect()
    scrollTo()
    回流必定触发重绘,重绘不一定触发回流。重绘的开销较小,回流的代价较高。
  8. 你都做过哪些Vue的性能优化?
    编码阶段
    尽量减少data中的数据,data中的数据都会增加getter和setter,会收集对应的watcher
    如果需要使用v-for给每项元素绑定事件时使用事件代理
    SPA 页面采用keep-alive缓存组件
    在更多的情况下,使用v-if替代v-show
    key保证唯一
    使用路由懒加载、异步组件
    防抖、节流
    第三方模块按需导入
    长列表滚动到可视区域动态加载
    图片懒加载
    SEO优化
    预渲染
    服务端渲染SSR
    打包优化
    压缩代码
    Tree Shaking/Scope Hoisting
    使用cdn加载第三方模块
    多线程打包happypack
    splitChunks抽离公共文件
    sourceMap优化
    用户体验
    骨架屏
    PWA
    还可以使用缓存(客户端缓存、服务端缓存)优化、服务端开启gzip压缩等。
    (优化是个大工程,会涉及很多方面)
  1. 前端如何进行seo优化
    合理的title、description、keywords:搜索对着三项的权重逐个减小,title值强调重点即可;description把页面内容高度概括,不可过分堆砌关键词;keywords列举出重要关键词。
    语义化的HTML代码,符合W3C规范:语义化代码让搜索引擎容易理解网页
    重要内容HTML代码放在最前:搜索引擎抓取HTML顺序是从上到下,保证重要内容一定会被抓取
    重要内容不要用js输出:爬虫不会执行js获取内容
    少用iframe:搜索引擎不会抓取iframe中的内容
    非装饰性图片必须加alt
    提高网站速度:网站速度是搜索引擎排序的一个重要指标

  2. 1000-div问题
    一次性插入1000个div,如何优化插入的性能
    使用Fragment
    var fragment = document.createDocumentFragment();
    fragment.appendChild(elem);
    向1000个并排的div元素中,插入一个平级的div元素,如何优化插入的性能
    先display:none 然后插入 再display:block
    赋予key,然后使用virtual-dom,先render,然后diff,最后patch
    脱离文档流,用GPU去渲染,开启硬件加速

相关文章

网友评论

      本文标题:面试系列(一)基础知识 持续更新...

      本文链接:https://www.haomeiwen.com/subject/jjruyhtx.html