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
- JS中使用typeof 能得到哪些类型
- string、number、boolean、undefined、function、object
- typeof 只能区分值类型
- 变量类型
- 值类型:string、number、boolean、undefined、null
- 引用类型 对象、数组、函数
- 何时用 === 何时用 ==
- === 值相等、类型也想等 ,== 可以进行类型转换。
- obje.a==null => obj.a === null || obj.a === undefined
- 变量计算
- 强制类型转换
- 字符串拼接 10+'10' = '1010'
- == 运算符 10 == '10'、 0 ==''、null == undefined
- if 语句 if(10) {...} 、if(''){}
- if中为false 的情况:0、NaN、null、undefined、''、false
- 逻辑运算 (10 && 0) 、('' || '1')、(!10)、(!!10)
- 强制类型转换
- === 值相等、类型也想等 ,== 可以进行类型转换。
- JS中有哪些内置函数
- 数据封装类对象
- Object
- Array
- Boolean
- Number
- String
- Function
- Date
- RegExp
- Error
- 内置对象
- Math
- JSON
- 数据封装类对象
- JS变量按照存储方式区分为哪些类型,并描述其特点
- 值类型
- 引用类型
- 如何理解JSON
- 是一个JS对象
- JSON.stringify({a:1,b:2}) // 将对象转换成字符串
- JSON.parse('{"a":1,"b":2}') // 将字符串转换成对象
- 判断数组中是否包含某个对象
- JSON.stringify(data).indexOf(JSON.stringify(val)) !== -1; //true
- 判断对象或数组是否相等
- JSON.stringify(a) === JSON.stringify(b); //true
- localStorage/sessionStorage默认只能存储字符串
- 实现对象深拷贝
- 判断数组中是否包含某个对象
- 浏览器的渲染机制?
浏览器的渲染机制一般分为以下几个步骤
处理 HTML 并构建 DOM 树。
处理 CSS 构建 CSSOM 树。
将 DOM 与 CSSOM 合并成一个渲染树。
根据渲染树来布局,计算每个节点的位置。
调用 GPU 绘制,合成图层,显示在屏幕上。 - 描述一下重绘与回流?
重绘(repaint): 当元素样式的改变不影响布局时,浏览器将使用重绘对元素进行更新,此时由于只需要UI层面的重新像素绘制,因此 损耗较少
回流(reflow): 当元素的尺寸、结构或触发某些属性时,浏览器会重新渲染页面,称为回流。此时,浏览器需要重新经过计算,计算后还需要重新页面布局,因此是较重的操作。会触发回流的操作:
页面初次渲染
浏览器窗口大小改变
元素尺寸、位置、内容发生改变
元素字体大小变化
添加或者删除可见的 dom 元素
激活 CSS 伪类(例如::hover)
查询某些属性或调用某些方法
clientWidth、clientHeight、clientTop、clientLeft
offsetWidth、offsetHeight、offsetTop、offsetLeft
scrollWidth、scrollHeight、scrollTop、scrollLeft
getComputedStyle()
getBoundingClientRect()
scrollTo()
回流必定触发重绘,重绘不一定触发回流。重绘的开销较小,回流的代价较高。 - 你都做过哪些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压缩等。
(优化是个大工程,会涉及很多方面)
-
前端如何进行seo优化
合理的title、description、keywords:搜索对着三项的权重逐个减小,title值强调重点即可;description把页面内容高度概括,不可过分堆砌关键词;keywords列举出重要关键词。
语义化的HTML代码,符合W3C规范:语义化代码让搜索引擎容易理解网页
重要内容HTML代码放在最前:搜索引擎抓取HTML顺序是从上到下,保证重要内容一定会被抓取
重要内容不要用js输出:爬虫不会执行js获取内容
少用iframe:搜索引擎不会抓取iframe中的内容
非装饰性图片必须加alt
提高网站速度:网站速度是搜索引擎排序的一个重要指标 -
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去渲染,开启硬件加速
网友评论