web前端面试

js

2020-03-09  本文已影响0人  Love大猪蹄子嘚MM

1、cookie、localStorage、sessionStorage的区别和使用?

cookie:是存储在本地的数据,有时候也用cookies,通常经过加密,应用最经典的就是判断注册用户是否已经登录过该网站。localStorage:仅在客户端保存(即浏览器),不参与和服务器的通信;没有时间限制,即使浏览器关闭,数据依然存在;

创建和访问localStorage:

1)、设置数据:

var forgetData = {phone:vm.phone};localStorage.setItem("forgetData",JSON.Stringfy(forgetData));    //forgetData是存储在localStorage里边的本地数据;JSON.Stringfy(forgetData)是将数据转化为字符串格式;

获取数据:

vm.forgetData=JSON.parse(localStorage.getItem("forgetData"));  //将对象转化为json;

2)、设置:localStorage.name ="zhao";

获取:localStorage.name    //zhaolocalStorage.setItem(key,value);//设置数据localStorage.getItem(key);//获取数据localStorage.removeItem(key);//删除单个数据localStorage.clear();//清除所有localStorage的数据

sessionStorage:当用户的浏览器窗口关闭时,数据会被清除;

共同点:都是保存在浏览器端,且同源的。

区别:

cookie数据始终在同源的http请求中携带9即使不需要),即cookie在浏览器和服务器之间来回传递;cookie数据还有路径的概念,可以限制cookie只属于某个路径下。存储大小限制也不同,cookie数据大小不能超过4K,同时因为每次http请求都会携带cookie,所以cookie只能保存很小的数据。

sessionStorage和localStorage不会自动把数据发给服务器,只在本地保存,虽然也有大小限制,但是要比cookie大得多,可以达到5M或者更大。

数据有效期不同,sessionStorage仅在当前浏览器窗口关闭前有效,不能持久保存;localStorage:始终有效,浏览器窗口关闭也一直保存;cookie:只在cookie设置的过期时间之前保存,即使浏览器窗口关闭。

作用域不同,sessionStorage在不同浏览器窗口的数据不能共享,即使是同一个页面;localStorage在所有的同源窗口中都是共享的;cookie也是在同源窗口中共享的,

2、如何实现浏览器多标签页之间的通信?

调用localStorage、cookie本地存储方式。

3、JavaScript的typeof返回类型有哪些?

Object(null和Array)、number、undefined、string、Boolean

4、类型转换

强制转换:parseInt();parseFloat();number();

5、ajax请求时get和post的区别?

get:从服务器上获取数据,传送数据量小,安全性低,请求会被缓存,缓存是针对URL进行缓存的,get请求参数直接加在URL地址后面,一种参数组合就会产生一种URL的缓存,重复的请求结果是相同的;

post:向服务器发送数据;传送数据量大,请求不会被缓存,参数封装在二进制的数据体中,服务器也不会记录参数,相对安全,所以涉及用户隐私的数据都要用post传送;

6、ajax请求时,如何解释json数据?

使用eval方法解析的时候,eval();不会去判断该字符串是否合法,而且json对象里的js方法也会被执行,这是非常危险的;推荐使用JSON.parse();JSON.parse();把字符串转化成json。

7、call和apply的区别?

共同点:

都可以用来代替另一个对象调用一个方法,将一个函数的对象上下文从初始的上下文改变为由thisObj指定的新对象。

另一种说法,都能够改变方法的执行上下文(执行环境),将一个对象的方法交给另一个对象来执行,并且是立即执行。

不同点:

apply();//最多只能有两个参数--新this对象和一个数组argArray,如果给该方法传递多个参数,则把参数都写进这个数组里边,当然,即使只有一个参数,也要写进数组里边。

call();//可以接收多个参数,第一个参数apply()一样,后面则是一串参数列表。

实际上,apply和call的功能是一样的,只是传入的参数列表的形式不同。

8、http常用状态码?

100Continue  继续,一般在发送post请求时,已发送了http header之后服务端将返回此信息,表示确认,之后发送具体参数信息

200OK   正常返回信息

201Created  请求成功并且服务器创建了新的资源

202Accepted  服务器已接受请求,但尚未处理

301Moved Permanently  请求的网页已永久移动到新位置

302Found  临时性重定向

303See Other  临时性重定向,且总是使用 GET 请求新的 URI

304Not Modified  自从上次请求后,请求的网页未修改过

400Bad Request  服务器无法理解请求的格式,客户端不应当尝试再次使用相同的内容发起请求

