小知识点

1.What is the result of this expression? (or multiple ones)

vara = {}, b =Object.prototype;[a.prototype=== b,Object.getPrototypeOf(a) === b]

A: [false, true]

B: [true, true]

C: [false, false]

D: other

原型链的题(总会有的),考查的__proto__和prototype的区别。首先要明确对象和构造函数的关系,对象在创建的时候,其__proto__会指向其构造函数的prototype属性

Object实际上是一个构造函数(typeof Object的结果为"function"),使用字面量创建对象和new Object创建对象是一样的,所以a.__proto__也就是Object.prototype,而Object.getPrototypeOf(a)与a.__proto__是一样的,所以第二个结果为true

而实例对象是没有prototype属性的,只有函数才有,所以a.prototype其实是undefined,第一个结果为false

2.What is the result of this expression? (or multiple ones)

"1 2 3".replace(/\d/g,parseInt)

A: "1 2 3"

B: "0 1 2"

C: "NaN 2 3"

D: "1 NaN 3"

String.prototype.replace、正则表达式的全局匹配和parseInt(又是parseInt...),可以根据题意看出来题目上漏了一个'\'

首先需要确定replace会传给parseInt哪些参数。举个栗子:

"1 2 3".replace(/\d/g,function(){    console.log(arguments);});//输出结果://["1",0,"1 2 3"]//["2",2,"1 2 3"]//["3",4,"1 2 3"]

一共三个:

1. match:正则表达式被匹配到的子字符串

2. offset:被匹配到的子字符串在原字符串中的位置

3. string:原字符串

3.What is the result of this expression? (or multiple ones)

varlowerCaseOnly =/^[a-z]+$/;[lowerCaseOnly.test(null), lowerCaseOnly.test()]

A: [true, false]

B: error

C: [true, true]

D: [false, true]

正则表达式的test方法会自动将参数转换为字符串,原式就变成了[lowerCaseOnly.test("null"), lowerCaseOnly.test("undefined")],结果都是真,所以选C

4.

var min = Math.min(), max = Math.max()

min < max

知识点:

Math/min

Math/max

有趣的是, Math.min 不传参数返回 Infinity, Math.max 不传参数返回 -Infinity

5.浏览器工作原理

通过网络引擎获取到文档;

开始解析文档,在遇到脚本时立即执行脚本,文档停止解析,如果是外部脚本则等待资源加载并执行完成,外部脚本可通过加defer或者async告诉浏览器异步处理,这样不会打断解析;

布局,为每个节点分配一个应出现在屏幕上的确切坐标;

绘制,呈现引擎会遍历呈现树,由用户界面后端层将每个节点绘制出来;

显示,值得注意的是这一步并不会等到文档解析完成,会将部分已解析的文档尽快显示。

5.Promise promise

6.AJAX ajax

7.THIS this

8.继承  继承

9.执行上下文

10.JS面向对象编程之:封装、继承、多态

11.原型 / 原型链

12.正则

13.一个页面从输入URL到页面加载显示完成,这个过程中都发生了什么?(流程说的越详细越好)

注:这道题胜在区分度高,知识点覆盖广,再不懂的人也能答出一些。高手可以根据自己擅长的领域自由发挥,从URL规范、HTTP协议、DNS、CDN、数据查询、浏览器流式解析、CSS规则构建、layout、paint、onload/domready、JS执行、JS API绑定等等;

//

详细版:

(1)浏览器会开启一个线程来处理这个请求,对 URL 分析判断,如果是 http 协议就按照 web 方式来处理;

(2)调用浏览器内核中的对应方法,比如 WebView 中的 loadUrl 方法;

(3)通过 DNS 解析获取网址的 IP 地址,设置 UA 等信息发出第二个 GET 请求;

(4)进行 HTTP 协议会话,客户端发送报头(请求报头);

(5)进入到 web 服务器上的 Web Server,如 Apache、Tomcat、Node.js 等服务器;

(6)进入部署好的后端应用,如 PHP、Java、JavaScript、Python 等,找到对应的请求处理;

(7)处理结束回馈报头,此处如果浏览器访问过,缓存上有对应资源,会与服务器最后修改事件对比,一致则返回304;

(8)浏览器开始下载 html 文档(响应报头,状态码200),同时使用缓存;

(9)文档树建立,根据标记请求所需指定 MIME 类型的文件(比如css、js),同时设置 cookie;

(10)页面开始渲染 DOM ,JS 根据 DOM API 操作 DOM ,执行事件绑定等,页面显示完成;

//

简洁版:

浏览器根据请求的 URL 交给 DNS 域名解析,找到真实 IP ,向服务器发起请求;

服务器交给后台处理完成后返回数据,浏览器接收文件(HTML、CSS、JS、image等);

浏览器对加载到的资源(HTML、CSS、JS等)进行语法解析,建立相应的内部数据结构(如 HTML 的 DOM );

载入解析到的资源文件,渲染页面,完成。

14. undefined和null的区别:

if条件中两者都表示false

null:typeof null => Object

表示没有对象,作为参数,便是参数不是对象,作为原型链的终点

undefined:typeof undefined => undefined

变量声明,但是未赋值;调用函数时应提供参数,但是没有提供;对象没有赋值的属性;函数没有返回值

推荐阅读更多精彩内容