应用场景1:使用Symbol来作为对象属性名(key)
Symbol类型的key是不能通过Object.keys()或者for…in来枚举的,它未被包含在对象自身的属性名集合(property names)之中。所以,利用该特性,我们可以把一些不需要对外操作和访问的属性使用Symbol来定义。也正因为这样一个特性,当使用JSON.stringify()将对象转换成JSON字符串的时候,Symbol属性也会被排除在输出内容之外,我们可以利用这一特点来更好的设计我们的数据对象,让“对内操作”和“对外选择性输出”变得更加优雅。

应用场景2:使用Symbol来替代常量
我们经常定义一组常量来代表一种业务逻辑下的几个不同类型,我们通常希望这几个常量之间是唯一的关系,为了保证这一点,我们需要为常量赋一个唯一的值,有了Symbol,直接就保证了常量的值是唯一的了!

防止对象属性名称冲突
let mySymbol = Symbol();// 第一种写法
let a = {};
a[mySymbol] = 'Hello!';// 第二种写法
let a = {[mySymbol]: 'Hello!'
};// 第三种写法
let a = {};
Object.defineProperty(a, mySymbol, { value: 'Hello!' });// 以上写法都得到同样结果
a[mySymbol] // "Hello!"

应用场景3:使用Symbol定义类的私有属性/方法
使用它来定义的类属性是没有办法被模块外访问到的,可以达到了一个私有化的效果。

消除魔术字符串
const shapeType = {triangle: Symbol()
};function getArea(shape, options) {let area = 0;switch (shape) {case shapeType.triangle:area = .5 * options.width * options.height;break;}return area;
}getArea(shapeType.triangle, { width: 100, height: 100 });

总结:
用于创建独一无二的值,可做唯一key用于缓存等场景
用于创建类的私有变量,利用symbol属性不能被枚举的特性声明作为私有属性
用来重置对象的属性,比如 Symbol.toStringTag
可实现 Symbol.iterator迭代器, 让普通对象变为可迭代对象
使用Symbol.for(‘xxx’)获取全局的symbol值

简述 Symbol 类型用途相关推荐

  1. JavaScript 为什么要有 Symbol 类型?

    摘要: 为什么比怎么用更有意义. 原文:JavaScript 为什么要有 Symbol 类型 作者:前端小智 Symbols 是 ES6 引入了一个新的数据类型 ,它为 JS 带来了一些好处,尤其是对 ...

  2. 25.JavaScript的Symbol类型、隐藏属性、全局注册表

    文章目录 Symbol类型的使用 Symbol简介 Symbol类型的描述 Symbol不会隐式转字符串 Symbol类似作为对象的属性键 创建Symbol键 for-in中被跳过 隐藏自定义属性 S ...

  3. 简述电子计算机的用途和特点_华南理工大学2013春计算机基础作业1 -

    一.问答题 1. 简述电子计算机的用途和特点. 电子计算机的用途非常广泛,主要应用领域有: (1)科学计算. (2)自动控制.(3)信息处理.(4)计算机辅助设计.(5)人工智能. (6)网络通信.( ...

  4. [JavaScript] 好用的 JavaScript Symbol 类型

    初识Symbol 什么是Symbol? 可以理解它为一个标识,一般情况下用来解决重名问题. let hd = Symbol('hello,dust.') let edu = Symbol('good ...

  5. ES6笔记(4)-- Symbol类型

    系列文章 -- ES6笔记系列 Symbol是什么?中文意思是标志.记号,顾名思义,它可以用了做记号. 是的,它是一种标记的方法,被ES6引入作为一种新的数据类型,表示独一无二的值. 由此,JS的数据 ...

  6. ES6新特性_ES6对象添加Symbol类型属性---JavaScript_ECMAScript_ES6-ES11新特性工作笔记016

    然后我们再来看,给对象添加symbol类型的属性, 这个这样做的目的就是: 保证我们添加的方法或属性是唯一的,因为我们知道 我们的symbol这个属性是有唯一性的. 首先我们有个 let game = ...

  7. Symbol()类型的定义及特点

    前文我们提到了JavaScript中的两种数据类型的存储方式,在说到数据类型的时候,提到了ES6新增的一种数据类型:Symbol类型,这个类型的功能类似于一种标识唯一性的ID.Symbol类型属于Ja ...

  8. Allegro PCB的5种形状Symbol类型

    #1, Allegro PCB的5种形状Symbol类型 Allegro PCB种,有5种类型的Symbol,分别是Package Symbol.Mechanical Symbol.Format Sy ...

  9. 如何实现一个深拷贝(考虑循环引用对象、和symbol类型)

    文章目录 第一步:简单实现 第二步:拷贝数组 第三步:循环引用 1.使用哈希表 2.使用数组 第四步:拷贝 Symbol 第一步:简单实现 其实深拷贝可以拆分成 2 步,浅拷贝 + 递归,浅拷贝时判断 ...

最新文章

  1. Nginx禁止通过IP,未绑定域名访问服务器
  2. Java实现找出数组中重复次数最多的元素以及个数
  3. Java面试2021,java数据可视化项目
  4. 智能手机下,如何拯救你,我的孩子
  5. ionic路由(一)
  6. django-模型类关系
  7. linux proc大量文件夹,简析Linux中 /proc/[pid] 目录的各文件
  8. 软件测试测试用例编写 不超过7步骤_教你快速编写一个合格的测试用例!
  9. 0基础学python要多久-零基础自学python要多久?
  10. .net抽象类和抽象函数abstract
  11. cru使用教程_极客自习室 篇四:「教程向」给你显示器超个频呗!一键提升40%!省下好几百!...
  12. 我打算学计算机学英语,英语人教版八年级上册我打算学习计算机科学.doc
  13. cad打开服务器文件太慢,CAD打开文件很慢怎么处理
  14. JLINK V8更新固件
  15. 对接支付宝手机网站支付接口,alin10071
  16. 一键U盘装系统-【万能U盘启动盘制作工具】
  17. 用labview设计jk触发器_基于LabVIEW的基本触发器设计.doc
  18. 彻底理解单例设计模式
  19. Android 强制第三方应用横屏显示
  20. 通用内参抗体鸡尾酒套装说明书

热门文章

  1. MySQL二维表转一维表
  2. css行高(line-height)及文本垂直居中原理
  3. linux .gz文件 解压缩命令的简单使用
  4. Mysql隔离级别、锁及死锁
  5. 【MySQL】新版本特性
  6. 关于挑战杯答辩的收获
  7. cgb2110-day05
  8. 网络:TCP的三次握手
  9. java poi excel 视图-分页浏览 效果
  10. MVC开发模式环境搭建