401Unauthorized  请求未授权

403Forbidden  禁止访问

404Not Found  找不到如何与 URI 相匹配的资源

500Internal Server Error  最常见的服务器端错误

503Service Unavailable 服务器端暂时无法处理请求(可能是过载或维护)。

9.你有哪些性能优化的方法?

(1) 减少http请求次数:CSS Sprites, JS、CSS源码压缩、图片大小控制合适;网页Gzip,CDN托管,data缓存 ,图片服务器。

(2) 前端模板 JS+数据,减少由于HTML标签导致的带宽浪费,前端用变量保存AJAX请求结果,每次操作本地变量,不用请求,减少请求次数

(3) 用innerHTML代替DOM操作,减少DOM操作次数,优化javascript性能。

(4) 当需要设置的样式很多时设置className而不是直接操作style。

(5) 少用全局变量、缓存DOM节点查找的结果。减少IO读取操作。

(6) 避免使用CSS Expression(css表达式)又称Dynamic properties(动态属性)。

(7) 图片预加载,将样式表放在顶部,将脚本放在底部  加上时间戳。

10.深拷贝和浅拷贝

基本类型指的是简单的数据段,引用类型指的是多个值构成的对象;varname ="John";// 基本类型值

varobj =newObject();obj.name ="John";

// obj 为引用类型值

在复制变量中,对于基本类型来说,两者互不影响,varnum =1;varnum1 = num;// num1 = 1;

varnum1 =3;// num还是1,不会变

浅拷贝和深拷贝的区别:

对于浅拷贝来说,对于一个数组(数组是一个对象),只要我们修改了一个拷贝数组,原数组也会跟着改变。

因为他们引用的是同一个地址的数据,拷贝的时候并没有给b数组创造独立的内存,只是把a数组指向数据的指针拷贝给了b;

而深拷贝就与其相反,将会给b数组创造独立的内存,并且将a数组的内容一一拷贝进来,两者互不影响。

实现深拷贝:

一:层级拷贝,用递归实现;

二:JSON解析varb =JSON.parse(JSON.stringify(a));

11.怎样阻止事件冒泡? 

阻止事件冒泡:e.stopPropagation()

取消默认是 :e.preventDefault()

12.原型的概念及作用。

原型prototype是函数对象的一个属性,它定义的是通过该构造函数构造出的对象的公共区域,通过该构造函数构造出的对象都可以访问它原型上的属性和方法,原型也是对象。

作用:原型可以实现属性和方法的共用

13.原型链的概念及作用。

构造函数构造出的对象都有一个__proto__(前后两个下滑线)的属性,它指向构造函数的prototype,即原型,对象访问一个自身没有的属性和方法时,就会去原型中找,如果原型也没有,由于原型也是对象,它也有自己原型,所以就会去原型的原型中找,一直找到Object的Prototype为止。null

作用:Js的继承就是通过原型链来实现的。

14.构造函数的概念及作用。

构造函数主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用。

作用: 构造函数相当于一个对象制造工厂,可以批量化创造相同类型的对象(键(key)同值(value)不同)

15.闭包的概念及作用。

当一个内层函数引用了外层函数的变量,而且内层函数又被抛出(比如return)被外部变量接收,就会形成闭包。

闭包的作用:封装变量不污染全局,私有化属性和方法,模块化开发

闭包危害:内存泄漏

清除闭包:接收的外部变量置为null

16.请求头、请求行、请求体、空行的内容及作用。

请求头:user-agent  、Cookie、Host、 Accept-Encoding、Accept-Language

请求行:请求方法、路径  和HTTP 协议版本号

请求体:请求包体不在 GET 方法中使用,而是在POST 方法中使用。POST 方法适用于需要客户填写表单的场合。与请求包体相关的最常使用的是包体类型 Content-Type 和包体长度 Content-Length;

空行:最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头;

17.spa 单页应用

单页Web应用(single page web application,SPA),就是只有一张Web页面的应用,是加载单个HTML 页面并在用户与应用程序交互时动态更新该页面的Web应用程序。

单页应用是指在浏览器中运行的应用,在使用期间页面不会重新加载。当点击导航时,通过哈希监听事件,如果哈希发生了变化,则改变哈希值:window.location.hash,来调用相应的js文件

spa 单页应用的好处:

1).良好的交互体验

2).良好的前后端工作分离模式

3).减轻服务器压力

4).共用一套后端程序代码

上一篇 下一篇

猜你喜欢

热点阅读