es6特性介绍(中)

发布时间:2019-08-09 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了es6特性介绍(中)脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

声明变量 let

功能和var类似,却去掉了很多var身上的坏毛病

  1. 块状作用域

    {
        VAR a = '123';
    }
    {
        let b = '456'
    }
    // 如果在浏览器环境执行的时候
    console.LOG(a);// '123'
    console.log(b);// b is not defined
  2. 不会往全局变量上面绑定,止全局变量的污染

    var a = '123';
    let b = '456';
    // 直接结果
    console.log(window.a);// '123'
    console.log(window.b);// undefined;
  3. 相同作用域中不允许重复声明相同变量

    let a = '123';
    let a = '456';
    // 执行结果
    console.log(a);// 抛出语法错误:SyntaxError: Identifier 'me' has already been declared
  4. 经典的例子

    for(var i=1;i<10;i++){
    }
    console.log(i); // 输出10,一不小心就污染了全局环境
    // 使用let,就不会有这个问题
    for(let j=1;j<10;j++){
    }
    console.log(j); // 抛出引用异常:ReferenceError: j is not defined

声明常量 const

es6之前并没有很好的办法进行常量的声明,常量:这是一个只读的变量,es6中给出了const这个特性,专门用来处理这类问题

    const a = '123';
    a = '456'; // 抛出异常 SyntaxError: "a" is read-only

需要注意下,常量的对象,其中的属性是可以被改变

    const obj = {
        name:'hello'
    }
    obj.name = 'hello 2'; // 这个地方是合法的

for...of

es6提供的一个新的迭代器,功能类for...in,只是前者返回的是value,而后者返回的是脚标

    let data = ['a','b','c'];
    for(let i in data){
        console.log(i);// 输出 0,1,2
    }
    
    for(let j of data){
        console.log(j);// 输出 a,b,c
    }

代理 PRoxies

这是es6提供的一个强大的特性,可以通过非侵入的方式,修改对象的默认行为

    var obj = {
        name:'dog'
    };
    var handler = {
        get:function(target,key){
            return target[key].replace('dog','cat');
        }
    };
    // 设置代理
    var Proxy = new Proxy(obj,handler);
    console.log(proxy.name);

可以进行代理的属性还有很多:

var handler = {
  get:...,
  set:...,
  has:...,
  deleteProperty:...,
  apply:...,
  construct:...,
  getOwnPropertyDescriptor:...,
  defineProperty:...,
  getPrototypeOf:...,
  setPrototypeOf:...,
  enumerate:...,
  ownKeys:...,
  preventextensions:...,
  isExtensible:...
}

脚本宝典总结

以上是脚本宝典为你收集整理的es6特性介绍(中)全部内容,希望文章能够帮你解决es6特性介绍(中)所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。