js面试小结

312 阅读5分钟

js的数据类型

基本数据类型:null undefined Number Boolean String 引用数据类型:object es6新增的数据类型 symbol

null是对象吗?为什么?

null不是对象。虽然typeof null 会输出"object",但是这只是JS存在的一个bug,在JS的最初版本中使用的是32位系统,为了性能考虑使用低位存储变量的类型信息,000开头代表是对象然而null

检测数组的方法

  • typeof 检测数组的时候会返回"object" ,所以不能用typeof检测数组
var  arr= [1,2,3,4]
typeof  arr//"object" 
  • instanceof 运算符 用于检测构造函数的prototype属性是否出现在某个实例对象的原型链上
var  arr= [1,2,3,4]
arr instanceof Array   //true
  • Array.isArray() ECMAScript新增了 Array.isArray()方法,这个方法的目的是最终确定某个值到底是不是数组,而不管它是哪个全局执行环境中创建的。
var  arr= [1,2,3,4]
Array.isArray (arr)  //true
  • Object.prototype.toString
function isArray(arr) {
  return Object.prototype.toString.call(arr) === '[object Array]'
}

什么是闭包?

红宝书第三版P178页 定义闭包: 闭包是指有权访问另一个函数作用域中的变量的函数 MDN对闭包的定义:闭包是指那些能够访问自由变量的函数。(其中自由变量,指在函数中使用的,但既不是函数参数arguments也不是函数的局部变量,其实就是另外一个函数作用域中的变量)

常见的content-type的类型有哪些?

text/plain         文本类型
text/css          css类型
text/html          html类型
application/x-javascript   js类型
application/json      json类型
image/png jpg gif      image/*
(/.+.(png|jpg|gif)$/.test(pathname)) 匹配到图片

防抖与节流的区别

1)防抖(debounce) 所谓防抖,就是指触发事件后在 n 秒内函数只能执行一次,如果在 n 秒内又触发了事件,则会重新计算函数执行时间。
2)节流(throttle) 所谓节流,就是指连续触发事件但是在 n 秒中只执行一次函数。节流会稀释函数的执行频率。

模块化的区别

正确匹配11位数字

/^1\d{10}$/ ^是以开头的 \d是数字 10 表示10位

http状态码

类别原因
1xxInformational(信息性状态码)接受的请求正在处理
2xxSuccess(成功状态码)请求正常处理完毕
3xxRedirection(重定向状态码)需要进行附加操作以完成请求
4xxClient Error(客户端错误状态码)服务器无法处理请求
5xxServer Error(服务器错误状态码)服务器处理请求出错
1) 2XX——表明请求被正常处理了
状态码原因
--------
200 ok请求正常处理
204 No Content请求处理成功,但没有任何资源可以返回给客户端
206 Partial Content是对资源某一部分请求
2)3xx--表明浏览器需要执行某些特殊的处理以正确处理请求
状态码原因
--------
301资源的url已经更新。永久重定向
302资源的URI已临时定位到其他位置了。临时重定向

3)4xx--表明客户端是发生错误的原因所在

状态码原因
400 Bad Request服务器无法理解客户端发送的请求
401 Unauthorized该状态码表示发送的请求需要有通过HTTP认证(BASIC认证,DIGEST认证)的认证信息。
403 Forbidden不允许访问那个资源
404 Not Found服务器上没有请求的资源
4)5XX——服务器本身发生错误
状态码原因
--------
500 Internal Server Error该状态码表明服务器端在执行请求时发生了错误
503 Service Unavailable该状态码表明服务器暂时处于超负载或正在停机维护,现在无法处理请求

数组去重

segmentfault.com/a/119000001…
www.zhihu.com/

重排和重绘

重绘(repaint或redraw):当盒子的位置、大小以及其他属性,例如颜色、字体大小等都确定下来之后,浏览器便把这些原色都按照各自的特性绘制一遍,将内容呈现在页面上。重绘是指一个元素外观的改变所触发的浏览器行为,浏览器会根据元素的新属性重新绘制,使元素呈现新的外观。

触发重绘的条件:改变元素外观属性。如:color,background-color等。


重排(重构/回流/reflow):当渲染树中的一部分(或全部)因为元素的规模尺寸,布局,隐藏等改变而需要重新构建, 这就称为回流(reflow)。每个页面至少需要一次回流,就是在页面第一次加载的时候。

重绘和重排的关系:在回流的时候,浏览器会使渲染树中受到影响的部分失效,并重新构造这部分渲染树,完成回流后,浏览器会重新绘制受影响的部分到屏幕中,该过程称为重绘。

重排必定会引发重绘,但重绘不一定会引发重排。

伪类和伪元素

伪类:伪类相当于一个状态开关,需要手动触发,触发开关时修改元素样式达到一个特殊的动态效果 伪类 :link :hover

伪类:存在DOM文档中,(无标签,找不到, 只有符合触发条件时才能看到 ), 逻辑上存在但在文档树中却无须标识的“幽灵”分类。

伪元素:伪元素可以比作一个假的元素,但不存在与dom树中,通常用来向元素添加小图标、清除浮动影响等 ::before ::after
伪元素:不存在在DOM文档中,是虚拟的元素,是创建新元素。 这个新元素(伪元素) 是某个元素的子元素,这个子元素虽然在逻辑上存在,但却并不实际存在于文档树中.

伪类和伪元素的根本:是否创造了新的元素, 这个新创造的元素就叫 "伪无素" 。