ES6 Symbol

作者: Cherry丶小丸子 | 来源:发表于2023-02-23 14:59 被阅读0次

ES6 引入了一种新的原始数据类型 Symbol,表示独一无二的值

ES5 的对象属性名都是字符串,这容易造成属性名的冲突。比如,你使用了一个他人提供的对象,但又想为这个对象添加新的方法(mixin 模式),新方法的名字就有可能与现有方法产生冲突。如果有一种机制,保证每个属性的名字都是独一无二的就好了,这样就从根本上防止属性名的冲突。这就是 ES6 引入 Symbol 的原因

Symbol 值通过 Symbol() 函数生成

Symbol() 函数可以接受一个字符串作为参数

let s1 = Symbol('foo');
let s2 = Symbol('bar');

s1 // Symbol(foo)
s2 // Symbol(bar)

s1.toString() // "Symbol(foo)"
s2.toString() // "Symbol(bar)"

如果 Symbol 的参数是一个对象,就会调用该对象的 toString() 方法,将其转为字符串,然后才生成一个 Symbol 值

const obj = {
    toString() {
        return 'abc';
    }
};
const sym = Symbol(obj);
sym // Symbol(abc)

注意,Symbol() 函数的参数只是表示对当前 Symbol 值的描述,因此相同参数的 Symbol 函数的返回值是不相等的

// 没有参数的情况
let s1 = Symbol();
let s2 = Symbol();

s1 === s2 // false

// 有参数的情况
let s1 = Symbol('foo');
let s2 = Symbol('foo');

s1 === s2 // false

Symbol 值不能与其他类型的值进行运算,会报错

let sym = Symbol('My symbol');

"your symbol is " + sym
// TypeError: can't convert symbol to string
`your symbol is ${sym}`
// TypeError: can't convert symbol to string
Symbol.prototype.description
// 返回 Symbol 值的描述
const sym = Symbol('foo');
sym.description // "foo"

相关文章

  • ES6补充以及Node事件轮询

    Symbol es6中新增了symbol类型,symbol类型的值是通过symbol函数生成的,相同symbol函...

  • 深入理解ES6六

    Symbol ES6新增的数据类型Symbol 创建Symbol:通过去全局的Symbol函数创建一个Symbol...

  • es6中的数据类型之symbol

    1. symbol es6中的数据类型有:number, boolean, string, symbol, nul...

  • 2018-08-06 第一天课 ES6前奏

    1.Symbol ES6新增的 数据类型 -基本类型 值是由Symbol 函数 调用产生的 相同的Symbol 函...

  • JavaSctipt基础归纳,以及隐式转换的规则

    原始类型: "symbol" 是ES6,新扩展的原始类型;Symbol,表示独一无二的值。Symbol 值通过Sy...

  • Symbol

    es6新增数据类型 -- 基本类型 值是由symbol函数调用产生的 Symbol的基本用法 Symbol的使用属...

  • ES6 中的 Symbol

    JavaScript 之 Symbol Symbol是什么 Symbol是ES6中新引入的一种基本数据类型。Sym...

  • Symbol

    Symbol ES6引入了一种新的原始数据类型Symbol,表示独一无二的值.Symbol值通过Symbol函数生...

  • Symbol And Iterator

    Symbol Symbol是es6新引入的一种数据类型,表示一个独一无二的值,Symbol 值通过Symbol函数...

  • Symbol《understanding ECMAScipt6》

    什么是Symbol ES6 新增的类型 原始类型 如何创建Symbol 可以通过new Object( Symbo...

网友评论

    本文标题:ES6 Symbol

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