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:...
}
相關文章
相關標籤/搜索