美文网首页
es6解读1: let, const 和 smybol

es6解读1: let, const 和 smybol

作者: HowlEagle101Div | 来源:发表于2017-10-27 10:01 被阅读0次

    let const 作用域

    作用域概念

    + 全局作用域
    + 函数作用域
    + 块级作用域
    

    如何使用let和const

    • 使用let

    1. 形成块级作用域
    2. es6下强制开启严格模式,而在es5下,需要"use strice"才能开启严格模式;
    • 使用const

    1. 声明的常量不能修改;但是对象可以修改,因为对象是对地址的引用,我们可以在内存空间中更改对象
    function last(){
          const k ={
            a:1
          }
          k.a = 123;
          console.log(k) //123
    }
    
    1. 声明的时候必须赋值
    2. const也有块级作用域概念

    Symbol

    • Symbol概念:用Symbol申明的变量将是独一无二的值
    • Symbol的作用: 避免属性名相同的问题
      • 注意:对象中,有用到symbol做key值的话,是取不到的;
        即let...of只能拿到非Symbol对象的值;
    let a1=Symbol.for('abc');
        let obj={
            [a1]:'123',
            'abc':345,
            'c':456
        };
        console.log(obj) //{abc: 345, c: 456, Symbol(abc): "123"}
        for(let [key,value] of Object.entries(obj) ){
            console.log('let of',key,value) //let of abc 345 let of c 456
        }
    
    • 解决办法:通过以下代码可以取到Symbol的值;Object.getOwnPropertySymbols可以拿到Symbol对象的值;
     Object.getOwnPropertySymbols(obj).forEach(function (item) {
            console.log(obj[item])  //123
        })
    
    • 返回了所有key和value值;通过es6最增的Reflect.ownKeys(obj)
    Reflect.ownKeys(obj).forEach(function (item) {
            console.log(item,obj[item]) //abc 345,c 456, Symbol(abc) "123"
        });
    

    相关文章

      网友评论

          本文标题:es6解读1: let, const 和 smybol

          本文链接:https://www.haomeiwen.com/subject/gzhrpxtx.html