好好学习,天天向上,奥力给!
HTML语义化
扩展:
- 有利于浏览器解析,搜索引擎抓取
- 让页面内容结构化,在没有css的情况下也能以一种文档格式存在,易于阅读
- 便于后期阅读和维护
ES6新特性
-
新增变量const和let,const定义常量,let不会变量提升
-
模板字符串,``表示一段模板字符串,变量使用${}
-
箭头函数,var sum = (a,b) => a+b
-
函数参数默认值设置,之前用”||”,现在用“=”赋值
-
字符串API扩展。includes() : 返回布尔值,表示是否找到了参数字符串;startsWith() : 返回布尔值,表示参数字符串是否在原字符串的头部;endsWith() : 返回布尔值,表示参数字符串是否在原字符串的尾部。
-
数组/对象的解构,按照一定模式从数组和对象中提取值,然后对变量进行赋值,这被称为解构。
-
数组新增了map()和reduce()方法 。map():接收一个函数,将原数组中的所有元素用这个函数处理后放入新数组返回。reduce()会从左到右依次把数组中的元素用reduce处理,并把处理的结果作为下次reduce的第一个参数。如果是第一次,会把前两个元素作为计算参数,或者把用户指定的初始值作为起始参数。
-
扩展运算符(...),将一个数组转为用逗号分隔的参数序列
-
Promise ,就是一个用来传递异步操作消息的对象,可以实现无阻塞高并发,解决地狱回调。Promise有pending未完成,fulfilled操作成功,rejected操作失败3种状态。Promise 构造函数接受一个函数作为参数,该函数的两个参数分别是 resolve 方法和 reject 方法。 如果异步操作成功,则用 resolve 方法将 Promise 对象的状态,从「未完成」变为「成功」(即从 pending 变为 fulfilled); 如果异步操作失败,则用 reject 方法将 Promise 对象的状态,从「未完成」变为「失败」(即从 pending 变为 rejected)。 Promise状态发生改变,就会触发then()里的响应函数处理后续步骤。如果想要处理promise异步执行失败的事件,还可以跟上catch()。
-
集合Set和Map的数据结构。Set,本质与数组类似。不同在于Set中只能保存不同元素,如果元素相同会被忽略。map,本质是与Object类似的结构。不同在于,Object强制规定key只能是字符串。而Map结构的key可以是任意对象即:object 是 <string,object>集合 ;map 是<object,object>集合。
-
class(类),js传统方法是通过构造函数定义并生成类,ES6引入 class 的概念,通过 class 关键词自定义类。通过extends关键字实现类的继承。
-
Generator函数,Generator 函数是 ES6 提供的 一种异步编程解决方案 ,有两个特征: 一是 function命令与函数名 之间有一个星号: 二是 函数体内部使用 yield语句定义不同的 内部状态。
-
for...of 循环,通过for...of可以循环遍历Generator函数返回的迭代器。for...of遍历的是值,for...in遍历的是索引
-
模块化
模块化就是把代码进行拆分,方便重复利用。
模块功能主要是由两个命令构成:export 和 import 。
- export:用于规定模块的对外接口
- import:用于导入其他模块提供的功能
DOM操作相关
1、通过以下代码创建节点
- createDocumentFragment() //创建一个DOM片段
- createElement() //创建一个具体的元素
- createTextNode() //创建一个文本节点
2、添加、移除、替换、插入节点
- appendChild()
- removeChild()
- replaceChild()
- insertBefore()
3、通过以下方式查找节点
- getElementById()
- getElementsByTagName()
- getElementsByName()
4、什么是事件代理(事件委托)?
事件代理(事件委托),是JS中绑定事件的常用技巧。就是把原本需要绑定的事件委托给父元素,让父元素负责事件监听。原理是DOM元素的事件冒泡。
事件委托的好处:
- 减少事件注册,提高性能* 新增元素实现动态绑定事件
实现:
-
addEventListener(); //所有主流浏览器,除了IE8及更早IE版本
-
attachEvent(); //IE8及IE更早版本
5、什么是事件流?
当一个事件发生时,这个事件的传播过程就是事件流。
6、什么是事件冒泡?
IE中的事件流就叫做事件冒泡。事件冒泡是由事件开始时由最具体的元素接收,然后逐级向上传播到较为不具体的节点。对于HTML来说当以一个元素产生一个事件时,它会把这个事件传递给它的父元素,父元素接收到之后,还要传递给它上一级的元素,就这样一直传播到document对象。
7、如何阻止冒泡?
function stopBubble(e){
var event = e ||window.event;
event.stopPropagation ? event.stopPropagation():(event.cancelBubble = true);
}
8、什么是事件捕获?
事件捕获就是不太具体的元素更早的接收到事件,而最具体的节点最后接收到事件。它们的用意就是在事件达到目标之前就捕获它,过程与冒泡相反。
9、事件的分类有哪些?
鼠标事件、键盘事件、表单事件、窗口事件、触屏事件、剪贴板事件、打印事件、多媒体事件、CSS3(动画、过渡等)事件、其他事件
闭包
函数(执行上下文)A+ 函数内部能访问到的变量(在该执行上下文A中创建的函数B),当B执行时,如果访问了A中变量对象中的值,那么闭包就会产生。
function foo(){
var local = 1
function bar(){
local++
return local
}
return bar
}
var func = foo()
func()
// local 变量和 bar 函数就组成了一个闭包(Closure)
特性:
- 函数套函数
- 内部函数可以直接使用外部函数的局部变量或参数
- 变量或参数不会被垃圾回收机制回收
优点:
- 变量长期驻扎在内存中
- 避免全局变量的污染
- 私有成员的存在
缺点:
常驻内存,会增大内存的使用量,使用不当会造成内存泄露
async/await
async/await是 JS 中编写异步或非阻塞代码的新方法。它建立在Promises之上,让异步代码的可读性和简洁度都更高。在async/await中,使用 try/catch 语法来捕获异常。
原型链
对象由 proto 组成的链子,叫做原型链。
JSONP
1: 使用script 标签发送请求,这个标签支持跨域访问
2:在script 标签里面给服务器端传递一个 callback
3:callback 的值对应到页面的一个全局函数(为什么是全局?因为服务端接收到callback函数后会返回页面中的script中去找,如果不写在全局作用域中根本找不到)
4:服务端返回的是一个函数的调用。调用的时候会把数据作为参数包在这个函数里面。
缺点:jsonp只能解决get方式的跨域
浏览器渲染原理
-
渲染引擎将获取的HTML文档解析成DOM树
-
处理CSS标记,构成层叠样式表模型CSSOM(CSS Object Model)
-
将DOM和CSSOM合并为渲染树(rendering tree)
-
layout布局,为每一个节点提供它在屏幕上的确切位置坐标
-
painting绘制,遍历渲染树, 绘制每一个节点
HTTP
HTTP:超文本传输协议,是因特网上应用最为广泛的一种网络传输协议,基于TCP/IP通信协议来传递数据 。
请求方式:Get、Post、Put、Delete、Option、Head
200:请求成功
301:请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI
400:客户端请求的语法错误,服务器无法理解
404:服务器无法根据客户端的请求找到资源(网页)
405:客户端请求中的方法被禁止
500:服务器内部错误,无法完成请求
502:作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响
get和post的区别:
- post更安全
- post能发送更多类型及更大的数据
- post比get慢
- post用于修改和写入数据,get一般用于查询之类的
- post请求包含更多请求头
- post在真正接收数据之前会先将请求头发送给服务器进行确认,然后才真正发送数据
- get会将数据缓存起来,而post不会
- post不能进行管道化传输TCP/IP协议