一、HTML篇
doctype
doctype 是用来告知浏览器的解析器用什么文档标准解析这个文档
HTML5 为什么只需要写 <!DOCTYPE HTML>
HTML5 不基于 SGML,因此不需要对DTD进行引用,但是需要doctype来规范浏览器的行为(让浏览器按照它们应该的方式来运行);
而HTML4.01基于SGML,所以需要对DTD进行引用,才能告知浏览器文档所使用的文档类型。
link/@import区别
- link
- 属于XHTML标签,除了加载CSS外,还能用于定义RSS, 定义rel连接属性等作用
- 页面被加载的时,link会同时被加载
- 支持使用js控制DOM去改变样式
- @import
- 是CSS提供的,只能用于加载CSS
- 页面被加载的时,等到页面被加载完再加载
- 不支持使用js控制DOM去改变样式
html语义化
- html语义化让页面的内容结构化,结构更清晰,便于对浏览器、搜索引擎解析
二、Javascript篇
原型/原型链
闭包
cookies/sessionStorage/localStorage的区别
- cookie
- cookie是网站为了标示用户身份而存储在用户本地终端上的数据,通常经过加密
- cookie数据始终在同源的http请求中携带(即使不需要),即会在浏览器和服务器之间来回传递
- cookie数据大小不能超过4k
- 设置cookie的过期时间之前一直有效,即使窗口或浏览器关闭
- sessionStorage和localStorage
- 不会自动把数据发给服务器,仅在本地保存
- 存储大小比cookie大得多,可以达到5M或更大
- sessionStorage
- 数据在当前浏览器窗口关闭后自动删除
- localStorage
- 存储持久数据,浏览器关闭后数据不丢失除非主动删除数据
数组去重
双层循环
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20function unique(array){
// 存储结果
var res = [];
for(var i = 0, arrLen = array.length; i < arrLen; i++){
for(var j = 0, resLen = res.length; j < resLen; j++){
if(array[i] == res[j]){
break;
}
}
// 如果array[i]是唯一的,那么执行完循环,j等于resLen
if(j === resLen){
res.push(array[i])
}
}
return res;
}indexOf
1
2
3
4
5
6
7
8
9
10
11
12
13function unique(array){
var res = [];
for(var i = 0, len = arr.length; i < len; i++){
var current = array[i];
if(res.indexOf(current) === -1){
res.push(current);
}
}
return res;
}排序后去重
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17function unique(array){
var res = [];
var sortedArray = array.concat().sort();
var seen;
for(var i = 0, len = sortedArray.length; i < len; i++){
// 如果是第一个元素或者相邻的元素不相同
if(!i || seen !== sortedArray[i]){
res.push(sortedArray[i]);
}
seen = sortedArray[i];
}
return res;
}深入
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18function unique(array, isSorted){
var res = [];
var seen = [];
for(var i = 0, len = array.length; i < len; i++){
var value = array[i];
if(isSorted){
if(!i || seen !== value){
res.push(value)
}
seen = value;
}else if(res.indexOf(value) === -1){
res.push(value);
}
return res
}
}优化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27// 迭代
function unique(array, isSorted, iteratee){
var res = [];
var seen = [];
for(var i = 0, len = array.length; i < len; i++){
var value = array[i];
var computed = iteratee ? iteratee(value, i, array) : value;
if(isSorted){
if(!i || seen !== value){
res.push(value);
}
seen = value;
}else if(iteratee){
if(seen.indexOf(computed) === -1){
seen.push(computed);
res.push(value);
}
}else if(res.indexOf(value) === -1){
res.push(value);
}
}
return res;
}fiter(ES5)
1
2
3
4
5
6
7function unique(array){
var res = array.filter(function(item, index. array){
return array.indexOf(item) === index;
})
return res;
}
待续。。。