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相比:
- JSONP只能实现GET请求,而CORS支持所有类型的HTTP请求
- 使用CORS,开发者可以使用普通的XMLHttpRequest发起请求和获得数据,比起JSONP有更好的错误处理。
- 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
- 二者之间最大的区别就是:强缓存只通信一次,协商缓存每次都通信询问













网友评论