1、http协议未规定GET和POST的长度限制,GET的最大长度是因为浏览器和服务器限制了URL的长度。
2、get请求类似于查找过程,用户获取数据,可以不用每次与数据库连接,可以使用缓存。
而post请求一般做的修改和删除工作,必须与数据库交互,不能使用缓存。
3、闭包,就是有权访问另一个函数作用域中的变量的函数。函数局部变量的集合,他们是匿名自执行函数
4、类的创建与继承
es5中
用this
function User(){
this.name="Sarah";
this.age="23";
this.getInfo=function(){
return this.name + " " + this.age;
}
}
//使用类
var user=new User();
alert(user.getInfo());
或者用prototype
function User(name){
this.name=name||"sarah";
this.age="23";
}
User.prototype={
getInfo: function(){
return this.name+" "+this.age;
}
}
var user = new User();
alert(user.getInfo());//访问方法
或者Object.create()
User={
name:'hello',
age:'23',
getInfo:function(){
return this.name + " " + this.age;
}
}
//使用
var user=Object.create(User);
alert(user.getInfo());
es6引入语法糖
class User{
constructor(name, age){
this.name="sarah";
this.age ="23";
}
getInfo(){
return this.name+' '+this.age;
}
}
var user = new User();
console.log((user.getInfo()));//Sarah 23
class的继承
子类中没有constructor时
直接class zhouzhou extend Person{
}
子类中有constructor时
class zhouzhou extend Person{
constructor(a,b,c){
super(a,b,c)
}
}
5、解决异步回调
promise,generator,async/await
6、事件流
事件捕获阶段,处于目标阶段,事件冒泡阶段
7、实现先冒泡后捕获,分别监听捕获和冒泡,监听到捕获事件先先暂缓执行,直到冒泡事件被发生后,再执行捕获事件。
8、事件委托,就是在父元素上进行监听
9、改变函数内部this指针的指向函数(bind,apply,call的区别)
apply,call改变函数的this指向,第一个函数都是一样要改变指向的那个对象,第二个参数apply是数组,call是arg1,arg2的形式。而bind是返回一个新的函数。
10、clientHeight表示可视区域的高度,不含border,和滚动条
offsetHeight表示可视区域的高度,含border,和滚动条
scrollHeight:表示所有区域的高度,包含滚动条隐藏的部分。
clientTop:返回上边框的大小
scrollTop:滚动后被隐藏的高度
clientX,clientY标识的是鼠标的坐标
offsetX,offsetY相对于带有定位的父盒子的x,y坐标
11、垃圾回收的方法:标记清除、计数引用。
12、前端模块化,分成独立的模块,有利于重复使用和维护。
13、Commonjs:开始于服务器端的模块化,同步定义的模块,输出,module.exports,引入用require()
AMD异步模块的引入,requireJS定义了一个函数define进行定义模块,require进行引入
14、js判断类型:typeof(),instanceof()
15、数组中常用的方法。
Array.map()将数组中的每个元素调用一个函数,并返回新的数组,原数组不变
Array.forEach()也是调用函数,改变原数组
Array.filter()对所有元素进行判断,将满足条件的元素作为一个新的数组返回。
Array.push()在数组最后添加一个元素
Array.pop()删除数组的最后一个元素。
Array.shift()删除第一个元素
Array.unshift()将一个或多个元素添加到数组的开头
Array.splice()实现增加或删除数组,
Array.sort()函数,排序默认是ACSII码顺序进行比较,比较数字可传入一个函数,
a>b return 1; a<b return -1;从大到小排序。
16、去除字符串首尾空格 /(^\s*)|(\s*$)/g
17、性能优化
用cdn,减少http请求,添加本地缓存,压缩资源文件,把css放在顶部,js放在底部,避免重定向。
18、直接运行在浏览器上,不用预编译,弱类型语言,较为灵活,跨平台语言。
19、instanceof Array判断,返回true。说明是数组。
使用Object.prototype.toString.call判断,如果值是[object Array],说明是数组
20、跨域问题,JASONP方式,CORS:方式,服务端设置一下即可。
21、数组去重
直接new Set(arr)
indexof方法,
22、常用的es6
let声明只在代码块内有效
const常量,不变
模板字符串
解构赋值,在数组或对象中提取值,对变量进行赋值
rest参数(...)获取多余的变量
()=>{}
23、concat()连接数组,slice (start,end)返回选定的数组
获得对象上的属性,for(let i in obj)
obi.keys返回属性名称的数组。