es6特性介绍(中)

声明变量 let

功能和var相似,却去掉了不少var身上的坏毛病javascript

  1. 块状做用域java

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

    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. 经典的例子app

    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

须要注意下,常量的对象,其中的属性是能够被改变的code

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提供的一个强大的特性,能够经过非侵入的方式,修改对象的默认行为ip

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:...
}
相关文章
相关标签/搜索