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 不传参数返回 Infinity, Math.max 不传参数返回 -Infinity
5.浏览器工作原理
通过网络引擎获取到文档;
开始解析文档,在遇到脚本时立即执行脚本,文档停止解析,如果是外部脚本则等待资源加载并执行完成,外部脚本可通过加defer或者async告诉浏览器异步处理,这样不会打断解析;
布局,为每个节点分配一个应出现在屏幕上的确切坐标;
绘制,呈现引擎会遍历呈现树,由用户界面后端层将每个节点绘制出来;
显示,值得注意的是这一步并不会等到文档解析完成,会将部分已解析的文档尽快显示。
5.Promise promise
6.AJAX ajax
7.THIS this
8.继承 继承
9.执行上下文
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
变量声明,但是未赋值;调用函数时应提供参数,但是没有提供;对象没有赋值的属性;函数没有返回值