美文网首页
js面试小结

js面试小结

作者: lvyweb | 来源:发表于2021-07-08 14:43 被阅读0次

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 秒中只执行一次函数。节流会稀释函数的执行频率。
具体实现(https://www.jianshu.com/p/5434415c19cb

正确匹配11位数字

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

http状态码

类别 原因
1xx Informational(信息性状态码) 接受的请求正在处理
2xx Success(成功状态码) 请求正常处理完毕
3xx Redirection(重定向状态码) 需要进行附加操作以完成请求
4xx Client Error(客户端错误状态码) 服务器无法处理请求
5xx Server 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 该状态码表明服务器暂时处于超负载或正在停机维护,现在无法处理请求

数组去重

https://segmentfault.com/a/1190000016418021

重排和重绘

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

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


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

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

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

伪类和伪元素

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

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

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

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

什么是跨域,如何实现跨域访问

定义:使用ajax获取数据的时候,如果当前界面的地址和所需要请求的服务器地址,协议,域名,端口号有一个不同
跨域是指不同域名之间相互访问
JavaScript同源策略的限制,A域名下的JavaScript无法操作B域名下的对象

  • 1)JSONP跨域:利用script脚本允许引用不同域下的js实现的,将回调函数带入服务器,返回函数调用。
  • 2)跨域资源共享(CORS)
    跨域资源资源共享(CORS)是一种网络浏览器的技术规范,它为Web服务定义了一种方式,允许网页从不同的域访问其资源。
    是在服务器返回数据之前加上一个响应头
    res.setHeader('Access-Control-Allow-Origin','*')
    浏览器得到数据时,会判断,Access-Control-Allow-Origin的值如果是*/localhost:8000,就把数据给xhr,如果不是就不给,并报错!

CORS和JSONP相比:

  1. JSONP只能实现GET请求,而CORS支持所有类型的HTTP请求
  2. 使用CORS,开发者可以使用普通的XMLHttpRequest发起请求和获得数据,比起JSONP有更好的错误处理。
  3. JSONP主要被老的服务器支持,它们往往不支持CORS,而绝大多数现代浏览器都已经支持了CORS。
  • 3)基于iframe的跨域解决方案
  • window.name
  • document.domin
  • location.hash
  • post message
  • 4)基于http proxy实现跨域请求
    nginx 反向代理

六个方面来缩短站点网页加载时间

1、图片优化
2、CDN 加速
3、缓存
4、压缩
5、简洁的代码
6、专用的主机或服务器

原型和原型链

(1)原型:

  • 所有引用类型都有一个proto(隐式原型)属性,属性值是一个普通的对象
  • 所有的函数都有一个prototype(原型)属性,属性值是一个普通的对象
  • 所有引用类型的proto属性指向它的构造函数的prototype

(2)原型链
当访问一个对象的某个属性时,会先在这个对象本身属性上查找,如果没有找到会去它的proto隐式原型上查找,即它的构造函数的prototype,如果还没有找到就会再在构造函数的prototype的proto中查找,这样一层一层向上查找就会形成一个链式结构,我们称为原型链。

强缓存和协商缓存

(1) 强缓存(本地缓存)
直接使用本地的缓存,不用跟服务器进行通信。
在HTTP1.0中,Cache-control响应头实现,其中max-age=xxx 表示缓存资源将在xxx秒后过期。

(2) 协商缓存
将资源一些相关返回信息返回服务器,让服务器判断浏览器是否能直接使用本地缓存,整个过程至少与服务器通信一次。
协商缓存,在HTTP1.0中第一次请求服务资源时通过服务器设置Last-Modified响应头,填入最后修改的事件,在之后的每次请求中都会在请求头中带上IF-Modified-Since字段,如果未更新就返回304,指导浏览器从本地缓存中读取。
(3)强缓存和协商缓存的区别总计:

  • 强缓存只有首次请求会跟服务器端通信,读取缓存资源时不用发送请求,返回200
  • 协商缓存总会与服务器交互,第一次是拿数据和E_tag的过程,之后每次凭E-tag询问是否更新,命中缓存就返回304
  • 二者之间最大的区别就是:强缓存只通信一次,协商缓存每次都通信询问

相关文章

  • js面试小结

    js的数据类型 基本数据类型:null undefined Number Boolean String引用数据类型...

  • js基础面试题

    面试题:延迟加载JS有哪些方式? 面试题:JS数据类型有哪些? 面试题:JS数据类型考题 考题一: 考题二: 面试...

  • js继承的实现

    下面是小结的js四种方式实现的继承

  • JS基础知识总结(W3C标准部分)

    前言 这是JS基本知识的第二篇,这篇小结主要是针对W3C标准展开。以下是前一篇小结和这篇的范围: JS 基础知识:...

  • js小结

    如果是循环的方式添加事件,推荐用命名函数 如果不是循环的方式添加事件,推荐使用匿名函数

  • js小结

    原生函数常用的原生函数String()Number()Boolean()Array()Object()Functi...

  • JS小结

    1、传参时,如果传的是一串数字,不加引号代表的是数字(会有位数限制,如身份证号会传不全),加引号代表的是字符串,没...

  • 面试小结

    最近一个月笔试面试了近10次了,总结一些面试问题: (咨询调查数据分析类/运营产品数据类/纯数据分析类):针对投的...

  • 面试小结

    在大家的印象里,我是个口才还不错的人。多年的主持和培训经历,帮我积累了一些当众发言的技巧,凭着这些技巧,我...

  • 面试小结

    面试真是一个不断受捶的过程,更难的是你又要不断受捶,又要马上痊愈,投入到下一场战斗。 回顾这几周参加的面试有:维信...

网友评论

      本文标题:js面试小结

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