美文网首页日常刻书
聊聊 ES6 中新增的 Symbol 类型

聊聊 ES6 中新增的 Symbol 类型

作者: F_wind | 来源:发表于2021-01-25 11:30 被阅读0次

    《深入理解ES6》阅读随笔

    创建

    在 ES5 及之前,对象的属性名都是通过字符串来表示的。Symbol 是 ES6 新增的第六种基本类型,也可以作为对象的声明属性名;

    let cat = Symbol();
    let animal = {};
    animal[cat] = "Tom";
    console.log(animal[cat]);   // 输出 Tom
    

    Symbol 默认接收一个可选参数,用于描述用途:

    let cat = Symbol("cat");
    

    用途

    Symbol 创建的变量具有唯一性:

    // ES5
    let dog1 = "dog"
    let dog2 = "dog"
    console.log(dog1 === dog2); // 输出 true
    // ES6
    let cat1 = Symbol("cat");
    let cat2 = Symbol("cat");
    console.log(cat1 === cat2); // 输出 false
    

    共享体系

    在全局环境下定义的 Symbol 可能会出现访问错乱的问题,此时需要使用 Symbol.for 的方式来声明变量:

    let cat1 = Symbol.for("cat");
    let cat2 = Symbol.for("cat");
    console.log(cat1); // 输出 Symbol(cat)
    console.log(cat1); // 输出 Symbol(cat)
    

    如果声明已存在,则直接取值,否则创建;

    强制类型转换

    在使用 console.log 输出 Symbol 时,会默认调用 toString 转换为字符串结果输出;但并未对其进行强制转换,依旧是 Symbol 类型:

    let cat = Symbol("cat");
    console.log(cat); // 输出 Symbol(cat)
    console.log("name:"+cat) // error
    

    Symbol 与其他五类基础类型均不可能相互转换;

    检索

    可以通过 Object.getOwnPropertySymbols 方法来枚举 Symbol 类型的属性:

    let cat = Symbol.for("cat");
    let animal = {
      [cat]: "cat",
    };
    animal["dog"] = "dog";
    console.log(Object.getOwnPropertySymbols(animal)); // 输出 [ Symbol(cat) ]
    

    相关文章

      网友评论

        本文标题:聊聊 ES6 中新增的 Symbol 类型

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