• 深入理解ES6之—符号与符号属性


    在js已有的基本类型(字符串,数值,布尔型,null和undefined)之外,es6引入了一种新的基本类型:符号(Symbol)。符号起初被设计用于创建对象私有成员。

    符号没有字面量形式,你可以使用全局Symbol函数来创建一个符号值。

    let firstName = Symbol();
    let person = {};
    
    person[firstName] = "nicolas";
    console.log(person[firstName]);
    

    Symbol还可以接受一个额外的参数用于描述符号值。建议始终给符号提供描述信息,以便更好的阅读代码和进行调试。

    使用符号值

    let firstName = Symbol("first name");
    let person = {
        [firstName]: "nicolas"
    }
    
    //让改属性变成只读的
    Object.defineProperties(person, firstName, {
        writable: false
    });
    
    let lastName = Symbol("last name");
    Object.defineProperties(person, {
        [lastName]: {
            value: "cc",
            writable: false
        }
    });
    person[lastName] = "dd";
    console.log(person[firstName]);//nicolas
    console.log(person[lastName]);//cc
    

    共享符号值

    如果要创建共享符号值,应使用Symbol.for()方法而不是Symbol()方法。Symbol.for()接受单个字符串类型的参数,作为目标符号值的标识符,同时此参数也会成为该符号的描述信息。

    let uid = Symbol.for("uid");
    let object = {};
    object[uid] = "12345";
    console.log(object[uid]);//12345
    console.log(uid);//Symbol(uid)
    

    Symbol.for()方法首先会搜索全局符号注册表,看是否存在一个键值为“uid”的符号值。

    检索符号属性

    Object.keys()和Object.getPropertyNames()方法可以检索对象的所有属性和名称,前者返回所有的可枚举属性名称,后者返回所有属性名称而无视其是否可枚举。es6新增了Object.getOwnPropertySymbols()方法,以便可以检索对象的符号类型属性。

    let uid = Symbol.for("uid");
    
    let first = Symbol("first name");
    let object = {
        name: "cc",
        age: 26
    };
    
    object[uid] = "12345";
    object[first] = "111";
    
    console.log(Object.getOwnPropertyNames(object));//["name","age"]
    console.log(Object.getOwnPropertySymbols(object));//[Symbol(uid),Symbol(first name)]
    
  • 相关阅读:
    C++Builder中的异常传递
    lpc1343 usb isp not work in linux and mac
    玩玩Hiweed linux 2.0
    有关 stringWithString 和 initWithString
    Windows mobile 中获取内存使用情况
    玩玩xubuntu 8.10
    升级我的ipaq hx2110到Windows Mobile 6.0
    面试技巧 from IBM
    常用Sql语句
    c#的事件机制示例代码: 猫> 老鼠, 主人
  • 原文地址:https://www.cnblogs.com/xzsty/p/7753312.html
Copyright © 2020-2023  润新知