美文网首页
ES6 JavaScript中Symbol的作用

ES6 JavaScript中Symbol的作用

作者: mudssky | 来源:发表于2022-07-07 10:11 被阅读0次

ES6 JavaScript中Symbol的作用

从一开始接触es6,两三年了,JavaScript中有7种原始数据类型.

但是这个Symbol一直不知道有什么作用,不像es2020新出的bigint很好理解,就是大数运算用的,平时基本用不上,而且typescript没有支持这个语法编译到es5.

网上查了几篇文章,总结就是,Symbol的主要作用是作为对象的属性.

因为Symbol有两个特性

  1. 没有两个Symbol是相等的
  2. Symbol 数据值可以作为对象属性名(Symbol没出之前只能是字符串)

所以Symbol主要有以下两个使用场景

  1. 作为对象属性 当一个复杂对象中含有多个属性的时候,很容易将某个属性名覆盖掉,利用 Symbol 值作为属性名可以很好的避免这一现象。
const name = Symbol('name');
const obj = {
    [name]: 'zhangsan',
}
  1. 模拟类的私有方法

ES6 中的类是没有 private 关键字来声明类的私有方法和私有变量的,但是我们可以利用 Symbol 的唯一性来模拟。

因为使用者在外部无法创建一个一样的speak,所以就无法在外部调用到这个方法

const speak = Symbol()
class Person {
    [speak]() {
        ...
    }
}

Symbol相关方法

let sym1 = Symbol('sym')
let sym2 = Symbol('sym')
console.log(sym1==sym2) ;  // 输出 false

全局符号注册表

symbol.for() 可以在全局注册symbol

symbol.for() 会先检查全局运行时注册表,如果不存在则创建一个 symbol 实例并将其添加到全局符号注册表中,如果存在则直接返回该 symbol 实例。

let sym1 = Symbol.for('sym')
let sym2 = Symbol.for('sym')
console.log(sym1==sym2) ;  // 输出 true

使用 Symbol.keyFor()来查询全局符号注册表。通过接收参数为 symbol 类型,返回该 symbol 对应的字符串键,如果查询不到则返回 undefined

let s = Symbol.for('sym'); 
console.log(Symbol.keyFor(s)); // sym
console.log(Symbol.keyFor(s2)); // 报错 TypeError: s2 is not a symbol

常用内置 symbol

  • Symbol.hasInstance方法,会被instanceof运算符调用。构造器对象用来识别一个对象是否是其实例。

  • Symbol.isConcatSpreadable布尔值,表示当在一个对象上调用Array.prototype.concat时,这个对象的数组元素是否可展开。

  • Symbol.iterator方法,被for-of语句调用。返回对象的默认迭代器。

  • Symbol.match方法,被String.prototype.match调用。正则表达式用来匹配字符串。

  • Symbol.replace方法,被String.prototype.replace调用。正则表达式用来替换字符串中匹配的子串。

  • Symbol.search方法,被String.prototype.search调用。正则表达式返回被匹配部分在字符串中的索引。

  • Symbol.species函数值,为一个构造函数。用来创建派生对象。

  • Symbol.split方法,被String.prototype.split调用。正则表达式来用分割字符串。

  • Symbol.toPrimitive方法,被ToPrimitive抽象操作调用。把对象转换为相应的原始值。

  • Symbol.toStringTag方法,被内置方法Object.prototype.toString调用。返回创建对象时默认的字符串描述。

  • Symbol.unscopables对象,它自己拥有的属性会被with作用域排除在外。

相关文章

  • ES6 JavaScript中Symbol的作用

    ES6 JavaScript中Symbol的作用 从一开始接触es6,两三年了,JavaScript中有7种原始数...

  • ES6 中的 Symbol

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

  • ES6补充以及Node事件轮询

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

  • JavaScript语言类型

    内置类型 JavaScript有七种内置类型(包含ES6的symbol): null undefined stri...

  • JavaSctipt 语言类型和类型检测

    内置类型 JavaScript目前有八种内置类型(包含ES6的symbol): null undefined st...

  • 快速了解Es6中的Symbol

    Symbol是Es6中的一个新特性,它是一个基本数据类型。 javascript从Es6起,基本数据类型变为6种 ...

  • Symbol

    Symbol概念## ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值。它是 JavaScript...

  • ES6 新增数据类型

    一、Symbol ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值。它是 JavaScript 语...

  • ES6-Symbol

    初识Symbol ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值。它是 JavaScript 语...

  • ES6学习-Symbol

    1.Symbol ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值。它是JavaScript语言的...

网友评论

      本文标题:ES6 JavaScript中Symbol的作用

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