1.问题:http302状态表示什么,domContentLoaded表示什么事件
ie6/7/8不支持事件捕获。localStorage存储的数据,在刷新页面后会消失。
解析:http302状态表示被请求的资源暂时转移,然后会给出一个转移后的URL,
而浏览器在处理服务器返回的302状态的时候,原则上会重新建立一个TCP请求,然后再取重定向后的URL的页面;但是如果页面存在于缓存中,则不重新获取;
http各状态码解析:
值 | 状态 |
---|---|
200 | 一切正常,实体主体中的文档 |
500(bad request) | 客户端方面的问题,实体主题中的文档(若存在的话),是一个错误消息,。希望客户端能够理解此错误消息,并改正问题。 |
500(“Internal Server Error”) | 服务期方面的问题。实体主体中的文档(如果存在的话)是一个错误消息。该错误消息通常无济于事,因为客户端无法修复服务器方面的问题。 |
301 | 表示永久性的转移,搜索引擎在抓取新内容的同时也将旧的网址交换为重定向之后的网址 |
302 | 代表暂时性转移,搜索引擎会抓取新的内容而保存旧的网址。 |
404 | 表示找不到资源 |
401 | 表示未授权,需要用户身份验证 |
403 | 禁止访问,没有权限访问此站 |
具体解析
onload事件触发时,页面上所有的DOM,样式表,脚本,图片,flash都已经加载完成了,domContentLoaded事件触发时,仅当DOM加载完成,不包括样式表,图片,flash。
2.问题:1
2
3
4
5
6
7
8
9
10
11function Foo(){
var i=0;
return function(){
document.write(i++);
}
}
var f1=Foo(),
f2=Foo();
f1();
f1();
f2();
输出为:
答案:010
解析:f1和f2分别创建了自己的执行环境,所以它们两个是相互独立的,执行完成之后都返回一个匿名函数,这个匿名函数的作用域链被初始化为其包含函数的活动对象(这里就是i)和全局变量对象,f1执行之后i不会被销毁,因为返回的匿名函数还要引用i,i仍然在内存中,所以执行了2次之后i的值变成了1,而f2执行后i值是0。
3.问题:现有如下html的结构:1
2
3
4
5
6<ul>
<li>click me</li>
<li>click me</li>
<li>click me</li>
<li>click me</li>
</ul>
运行以下代码:1
2
3
4
5
6
7var elements=document.getElementsByTagName('li');
var length=elements.length;
for(var i=0;i<length;i++){
elements[i].onclick=function(){
alert(i);
}
}
依次点击后,弹出值为:
答案:4,4,4,4
解析:这是js的运行机制,事件click,focus,定时器setTimeOut,setInterval,ajax等都是异步,属于异步任务,js是单线程的,一个时间点只能做一个事情,优先处理同步任务,按照代码从上往下的运行,遇到异步任务,首先会挂起,放到异步任务里面去,继续执行同步任务,只有同步任务执行完了,才去执行异步任务,然后按照顺序执行,这里for循环是同步任务,onclick是异步任务,所以只有for循环执行完了,i已经变成4了,因为i是全局变量,最后的一个i++,使得i变成4,后面的click事件,在循环外面,不受i < length的的限制,所以for循环了4次,click都被挂起,共4次,for循环结束后,点击触发了4个onclick函数,所以输出了4个4。
4.问题:js中,document.getElementById返回的值得类型是
a.array b.object c.string d.function
答案:b
解析:可以使用typeof方法来查看document.getElementById返回的是什么值类型。
document.getElementById(“ul”)返回的是object,而document.getElementById是一个方法,因此返回的是function
5.问题:有以下es6的代码:1
2
3
4
5function *gen() {
yield 1;
yield 2;
yield 3;
}
说法正确的是:
答案:gen()执行后返回的是一个generator对象。
解析:function *声明(function 关键字后面跟了一个星号),定义了一个生成器函数(generator function),返回一个generator对象。返回一个iterator实例的next()方法,那么这个函数才开始真正执行,并且把yield后面的值包装成固定对象返回,直到运行到函数结尾,最后再返回undefined.
6.问题:在不改变元素的显示属性的情况下,元素都是可以设置宽度的,并且能够设置成功,这句话是否正确。
答案:错误
解析:块状元素:div,p,h1,h6,ol,ul,dl,table,address,form,blockquote等。设置display:block就是将元素设置为块状元素,每个元素都是从新的一行开始的。并且其后的元素也另起一行。元素的高度,宽度,行高和顶,底边距都是可以设置的。
元素宽度在不设置的情况下,是它本身父容器的100%,(和父元素的宽度一致),除非设定一个宽度。
内联元素:a,span,br,i,em,strong,label,q,cite,display:inline来设置。和其他元素在同一行上,元素的高度,宽度,顶部,底部距离不可以设置。元素宽度就是包含的文字或者图片的宽度,不可改变。
内联块状元素:inline-block,同时具备内联元素和块状元素的特征,和其他元素在同一行上,元素的高度,宽度,行高顶部底部距离都可以设置。
7.问题:表单提交时会触发什么dom方法:
答案:submit
解析:在w3中,submit被称为方法,而onsubmit被称为事件。具体可见:onsubmit事件 submit方法
8.问题:css sprites方法错误的是:
答案:css sprites增加了总的图片的字节,但是很好的减少网页的http请求,从而大大的提升网页的性能。
解析:在国内被称为css精灵,是一种网页图片应用处理方式,允许你将一个页面涉及到的所有零星图片都包含到一张大图中,这样一来,访问该页面的时候,载入的图片就不会像以前那样一幅一幅的慢慢显示出来,利用css的backgroud-image,background-repeat,background-position组合进行背景定位,background-position可以用数字精确定位出背景图片的位置。css精灵能很好的减少http请求。css精灵能减少图片的字节,3张合成一张总是小于3张图片的总字节。解决了网页设计师在图片命名上的困扰,只需对一张集合的图片上命名就可以了,不需要对每一个小元素命名,从而提高了网页的制作效率,更换风格方便,只需要在一张或少张图片上修改图片的颜色或者样式,整个网页的风格就可以改变,维护起来更加方便。
9.问题:下面有关js常见事件的触发情况,描述错误的是:
答案:onmousedown:某个鼠标按键被按下 onkeypress:某个键盘的键被按下或者按住,onblur:元素失去焦点,obchange:用户改变域的内容。
10.问题:w3c指定的js标准事件模型,以下正确的是
答案:事件捕获 到 事件处理 到 事件冒泡
解析:先事件捕获 window > document 往下级直到 特定的事件节点,然后进行事件处理,再事件冒泡,从特定节点往上级,这个完整的过程。
11.问题:下列描述中,关于js函数定义方式,正确的是:
答案:函数声明的语法定义:1
2
3function sum(sum1,sum2){
return sum1 + sum2;
}
函数表达式定义函数:1
2
3var sum = function(sum1,sum2){
return sum1 + sum2;
}
function构造函数可接受任意数量的参数,但最后一个参数始终被看成函数体:1
2var sum = new Function("num1","num2",
"return num1 + num2");
12.问题:使用h1标签会形成什么效果:
答案:加粗,大号字体。
13.问题:L在不涉及样式情况下,页面元素的优先显示与标签选用无关,正确或错误:
答案:正确
解析:优先显示和优先级还是不一样的,优先显示是html文档从上向下加载,只与标签的上下顺序有关,
与优先级无关
14.问题:常见的浏览器端的存储技术有哪些:
答案:cookie,localStorage,session,userData
解析:cookie,localStorage是常用的存储端技术,useData,IE浏览器可以使用userData来存储数据,容量可达到640K,这种方案是很可靠的,不需要安装额外的插件。缺点:它仅在IE下有效。
session 通常是服务器端的。indexDB。localStorage,sessionStorage,cookie通常是浏览器端存储的。
15.问题:1
2
3
4
5
6
7
8
9
10
11
12
13var 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();
答案:输出为bar bar undefined bar
解析:1、func是由myObject调用的,this指向 myObject。
2、self指向myObject,相当于myObject的this的副本。
3、这个立即执行匿名函数表达式(IIFE)是由window调用的,this指向window 。
4、IIFE的作用域处于myObject.func的作用域中,本作用域找不到self变量,沿着作用域链向上查找self变量,找到了指向 myObject对象的
16.问题:下面有关javascript内部对象的描述,正确的有?
1.History 对象包含用户(在浏览器窗口中)访问过的 URL
2.Location 对象包含有关当前 URL 的信息
3.Window 对象表示浏览器中打开的窗口
4.Navigator 对象包含有关浏览器的信息
17.问题:攻击者使用无效IP地址,利用TCP连接的三次握手过程,连续发送会话请求,使受害主机处于开放会话的请求之中,直至连接超时,最终因耗尽资源而停止响应。这种攻击被称为:
1.DNS欺骗攻击
2.DDos攻击
3.XSS攻击
4.SYN Flooding攻击
答案:4.
解析:各种攻击要去了解一下。
18.问题 以下js执行结果为:
以下Javascript代码执行后的输出结果依次是:()1
2
3
4
5
6
7
8
9
10
11
12var tmp = {};
var A = function() {};
A.prototype = tmp;
var a = new A();
A.prototype = {};
var b = Object.create(tmp);
b.constructor = A.constructor;
console.log(a instanceof A);
console.log(b instanceof A);
答案:false,false
解析:
19.问题:
a.inline-block可以设置高度,inline不可以设置高度
b.inline-block和inline都可以设置padding-left
c.inline-block可以设置margin-left,inline不可以
d.block会独占一行,inline-block不会。
答案:abd
解析:行内元素是不自动换行的,设置宽高无效,设置 上下margin和上下padding无效。
20.问题:
a.let声明的变量值和类型都可以改变
b.const声明的常量不可以改变
c.两者都不存在变量提升,同时存在暂时性死区,只能在声明的位置后面使用
d.const可以先声明再初始化,可以后赋值
答案:abc
21.问题:
对以下Javascript代码运行结果的描述错误的是:()
1
2
3
4
5
6
7
var a = {},
b = { key: 'b' },
c = { key: 'c' };
a[b] = 123;
a[c] = 456;
a.变量 a
有两个属性
b.console.log(a[b])
输出 123
c.console.log(a[c])
输出 456
d.console.log(a[a])
输出 undefined
解析:对象添加属性有2种方式,第一种是采用点语法,例如采用obj.a = 1;第二种采用[] 的方法,obj[a] = ‘Joe’,题目中传入的是一个对象,所以会隐式的调用对象的toString()方法,把对象转换成字符串,执行 a[b] = 123 时 , a对象里是这样的 { ‘[object Object]’ : 123 } 。同理, a[c] = 345 , 把[object Object]重新赋值 。所以a对象只有一个属性,输出a[b] 相当于输出a的[object Object]456, a[a]同样得到456。