一.es6新特性
for of
1)声明方式
let const
对比var
let
1.声明的变量不会提升
2.暂时性死区
3.不允许重复声明
4.只在其声明的代码块内有效
const
1.声明常量
2.不可以重新赋值
(对于对象中的属性值的重新赋值
const obj={ name:“tom”}
obj.name='larry'
//此时会改变属性值,obj的引用地址没有变
)
3.声明时必须初始化
4.暂时性死区
2)解构赋值
把数组或者是对象的值,赋值给变量
数组
等式两边模式相同,一一对应
等式两边模式不同
左多右少,多出变量会赋值为undefined
左少右多,一一对应,多出不显示
[a,b,..c]=[]
对象
类似
简写 左属性名 一一对应
函数参数的解构
function add([x,y]){return x+y}
add([1,2])
3)对象的扩展
es6允许直接写入变量或者函数,作为对象的属性名和属性值
1.Object.is()判断两个值是否相等
对比=== //
1是+0 === -0 true Object.is是false
2是NaN === NaN FALSE Object.is是 true
2.Object.assign(mubiaoduixiang,obj1,obj2)//拷贝的内存地址
function myAssign(target,...temp){
temp.forEach(item =>{
for(var key in item){
target[key] = item[key]
}
})
return target
}
3.Object.keys(obj)
4.Object.values(obj)
5.Object.entries(obj)键值对
4)函数的扩展之箭头函数
内部没有this,指向上一层
内部没有arguments属性
不能作为构造函数
//[...'']把字符串转为数组
5)数组的扩展
Array.from(类数组对象,可迭代的)
Array.of(一组值)
.find(item,index,arr)=>{return item > 10}
//找到第一个满足条件的,没有符合条件的值 返回undefined
.findIndex(item,index,arr)=>{return item> 10}
//找到第一个满足条件的位置,找不见就返回-1
.fill(值)使用固定的值去填充数组
判断数组有没有哪个值
arr.includes() 返回布尔值
/arr.indexOf 返回索引否则-1
6)Set和Map
Set类似数组
.add()添加
.delete()删除
.clear()清空
.has()
.size//长度
.values()键值
.keys()键名
.forEach()
!!数组去重
let arr = [10,10,20,20,30]
console.log([...new Set(arr)])
Map类似对象
更完善的Hash结构
键值对
.size
set()//增加属性 map.set('键名','键值')
get()
7)Iterator接口
.next() done:false没有结束 done:true 结束
8)class类
让对象原型的写法更加清晰,更像面向对象编程
静态方法 static
只有类本身可调用
静态属性
实例方法
只有实例去调用
实例属性 constructor(x,y){this.x=x this.y=y}
!!!!!!!!
继承
1. apply(this,arguements)
call(this,item,index,arr)
bind?、?
源码
!!
2. class Es6新特性
可通过extends关键字来继承
super(父类属性)写到子类 ()
super.父类方法
3.同时具有prototype和__proto__
9)!!! Promise
let p = new Promise((resolve,reject)=>{})
$.ajax({
url:'',
method:'',
success:function(res){
}
})
axios自带promise属性
axios.get('url').then(res=>{
resolve(res)
}).catch(e =>{
reject(e)
}).finally(()=>{
})
mvc与mvvm
构造函数,解决异步,封装优化异步
状态 pendding resolve reject
发起承诺成功 resolve
承诺失败 reject
let p = new Promise((resolve,reject)=>{})
p.then() p.catch() .finally
let p=Promise.all([p1,p2]) p的状态全部改变才改变
let p=Promise.race([p1,p2]) p的状态由第一执行及改变状态
10)Generator !!
Es6新特性
执行该函数会返回一个遍历器对象,需要.next() ,可以依次遍历函数内的每一个状态
可以调用异步函数,将异步操作同步化
特点
1.function与关键字之间有*
function* main()
2.用yield表达式阻塞
axios
.next()
11)async/await
generator的语法糖,添加了一些方便用户操作的新特性
自带promise属性
async function test(){
let res = await axios.get('')
console.log(res)
}
async 异步声明一个函数,返回一个Promise对象
await 等待promise取得值,暂停执行异步功能
js的易用性和
12)模块化结构
模块导入和导出
CommonJs
Node应用由模块组成,采用CommonJs模块规范
a.js module.exports.a=a //导出
b.js let r=require('./a.js') //导入
module.id 当前模块标识符
module.filename 当前模块的文件名
module.loaded 当前模块是否加载完成
核心模块
path模块
主要用于文件的路径
使用
安装path模块
npm install path
引入
let path = require('')
path.basename 当前文件的
path.dirname 目录名
path.extname 当前文件的扩展名
querystring模块
querystring.stringify(obj)//把对象转化成查询字符串
querystring.parse(str)//将字符串转成对象
url模块
url.parse
npm
包管理器
node.js的模块是一种能够发布到npm上的包
npm init 创建配置文件 package.json
npm init -y 默认配置
npm install 安装依赖
babel + ‘文件名’
Es6新特性
export 命令
import from命令
call
call(this,单个属性)
apply
apply(this,数组)
bind
Function.prototype.bind = function () {
var self = this, // 保存原函数
context = [].shift.call(arguments), // 保存需要绑定的this上下文
args = [].slice.call(arguments); // 剩余的参数转为数组
return function () { // 返回一个新函数
self.apply(context, [].concat.call(args, [].slice.call(arguments)));
}
}
call、apply和bind函数存在的区别:
bind返回对应函数, 便于稍后调用; apply, call则是立即调用。
13)箭头函数
除此外, 在 ES6 的箭头函数下, call 和 apply 将失效, 对于箭头函数来说:
箭头函数体内的 this 对象, 就是定义时所在的对象, 而不是使用时所在的对象;所以不需要类似于var _this = this这种丑陋的写法
箭头函数不可以当作构造函数,也就是说不可以使用 new 命令, 否则会抛出一个错误
箭头函数不可以使用 arguments 对象,,该对象在函数体内不存在. 如果要用, 可以用 Rest 参数代替
不可以使用 yield 命令, 因此箭头函数不能用作 Generator 函数,什么是Generator函数可自行查阅资料,推荐阅读阮一峰Generator 函数的含义与用法,Generator 函数的异步应用