一、[单选题] 有如下 ES6 代码 javascript
function * gen() { yield 1; yield 2; yield 3; }
下面选项描述正确的是哪一个? css
A.gen()执行后返回 2html
B.gen()执行后返回 undefined前端
C.gen()执行后返回一个 Generator 对象html5
D.gen()执行后返回 1java
答案:Cnode
提示:这是 ES6 的新 feature, function 后面带 * 的叫作 generator function。函数运行时, 返回一个迭代器。 web
二、[不定项选择题] 语句 var arr=[a,b,c,d];执行后,数组 arr 中每项都是一个整数,下面获得其中最大整数语 句正确的是哪几项? ajax
A.Math.max(arr)数据库
B.Math.max(arr[0], arr[1], arr[2], arr[3])
C.Math.max.call(Math, arr[0], arr[1], arr[2], arr[3])
D.Math.max.apply(Math,arr)
答案:B C D
提示: A 选项错误
由于函数 Math.max(x);的参数是 Number 类型,可使小数,整数,正数,负数或者是 0.若是不是上面所述类型就会返回 NaN.
三、[问答题] 写一个 traverse 函数,输出全部页面宽度和高度大于 50 像素的节点。
<script language="javascript"> function traverse() { var arr = []; var elements = []; if (document.all) { elements = document.all; } else { elements = document.getElementsByTagName("*"); } for (var i = 0; i < elements.length; i++) { var ele = elements[i]; // width 返回的是字符串 offsetWidth 返回的是带边框的 Number 型的数字 var width = parseFloat(ele.style.width) || ele.offsetWidth; var height = parseFloat(ele.style.height) || ele.offsetHeight; if (width > 50 && height > 50) { arr.push(elements[i].tagName); } } return arr; } window.onload = function () { console.log(traverse()); console.log("a"); console.log('a'); } </script>
四、[问答题] 请写一个表格以及对应的 CSS,使表格奇数行为白色背景,偶数行为灰色背景,鼠标移 上去时为黄色背景。
<table> <tr><td>第一行</td></tr> <tr><td>第二行</td></tr> <tr><td>第三行</td></tr> <tr><td>第四行</td></tr> <tr><td>第五行</td></tr> </table> table tr:nth-child(odd){ background-color: white; } table tr:nth-child(even){ background-color: gray; } table tr:hover{ background-color: yellow; }
五、[问答题] 写一个求和的函数 sum,达到下面的效果
function sum() { var nResult = 0; for (var i = 0, l = arguments.length; i < l; i++) { nResult += window.parseFloat(arguments[i]) || 0; } return nResult.toFixed(3) * 1000 / 1000; }
六、[填空题] 删除给定数组中的第二项和第三项,而且在获得的新的数组中第二项后面添加一个新的 值:
var arr1 = ['a','b','c','d','e'];
var arr2 = arr1. 1 ( 2 , 3 ,'newvalue')
var arr1 = ['a','b','c','d','e']; var arr2 = arr1.splice( 1,2 ,'newvalue') console.log(arr1);
七、[填空题] 在空白处填入适当的代码使输出结果成立:
function showMoney() { 1 }; var personA = new Object; var personB = new Object; personA.money = "100"; personB.money = "150"; personA.showMoney = showMoney; personB.showMoney = showMoney; // 输出结果: personA.showMoney(); //"100" personB.showMoney(); //"150"
答案: return this.money
八、[填空题] 使用 for in 循环数组中的元素会枚举原型链上的全部属性,过滤这些属性的方式是使 用 ? 函数
hasOwnProperty
九、[问答题] 请实现一个 fibonacci 函数,要求其参数和返回值以下所示:
/** * @desc: fibonacci * @param: count {Number} * @return: result {Number} * 第 count 个 fibonacci 值,计数从 0 开始 * fibonacci 数列为:[1, 1, 2, 3, 5, 8, 13, 21, 34 „] * 则 getNthFibonacci(0)返回值为 1 * 则 getNthFibonacci(4)返回值为 5 */ function getNthFibonacci(count) { if (count <= 1) { return 1; } return getNthFibonacci(count - 1) + getNthFibonacci(count - 2); }
十、[填空题]
输出对象中值大于 2 的 key 的数组
var data = {a: 1, b: 2, c: 3, d: 4};
Object.keys(data).filter(function(x) { return ? ;})
期待输出:[“c”,”d”]
答案: data[x] > 2
十一、[填空题] 填写内容让下面代码支持 a.name = “name1”; b.name = “name2”;
function obj(name) { if(name){ this.name = name } return this } obj.prototype.name = "name2"; var a = obj("name1"); var b = new obj;
十二、JavaScript语言特性中,有不少方面和咱们接触的其余编程语言不太同样,好比说,JavaScript语言实现继承机制的核心就是 《prototype》,而不是Java语言那样的类式继承。JavaScript解析引擎在读取一个 Object 的属性的值时,有沿着《原型链》向上寻找,若是最终没有找到,则该属性值为《undefined》;若是最终找到该属性的值,则返回结果。与这个过程不一样的是,当JavaScript解析引擎执行“给一个Object的某个属性赋值”的时候,若是当前Object存在该属性,则改写该属性的值,若是当前的Object自己并不存在该属性,则赋值该属性的值。
1三、[单选题] 下面有关 html 的描述,不推荐的是?
A.在页面顶部添加 doctype 声明;
B.在 </head> „ <body> 中间插入 HTML 代码;
C.避免使用 <font> 标签;
D.使用 <table> 元素展示学生成绩表等数据。
答案:B
1四、[单选题] 下面关于 CSS 布局的描述,不正确的是?
A.块级元素实际占用的宽度与它的 width 属性有关;
B.块级元素实际占用的宽度与它的 border 属性有关;
C.块级元素实际占用的宽度与它的 padding 属性有关;
D.块级元素实际占用的宽度与它的 background 属性有关。
答案:D
15:、[单选题]下列事件哪一个不是由鼠标触发的事件()
A.click
B.contextmenu
C.mouseout
D.keydown
答案:D
1六、[问答题] 请说说 cache-control 是怎么回事?
网页的缓存是有 HTTP 消息头中的 “Cache-control” 来控制的,常见的取值有 private 、no-cache、max-age、must-revalidate 等,默认为 private
Expires 头部字段提供一个日期和时间,响应在该日期和时间后被认为失效。容许客户端在这个时间以前不去检查(发请求),等同 max-age 的效果。可是若是同时存在,则被 Cache-Control 的 max-age 覆盖
Expires = "Expires" : "HTTP-date"
例如: Expires: Thu,01 Dec 1994 16:00:00 GMT (必须是GMT格式)
若是把它设置为-1,则表示当即过时
Expires 和 max-age 均可以用来指定文档的过时时间,可是两者有一些细微差异
1.Expires 在 HTTP/1.0 中已经定义,Cache-Control:max-age 在HTTP/1.1中才有定义,为了向下兼容,仅使用 max-age不够。
2.Expires 指定一个绝对的过时时间(GMT 格式),这么作会致使至少 2 个问题:
2.1 客户端和服务器时间不一样步致使 Expires 的配置出现问题。
2.2 很容易在配置后忘记具体的过时时间,致使过时来临出现浪涌现象
3. max-age 指定的是从文档被访问后的存活时间,这个时间是个相对值(好比:3600s), 相对的是文档第一次被请求时服务器记录的 Request_time(请求时间)
4. Expires 指定的时间能够是相对文件的最后访问时间(Atime)或者修改时间(MTime),而 max-age 相对对的是文档的请求时间(Atime)
5.若是值为 no-cache,那么每次都会访问服务器。若是值为 max-age,则在过时以前不 会重复访问服务器。
1七、[问答题] 你了解 HTTP 状态码吗,请随便介绍一下。
100 Continue 继续,通常在发送 post 请求时,已发送了 http header 以后服务端将返回 此信息,表示确认,以后发送具体参数信息
200 OK 正常返回信息
201 Created 请求成功而且服务器建立了新的资源
202 Accepted 服务器已接受请求,但还没有处理
301 Moved Permanently 请求的网页已永久移动到新位置
302 Found 临时性重定向
303 See Other 临时性重定向,且老是使用 GET 请求新的 URI
304 Not Modified 自从上次请求后,请求的网页未修改过
400 Bad Request 服务器没法理解请求的格式,客户端不该当尝试再次使用相同的内容 发起请求
401 Unauthorized 请求未受权
403 Forbidden 禁止访问
404 Not Found 找不到如何与 URI 相匹配的资源
500 Internal Server Error 最多见的服务器端错误
503 Service Unavailable 服务器端暂时没法处理请求(多是过载或维护)
1八、[问答题] 如何获取 UA?
经过JS获取浏览器UA(User Agent,用户代理)
//获取完整的浏览器名称 document.Browser.Name.value=navigator.appName; //获取浏览器的版本,通常不与实际的浏览器版本对应 document.Browser.Version.value=navigator.appVersion; //获取浏览器的名称。一般都是Mozilla,即便在非Mozilla的浏览器中也是如此 document.Browser.Code.value=navigator.appCodeName; //获取浏览器的用户代理字符串 document.Browser.Agent.value=navigator.userAgent;
1九、[问答题] 说说对网站重构的理解。
网站重构:在不改变外部行为的前提下,简化结构、添加可读性,而在网站前端保持一致性的行为。也就是说在不改变UI的状况下,对网站进行优化,在扩展的同时保持一致性的UI
对于传统的网站来讲,重构一般是:
(1)表格(table)布局改成 DIV + CSS
(2)使网页前端兼容于现代浏览器(针对于不合规范的CSS、如对 IE6 有效的)
(3)对于移动平台的优化
(4)针对SEO进行优化
(5)深层次的网站重构应该考虑的方面
(6)减小代码的耦合
(7)让代码保持弹性
(8)严格按规范编写代码
(9)设计可扩展的API
(10)代替旧有的框架、语言
(11)加强用户体验
(12)一般来讲对于速度的优化也包含在重构中
(13)压缩JS、CSS、image 等前端资源(一般是由服务器来解决的)
(14)程序的性能优化(如数据读写)
(15)采用CDN来加速资源加载
(16)对于 JS DOM 的优化
(17)HTTP服务器的文件缓存
SEO:(Search Engine Optimization):汉译为搜索引擎优化。是一种方式:利用搜索引擎的规则提升网站在有关搜索引擎内的天然排名。
function clone(obj) { let ret if (Array.isArray(obj)) { ret = [] // 建立一个空数组 for (let i = 0; i < obj.length; i++) { ret[i] = clone(obj[i]) } return ret } else if (Object.prototype.toString.call(obj) === "[object Object]") { ret = {} // 建立一个空对象 for (let i in obj) { ret[i] = clone(obj[i]) } return ret } else { return obj } }
2一、[问答题] Ajax 是什么?Ajax 的交互模型?同步和异步的区别?如何解决跨域问题?
(1)ajax 的全称是异步的 JavaScript 和 XML ,是一种建立快速动态的技术,经过在后台与服务器进行少许数据交互,实现网页的异步更新,在不从新加载整个界面的状况下,作到网页的部分刷新
(2)ajax的交互模型(ajax的过程)
(3)同步和异步的区别:
(4)跨域问题的解决:
2二、[问答题] IE 与火狐的事件机制有什么区别? 如何阻止冒泡?
(1)咱们在网页中的某个操做(有的操做对应多个事件)。例如:当咱们点击一个按钮就会产生一个事件。是能够被JavaScript侦测到的行为
(2)事件处理机制:IE是事件冒泡,firefox 同时支持两种事件模型(捕获型事件和冒泡型事件)
(3)ev.stopPropagation() ---注意旧 ie 的方法:ev.cancelBubble = true
2三、[问答题] WEB 应用从服务器主动推送 Data 到客户端有那些方式?
(1)html5 websoket
(2)websocket 经过 flash
(3)XHR 长时间链接
(4)XHR Multipart Streaming
(5)不可见的 Iframe
(6)<sctipt>标签的长时间链接(可跨域)
2四、[问答题] JavaScript 原型,原型链 ? 有什么特色?
(1)原型对象也是普通的对象,是对象一个自带隐式的 __proto__ 属性,原型也有可能有本身的原型,若是一个原型对象的原型不为 null 的话,咱们就称之为原型链
(2)原型链是由一些用来继承和共享属性的对象组成的(有限的)对象链
2五、[问答题] Node.js 的适用场景
(1)高并发
(2)聊天
(3)实时消息推送
2六、[问答题] eval 是作什么的,有什么建议?
(1)它的功能是把对应的字符串解析成 JS 代码并运行
(2)应该避免使用eval,不安全,很是耗性能(2次,一次解析成js语句,一次执行)
2七、[问答题] 哪些地方会出现 css 阻塞,哪些地方会出现 js 阻塞?
2八、[问答题] GET 和 POST 的区别,什么时候使用 POST?
GET:通常用于信息获取,使用URL传递参数,对所发送的信息数量有限制,通常在 2000 个字符
POST:通常用于修改服务器上的资源,对所发送的信息没有限制
GET方式须要使用 Request.QueryString 来取得变量的值
POST方式经过 Request.Form 来获取变量的值
也就是说Get是经过地址栏来传值,而Post是经过提交表单来传值
在如下状况下,使用POST请求:
(1)没法使用缓存文件(更新服务器上的文件或数据库)
(2)向服务器发送大量数据(POST没有数据量限制)
(3)发送包含未知字符的用户输入时,POST比GET更稳定也更可靠
2九、[问答题] 请解释一下 JavaScript 的同源策略。
同源策略是客户端脚本(尤为是JavaScript)的重要安全度量标准。其目的是防止某个文档或脚本从多个不一样源装载。
这里的同源策略指的是:协议、域名、端口号相同,同源策略是一种安全协议,指一段脚本只能读取来自同一来源的窗口和文档的属性。
为何要有同源限制:
咱们举例说明:好比一个黑客程序,他利用 Iframe 把真正的银行登陆页面嵌入他的页面上,当你使用真实的用户名、密码登陆时,他的页面就能够经过JavaScript读取到你的表单中input中的内容,这样用户名、密码就轻松到手了。
30、[问答题] 什么叫优雅降级和渐进加强?
(1)优雅降级:Web站点在全部新式浏览器中都能正常工做,若是用户使用的是老式浏览器,则代码会检查以确认它们是否能正常工做。因为 IE 独特的盒模型布局问题,针对不一样版本的 IE 的 hack实践过优雅降级了,为那些没法支持功能的浏览器增长候选方案,使之在旧式浏览器上以某种形式降级体验却不至于彻底失效。
(2)渐进加强:从被全部浏览器支持的基本功能开始,逐步地添加那些只有新式浏览器才支持的功能,向页面增长无害于基础浏览器的额外样式和功能。当浏览器支持时,它们会自动地呈现出来并发挥做用。
3一、[问答题] 哪些操做会形成内存泄漏?
内存泄漏指任何对象在你不在拥有或须要它以后仍然存在。
垃圾回收器按期扫描对象,并计算引用了每一个对象的其余对象的数量。若是一个对象的引用为0(没有其余对象引用过该对象),或对该对象的惟一引用是循环的,那么该对象的内存便可回收。
(1)setTimeout 的第一个参数使用字符串而非函数的话,会引起内存泄漏
(2)闭包
(3)控制台日志
(4)循环引用(在两个对象彼此引用且彼此保留时,就会产生一个循环引用)
3二、[问答题] .call() 和 .apply() 的做用?
动态改变某个类的某个方法的运行环境
3三、[单选题]
function Foo() { var i = 0; return function () { document.write(i++); } } var f1 = Foo(), f2 = Foo(); f1(); f1(); f2();
请问以上程序的输出是()
var a = "undefined"; var b = "false"; var c = ""; function assert(aVar) { if (aVar) alert(true); else alert(false); } assert(a); assert(b); assert(c);
// 方法1 function indexOf(str, subStr){ var ret = str.match(subStr) return ret ? ret.index : -1 } // 方法2 function indexOf(a, b){ return a.search(b) }
3六、[单选题]
var myObject = { foo: "bar", func: function () { var self = this; console.log(this.foo); console.log(self.foo); (function () { console.log(this.foo); console.log(self.foo); }()); } }; myObject.func();
程序的输出是什么?
console.log(1 + "2" + "2"); console.log(1 + +"2" + "2"); console.log("A" - "B" + "2"); console.log("A" - "B" + 2);
function f1() { var n = 100; nAdd = function () { n += 1 } function f2() { alert(n); } return f2; } var result = f1(); result(); nAdd(); result();
输出:100 undefined 100