前端面试题总结(持续更新。。)

HTML部分
  1. DOCTYPE的作用?标准模式和兼容模式各有什么区别?
    告知浏览器的解析器用说明文档标准来解析这个文档;如果在文档开始处没有发现文档类型声明或者格式不正确将会导致浏览器开启兼容模式。
    标准模式以该浏览器支持的最高标准运行;兼容模式以一种宽松的向后兼容的方式显示。

  2. 页面导入样式时,使用link标签和@import标签有什么区别?
    ①link标签属于html标签,而@import是css提供的。②页面被加载时,link会被同时加载,而@import引用的css会等到页面被加载完在加载。③@import只在ie5以上才能识别,而link是html标签,无兼容问题。④link方式的样式权重高于@import的权重。

  3. html5新的表单元素
    datalist、keygen、output

JS部分
  1. js的数据类型
    5种基本数据类型:Undefined、Null、Boolean、Number、String
    1种复杂数据类型:Object

  2. js有几种类型的值?
    两种。
    栈:基本数据类型
    堆:引用数据类型

  3. 关于this对象
    ①this总是指向函数的直接调用者
    ②如果有new关键字,this指向触发这个事件的对象,但是,IE中的attachEvent的this总是指向全局对象window

  4. eval()?
    eval()方法就像是一个完整的ECMAScript解析器,能把对应的字符串解析成js代码并运行。

  5. 事件?IE和Netscape的事件机制有什么区别?
    IE:事件冒泡
    Netscape:事件捕获
    DOM事件流:事件捕获阶段-处于目标阶段-事件冒泡阶段(ie8及更早版本不支持DOM事件流)

  6. null与undefined的区别?
    在使用var声明变量但为对其初始化时,这个变量就是undefined。
    null值表示的是一个空对象的指针。
    undefined派生自null,因此它们两者之间相等(==),但是不全等(===)。

  7. 闭包?
    闭包是指有权访问另一个函数作用域中的变量的函数。创建闭包的常见方式就是在一个函数内部创建另一个函数。利用闭包可以突破作用域链,将函数内部的变量和方法传递到外部。
    特性:
    ①函数内嵌套函数。②内部函数可以引用外层的参数和变量。③参数和变量不会被垃圾回收机制回收。

  8. javascript代码中的“use strict”是什么意思?
    严格模式是为javascript定义了一种不同的解析与执行模型,在严格模式下,浏览器一些不确定的行为将得到处理,而且对某些不安全的操作将抛出错误。

  9. 6个falsy值
    空字符串、null、undefined、数字0、数字NaN、布尔值false

  10. new操作符的工作原理?
    ①新建了一个对象
    ②设置原型链(instance.proto = F.prototype)
    ③让构造函数(F)中的this指向这个实例(instance),执行构造函数。
    ④判断构造函数的返回值类型
        如果是值类型,就丢弃它,还是返回instance
         如果是引用类型,就返回这个引用类型的对象,替换到instance

  11. js异步编程的四种方法
    ①回调函数 ②事件监听 ③发布/订阅 ④promise对象

  12. 原型链的构建?
    原型链的构建是通过将一个类型的实例赋值给另一个构造函数的原型实现的

  13. 浏览器内核(呈现引擎)
    Trident:IE
    Gecko:Firefox
    Webkit:Safari、Chrome
    Presto:Opera

  14. HTTP状态码
    200:成功
    304:表示请求的资源并没有被修改,可以直接使用浏览器缓存的版本
    404:找不到与URI相匹配的资源

  15. 数组求和

function sum(arr) {
  var len = arr.length;
  if(len == 0) {
    return 0;
  }else if(len == 1) {
    return arr[0]
  }else {
    return arr[0] + sum(arr.slice(1));
  }
}
CSS部分
  1. css部分选择器的特殊性
    id值:0,1,0,0
    类属性值/属性选择器/伪类:0,0,1,0
    元素和伪元素:0,0,0,1

  2. 为什么要初始化css样式?
    兼容浏览器。如果没初始化css样式往往会出现浏览器之间的页面显示差异。

上一篇:函数声明提升与变量提升


下一篇:underscore.js源码解析2