• 【JavaScript】Symbol 实例属性和方法


    以下内容为学习记录,可以参考 MDN 原文。

    环境

    • node v12.18.1
    • npm 6.14.5
    • vscode 1.46
    • Microsoft Edge 83

    概念

    定义在 Symbol 原型上的属性和方法。

    description

    description 是一个只读属性,它会返回 Symbol 对象的可选描述的字符串。

    console.log(Symbol('desc').description);
    // expected output: "desc"
    
    console.log(Symbol.iterator.description);
    // expected output: "Symbol.iterator"
    
    console.log(Symbol.for('foo').description);
    // expected output: "foo"
    
    console.log(`${Symbol('foo').description}bar`);
    // expected output: "foobar"
    

    toString

    toString() 方法返回当前 symbol 对象的字符串表示。覆盖Object.prototype.toString() 方法。

    console.log(Symbol('desc').toString());
    // expected output: "Symbol(desc)"
    
    console.log(Symbol.iterator.toString());
    // expected output: "Symbol(Symbol.iterator)
    
    console.log(Symbol.for('foo').toString());
    // expected output: "Symbol(foo)"
    
    // console.log(Symbol('foo') + 'bar');
    // expected output: Error: Can't convert symbol to string
    

    valueOf

    valueOf() 方法返回当前 symbol 对象所包含的 symbol 原始值。覆盖 Object.prototype.valueOf() 方法。

    Object(Symbol("foo")) + "bar";
    // TypeError: can't convert symbol object to primitive
    // 无法隐式的调用 valueOf() 方法
    
    Object(Symbol("foo")).valueOf() + "bar";
    // TypeError:  can't convert symbol to string
    // 手动调用 valueOf() 方法,虽然转换成了原始值,但 symbol 原始值不能转换为字符串
    
    Object(Symbol("foo")).toString() + "bar";
    // "Symbol(foo)bar",需要手动调用 toString() 方法才行
    

    [@@toPrimitive]

    @@toPrimitive 方法可将 Symbol 对象转换为原始值。

    const sym = Symbol("example");
    sym === sym[Symbol.toPrimitive](); // true
    
  • 相关阅读:
    Asp.net mvc 2 in action 笔记1 概述、Model
    持续集成(CI) 基础
    WCF Service的一些参考资源
    Flash Builder4.5 + BladeDS + Java 集成实例
    .net GC知识点滴
    Silverlight的工具推荐
    php异常处理技术,顶级异常处理器
    【转】理解MySQL——索引与优化
    Zend_Controller的工作流程
    PHP set_error_handler() 函数
  • 原文地址:https://www.cnblogs.com/jiangbo44/p/13557349.html
Copyright © 2020-2023  润新知