低版本处理
- 1.在线编译
- 2.提前编译 babel
babel=browser.js
变量
var
- 可以重复声明
- 无法限制修改
- 没有块级作用域
let
- 不能重复声明,不会声明提前,变量可以修改,块级作用域
const
- 不能重复声明 ,定义常量不能修改,定义对象,可以修改属性。(栈与堆)
块级作用域
声明在指定块作用域之外无法访问的变量 - 函数
- 块中 { }
原生js遍历列表做事件处理,i 都会返回同一个数,把var改成let就可以了
var container = document.getElementsByClassName("container");
console.log(container.length); //2
for (var i = 0; i < container.length; i++) {
container[i].onmouseup = function(){
console.log(i) //2
}
}
没有声明提前,会有一个临时死区(TDZ)
函数
箭头函数
- 如果只有一个参数,参数括号可以省略
- 如果return一句,{}可以省略
- 箭头函数没有this,所以调用箭头函数的时候就不要更新上下文,就不要bind(),apply()或者call(),缺少正常函数拥有的prototype属性和arguments绑定。如果访问arguments,那也是访问上一级的
格式:()=>{}
函数参数
(一)参数扩展,其中有个…
- 1.搜集剩余参数,…args必须放在最后一位
- 2.展开数组 arr=[1,2,3,4] = = = …arrr ,但赋值不行
(二)默认参数值
function(a,b,c=1,d=function(){}){
a=1,
b=2
// c = 1
d=function(){
...
}
}
解构赋值
1.左右两边类型必须一样
2.右边是个符合jsleix
3.声明和赋值不能分开,在一行
数组,json都一样
数组
- Array.of
只要把想要的数组写在Array.of()中就行,主要是new Array有个问题,new Array(number),会显示length=number, - map // 映射 一一对应
- find findIIndex (findIIndex 只能找第一次的下标)
.
- reduce //汇总 许多项返回一
求和
tmp:中间值 第一次 temp:23 第二次 temp:23+45 - filter // 过滤
arr.filter(item=>item>1000)
- forEach // 循环(迭代)
字符串
1.ES6多了两个方法
- startsWidth
let a = "http://www.baidu.com"
alert(a.startsWith("http"))
- endsWidth
2.字符串模板
面向对象
class 类
class User{
constructor(name,age){
this.name = name
this.age = age
}
say(){
alert("我是一个类")
}
}
继承
class User{}
class VipUser extends User{
constructor(){
super() //超类 父类继承
}
}
应用 React
Promise
异步:操作之间没有关系,同时进行多个操作,但代码复杂
同步:同时只能做一件事,但代码简单
promise 用同步的方式,写异步代码
请求数据,高版本的ajax是支持的 直接请求 .then
Promise.all
let p1 = new Promise(function(resolve,reject){
$.ajax({
url:"/api/list1",
dataType:'json',
success(arr){
resolve(arr)
},
error(err){
reject(err)
}
})
})
let p2 = new Promise(function(resolve,reject){
$.ajax({
url:"/api/list2",
dataType:'json',
success(arr){
resolve(arr)
},
error(err){
reject(err)
}
})
})
p1.then(function(arr){
alert("成功",arr)
},
function(arr){
alert("失败",arr)
})
Promise.all([p1,p2],function(arr){
let [res1,res2] = arr;
alert(res1)
alert(res2)
},function(arr){
console.log(arr)
})
Promise.race 竞速 用法与 all一样 是请求速度块,先
generator // 生成器
普通函数,一站到底
generator 中途可以暂停
function *show(){
alert("a")
yield;
alert("b")
}
// 切分成
function show_1(){
alert("a")
}
function show_2(){
alert("b")
}
let genObj =show()
genObj.next() //a
genObj.next() // b
yield
传参,用next(),第一次都不作数
传参也可以写在yield上,但是发现第二次(也是最后一次 )value:undefined,最后值要return xx。 最后一次没有yield
Map集合和Set集合
三个通用方法和一注意点
- has(key)
- delete(key)
- clear() 清除所有
- "8"与8 不同,不会强制转换
Map集合
Map集合中含多组键值对,有序集合,常用于缓存频繁取用的数据
Map常用方法,要带引号,Map没有Set 的add方法,添加键值,先定义键,再设置值
forEach 三个参数
- 值
- 键
- Map
Set集合
有序列表,相互独立的非重复值
也有forEach方法,与Map一样,只是Set没有键名,所以规定与值一致
Set是一种无重复列表,可以使一个数组去重