前端经典面试题(一)

字数 1833阅读 42

1、null和undefined的区别?

null是一个表示”无”的对象,转为数值时为0;undefined是一个表示”无”的原始值,转为数值时为NaN。当声明的变量还未被初始化时,变量的默认值为undefined。

null用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象。
undefined表示”缺少值”,就是此处应该有一个值,但是还没有定义。典型用法是:
(1)变量被声明了,但没有赋值时,就等于undefined。
(2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。
(3)对象没有赋值的属性,该属性的值为undefined。
(4)函数没有返回值时,默认返回undefined。

null表示”没有对象”,即该处不应该有值。典型用法是:
(1) 作为函数的参数,表示该函数的参数不是对象。
(2)作为对象原型链的终点。
null是表示空对象的指针,undefined是表示未经初始化的变量;

var age;
alert(age); //undefined
alert(typeof undefined); //undefined
alert(typeof null); //object
alert(null == undefined) //true
alert(null === undefined) //false

2、HTTP状态码

100 Continue继续,一般在发送post请求时,已发送了http header之后服务端将返回此信息,表示确认,之后发送具体参数信息
200 OK 正常返回信息
201 Created请求成功并且服务器创建了新的资源
202 Accepted服务器已接受请求,但尚未处理
301 Moved Permanently请求的网页已永久移动到新位置。
302 Found 临时性重定向。
303 See Other临时性重定向,且总是使用 GET 请求新的 URL。
304 Not Modified自从上次请求后,请求的网页未修改过。
400 Bad Request服务器无法理解请求的格式,客户端不应当尝试再次使用相同的内容发起请求。
401 Unauthorized 请求未授权。
403 Forbidden 禁止访问。
404 Not Found 找不到与URL 相匹配的资源。
500 Internal Server Error 最常见的服务器端错误。
503 Service Unavailable服务器端暂时无法处理请求(可能是过载或维护)。

3、GET和POST的区别,何时使用POST?

GET:一般用于信息获取,使用URL传递参数,对所发送信息的数量也有限制,一般在2000个字符
POST:一般用于修改服务器上的资源,对所发送的信息没有限制。
GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值,也就是说Get是通过地址栏来传值,而Post是通过提交表单来传值。

然而,在以下情况中,请使用 POST 请求:
无法使用缓存文件(更新服务器上的文件或数据库)
向服务器发送大量数据(POST 没有数据量限制)
发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠

4、常见的浏览器内核有哪些?

常见的浏览器内核有Trident、Webkit、Presto、Gecko。
Trident: IE、360、The World、搜狗浏览器等;
Webkit: Safari、Google Chrome;
Presto: Opera7及以上;
Gecko: Netscape6及以上版本,Firefox。

5、实现继承的六种方法?

1、原型链继承。其基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法;
2、借用构造函数。它的思想是在子类型构造函数的内部调用超类型构造函数。
3、组合继承。将原型链和借用构造函数的技术组合到一块儿,从而发挥二者之长的一种继承模式。使用原型链实现对原型属性和方法的继承,而通过构造函数来实现对实例属性的继承。
4、原型式继承。借助原型可以基于已有的对象创建新对象,同时还不必因此创建自定义类型。

function object(o) {
    function F() {};
    F.prototype = o;
    return new F();
}

5、寄生式继承
创建一个仅用于封装继承过程的函数,该函数在内部以某种方式来增强对象,最后像真地是它做了所有工作一样返回对象。

function createAnother(original) {
    var clone = object(original);   //通过调用函数创建一个新对象
    clone.sayHi = function() {      //以某种方式来增强这个对象
        alert("hi");
    };
    return clone;                          //返回这个对象
}

使用寄生式继承会由于函数不能复用而降低效率。

6、寄生组合式继承
通过借用构造函数来继承属性,通过原型链的混成形式来继承方法。

function inheritPrototype(subType, superType) {
    var prototype = object(superType.prototype);   //创建对象
    prototype.constructor = subType;                     //增强对象
    subType.prototype = prototype;                        //指定对象
}

寄生组合式继承是引用类型最理想的继承方式。

6、说一说常见的请求头和响应头都有什么呢?

  1. 请求(客户端->服务端[request])
    GET(请求的方式) /newcoder/hello.html(请求的目标资源) HTTP/1.1(请求采用的协议和版本号)
    Accept: /(客户端能接收的资源类型)
    Accept-Language: en-us(客户端接收的语言类型)
    Connection: Keep-Alive(维护客户端和服务端的连接关系)
    Host: localhost:8080(连接的目标主机和端口号)
    Referer: http://localhost/links.asp(告诉服务器我来自于哪里)
    User-Agent: Mozilla/4.0(客户端版本号的名字)
    Accept-Encoding: gzip, deflate(客户端能接收的压缩数据的类型)
    If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT(缓存时间)
    Cookie(客户端暂存服务端的信息)
    Date: Tue, 11 Jul 2000 18:23:51 GMT(客户端请求服务端的时间)

  2. 响应(服务端->客户端[response])
    HTTP/1.1(响应采用的协议和版本号) 200(状态码) OK(描述信息)
    Location: http://www.baidu.com(服务端需要客户端访问的页面路径)
    Server:apache tomcat(服务端的Web服务端名)
    Content-Encoding: gzip(服务端能够发送压缩编码类型)
    Content-Length: 80(服务端发送的压缩数据的长度)
    Content-Language: zh-cn(服务端发送的语言类型)
    Content-Type: text/html; charset=GB2312(服务端发送的类型及采用的编码方式)
    Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT(服务端对该资源最后修改的时间)
    Refresh: 1;url=http://www.it315.org(服务端要求客户端1秒钟后,刷新,然后访问指定的页面路径)
    Content-Disposition: attachment; filename=aaa.zip(服务端要求客户端以下载文件的方式打开该文件)
    Transfer-Encoding: chunked(分块传递数据到客户端)
    Set-Cookie:SS=Q0=5Lb_nQ; path=/search(服务端发送到客户端的暂存数据)
    Expires: -1//3种(服务端禁止客户端缓存页面数据)
    Cache-Control: no-cache(服务端禁止客户端缓存页面数据)
    Pragma: no-cache(服务端禁止客户端缓存页面数据)
    Connection: close(1.0)/(1.1)Keep-Alive(维护客户端和服务端的连接关系)
    Date: Tue, 11 Jul 2000 18:23:51 GMT(服务端响应客户端的时间)

推荐阅读更多精彩内容