对Es6的认识(待补)

一.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 函数的异步应用
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值