前端面试问题js汇总

1.javascript的typeof返回哪些数据类型

  Object number function boolean underfind

2,数组方法pop() push() unshift()shift()

  shift()Push()尾部添加 pop()尾部删除
  Unshift()头部添加 shift()头部删除

3,事件绑定和普通事件有什么区别?

  1.执行顺序不一样、
  2.参数不一样
  3.事件加不加on
  4.this指向问题

  普通添加事件(onclick)的方法不支持添加多个事件,最下面的事件会覆盖上面的,而事件绑定(addEventListener)方式添加事件可以添加多个。

4,IE和标准下有哪些兼容性的写法

  Var ev = ev || window.event
  document.documentElement.clientWidth || document.body.clientWidth
  Var target = ev.srcElement||ev.target

5,ajax请求的时候get 和post方式的区别

  get放在url后面,post 放在虚拟载体里面
  get请求有大小限制
  安全问题 (参考链接:https://zhuanlan.zhihu.com/p/22536382

6,什么是事件委托?

  利用事件冒泡的原理,让自己的所触发的事件,让他的父元素代替执行!

  1,预绑定在document上

  2,live可以对未生成的dom预先绑定事件

  事件解除绑定

  on---off
  live---die
  bind---unbind

7,添加 删除 替换 插入到某个接点的方法

  createDocumentFragment() //创建一个DOM片段
  createElement() //创建一个具体的元素
  createTextNode() //创建一个文本节点

  appendChild() //添加
  removeChild() //移除
  replaceChild() //替换
  insertBefore() //之前插入
 
  getElementsByTagName() //通过标签名称
  getElementsByName() //通过元素的Name属性的值
  getElementById() //通过元素Id,唯一性

8,javascript的本地对象,内置对象和宿主对象

  本地对象为array obj regexp等可以new实例化
  内置对象为gload Math 等不可以实例化的
  宿主为浏览器自带的document,window 等

9,window.onload 与document.ready的区别

  window.onload在dom文档加载完成和所有文件加载完后执行

  document在dom文档树加载完后执行。

10,javascript的同源策略

  一段脚本只能读取来自于同一来源的窗口和文档的属性,这里的同一来源指的是主机名、协议和端口号的组合

11,请描述一下cookies,sessionStorage和localStorage的区别

  sessionStorage用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问并且当会话结束后数据也随之销毁。因此    sessionStorage不是一种持久化的本地存储,仅仅是会话级别的存储。而localStorage用于持久化的本地存储,除非主动删除数据,否则数据是永远不会过期的。

web storage和cookie的区别

  Web Storage的概念和cookie相似,区别是它是为了更大容量存储设计的。Cookie的大小是受限的,并且每次你请求一个新的页面的时候Cookie都会被发送过去,这样无形中浪费了带宽,另外cookie还需要指定作用域,不可以跨域调用。
除此之外,Web Storage拥有setItem,getItem,removeItem,clear等方法,不像cookie需要前端开发者自己封装setCookie,getCookie。但是Cookie也是不可以或缺的:  

Cookie的作用是与服务器进行交互,作为HTTP规范的一部分而存在 ,而Web Storage仅仅是为了在本地“存储”数据而生。

12,跨域请求资源的方法有哪些?

  由于浏览器同源策略,凡是发送请求url的协议、域名、端口三者之间任意一与当前页面地址不同即为跨域(参考文档:http://www.jb51.net/article/98927.htm)

  1.JSONP:无法发送post请求,且请求成功与否不好判断,大部分是结合超时时间判断的。

  2.proxy代理:获取信任证书

  3.cors

  4.xdr:IE8、IE9提供的一种跨域解决方案,功能较弱只支持get跟post请求,而且对于协议不同的跨域是无能为力的

13,开发过程中遇到的内存泄露情况

  在url后面加随机数,避免每次都从缓存取数据,而能够从服务器端拿数据。

14,一次完整的HTTP事务是怎样的一个过程?

  基本流程:

  a. 域名解析

  b. 发起TCP的3次握手

  c. 建立TCP连接后发起http请求

  d. 服务器端响应http请求,浏览器得到html代码

  e. 浏览器解析html代码,并请求html代码中的资源

  f. 浏览器对页面进行渲染呈现给用户

15,javascript的垃圾回收机制?

  Javascript具有自动垃圾回收机制(GC:Garbage Collecation),也就是说,执行环境会负责管理代码执行过程中使用的内存。

  原理:垃圾收集器会定期(周期性)找出那些不在继续使用的变量,然后释放其内存。

  JavaScript垃圾回收的机制很简单:找出不再使用的变量,然后释放掉其占用的内存,但是这个过程不是实时的,因为其开销比较大,所以垃圾回收器会按照固定的时间间隔周期性的执行

  不再使用的变量也就是生命周期结束的变量,当然只可能是局部变量,全局变量的生命周期直至浏览器卸载页面才会结束。局部变量只在函数的执行过程中存在,而在这个过程中会为局部变量在栈或堆上分配相应的空间,以存储它们的值,然后在函数中使用这些变量,直至函数结束,而闭包中由于内部函数的原因,外部函数并不能算是结束。

16,https是如何加密的?

  https是在http的基础上多了一次协议ssl,该协议用来给传输的内容进行加密。

17,谈谈对mvc mvvm的理解?

  mvc:model(数据模型)  view(视图) controller(控制器)。controller作为model和view之间的通信者。

  MVC的通信是单向的:
    浏览器发送请求
    Contorller和Model交互获取数据
    Contorller调用View
    View渲染数据返回
更简单的表达式:V -> C-> M -> C -> V
 
MVVM(Model-View-ViewModel),是一种基于前端开发的架构模式。
  核心是提供对View 和 ViewModel 的双向数据绑定,View和Model之间并没有直接的联系,而是通过ViewModel进行交互,View的变动,自动反映在ViewModel上,反之亦然,这样就保证视图和数据的一致性。viewModel用于同步model和view。这样使得开发者只需要关注业务逻辑,不需要操作dom,不需要关注数据层面的改变。

18、什么叫优雅降级和渐进增强?

渐进增强 progressive enhancement:
针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验。

优雅降级 graceful degradation:
一开始就构建完整的功能,然后再针对低版本浏览器进行兼容。

区别:

a. 优雅降级是从复杂的现状开始,并试图减少用户体验的供给

b. 渐进增强则是从一个非常基础的,能够起作用的版本开始,并不断扩充,以适应未来环境的需要

c. 降级(功能衰减)意味着往回看;而渐进增强则意味着朝前看,同时保证其根基处于安全地带

19,写出几种IE6 BUG的解决方法

  1.双边距BUG float引起的 使用display
  2.3像素问题 使用float引起的 使用dislpay:inline -3px
  3.超链接hover 点击后失效 使用正确的书写顺序 link visited hover active
  4.Ie z-index问题 给父级添加position:relative
  5.Png 透明 使用js代码 可以改用gif图片。
  6.Min-height 最小高度 !Important 解决’
  7.select 在ie6下遮盖 使用iframe嵌套
  8.为什么没有办法定义1px左右的宽度容器(IE6默认的行高造成的,使用over:hidden,zoom:0.08 line-height:1px)

20,闭包是什么,有什么特性,对页面有什么影响?

  函数a的内部函数b,被函数a外部的一个变量引用的时候,就创建了一个闭包

  闭包的特性:

  ①.封闭性:外界无法访问闭包内部的数据,如果在闭包内声明变量,外界是无法访问的,除非闭包主动向外界提供访问接口;
  ②.持久性:一般的函数,调用完毕之后,系统自动注销函数,而对于闭包来说,在外部函数被调用之后,闭包结构依然保存在
  系统中,闭包中的数据依然存在,从而实现对数据的持久使用。

  优点:

  ① 减少全局变量。

  ② 减少传递函数的参数量

  ③ 封装;


    缺点:
   使用闭包会占有内存资源,过多的使用闭包会导致内存溢出等.

原文地址:https://www.cnblogs.com/shmily-code/p/7247728.html