前端面试题答案收集

以下是我在准备面试过程中自己整合的一些笔记。没有顺序规则,主要是一些基础知识摘录


跨域问题的解决方式

跨域

  1. CORS头
    前端面试题答案收集

  2. jsonp
    前端面试题答案收集
    缺点:它只支持GET请求而不支持POST等其它类型的HTTP请求;它只支持跨域HTTP请求这种情况,不能解决不同域的两个页面之间如何进行JavaScript调用的问题

  3. document.domain
    前端面试题答案收集

如何让元素上下左右居中

居中
前端面试题答案收集

为什么overflow:hidden能包含浮动元素?

浮动
元素设置为浮动后则脱离文档流,不属于当前父元素的子元素
此时通过设置overflow:hidden能够使父元素变为一个新的BFC(默认只有body这个BFC)
BFC有以下属性:
前端面试题答案收集
所以能够把浮动元素也包进去
通过划分BFC还能用来清除margin 合并

原生 js 怎么发起 ajax 请求?

来源

前端面试题答案收集

前端面试题答案收集

一个 XMLHttpRequest 实例有多少种状态?

前端面试题答案收集

用 js 怎样实现一个类?

js 没有类,只能申明 构造函数

js的继承问题

阮一峰
阮一峰

  • js没有类,直接通过构造函数生成对象
  • 构造函数 即 函数体中 包含 this 的函数
  • 每个构造函数都有一个prototype属性,它的值是一个prototype对象,prototype对象中的所有属性在构造函数创建新对象时会自动继承
    在寻找方法时,现在本对象查找,若找不到则去原型链查找
  • 通过新建一个A对象赋给一个B对象的prototype,则相当于将A的所有方法挂到B上,就相当于继承

js 中怎么实现封装和多态?

通过继承就能实现多态呗

js闭包问题

阮一峰
前端面试题答案收集

js 的字符串类型有哪些方法?

chartat 获取指定位置字符,相当于下标
indexof 查找字符的位置
concat 字符串连接
slice = substring = substr (开始位置,结束位置)。返回子字符串
split()按字符分割
trim()生成副本,删除开始和结束空格
replace(原字符串,替换字符串),替换第一个匹配
replace (/正则/g,替换字符串)。替换所有

jquery 的常见方法

阮一峰
选择,链式操作,end回退
取值,赋值

正则表达式

Wikipedia
前端面试题答案收集

如何跨标签页通信?比如一个页面和它里面的 iframe 通信。

postMessage(信息,协议+主机+端口号)

接收方添加message监听事件

HTTP状态码

下面是常见的HTTP状态码:

  • 200 - 请求成功
  • 301 - 资源(网页等)被永久转移到其它URL
  • 302 - 资源临时移动
  • 304 - 未修改
  • 404 - 请求的资源(网页等)不存在
  • 500 - 内部服务器错误

抽象语法树 AST (不太清楚)

语法树

模版引擎

模版引擎

  • 传入 模版 和 数据 ,转化为 html,如handlebar
  • jade属于服务端

promise

es6

  • 封装一个异步操作,有pending,fulfilled,rejected三种状态
  • resolve(sth)表示一步操作成功,并将参数传给then
  • reject(sth)表示失败,将参数传给 then
  • promise一定义马上执行,then中的代码则等到所有同步代码执行完成后才会执行

可暂停的函数 generator

es6

  • 定义一个generator函数:function * func () {}
  • 调用 func(),返回一个遍历器对象,指向generator中的所有状态
  • 每次调用next,则从上个yield执行到下个yield或return,返回 value 和 done。 value是yield后语句的执行结果,done标示是否完成,当最后一个yield结束后即done

var 与 let

es6

var(es5): 分为全局变量或局部变量。以 function 来区分
let : 块级作用域,以大括号来区分

另外,for循环还有一个特别之处,就是设置循环变量的那部分是一个父作用域,而循环体内部是一个单独的子作用域。

const 不可变

如何及时捕获前端出现的异常

使用window.onError
使用ACCESS-control-alow-origin : * 解决跨域
使用AST

js 基本数据类型

数据类型

基本数据类型:Undefined,Null,Boolean,Number,String,Symbol
存放在栈中

引用数据类型:Object
变量标识符以及指向对象的指针存放在栈中
对象的内容存放在堆中

js 垃圾回收机制

垃圾回收

引用计数:根据引用,当对象零引用时回收。会出现循环引用的问题

标记清除法:设定一个root对象,从根开始查找所有不能获得的对象

bind

定义函数,绑定参数,返回值为函数。这个函数可以继续传参,不过改变了this
作为构造函数时,this则要被忽略了

call和apply的区别

  • apply:
    • 第一个参数改变this指向
    • 第二个参数是数组
  • call :
    • 第一个参数改变this指向
    • 第二个参数一个一个传入

this 和 that

阮一峰

stack overflow

this 是每个函数都会定义的对象,全局状态下,为window

因此在click时间中,假如新建一个函数或者什么,为了保留被点击的对象,则使用that = this

eventloop

event loop

DOM是什么?有什么API

DOM是页面的一个个节点,可以对其进行修改进而改变页面内容
在浏览器渲染机制中,浏览器解析HTML标签,构建DOM树
API:
getElementByTagName
getElementById