简述 Symbol 类型用途
应用场景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 类型用途相关推荐
- JavaScript 为什么要有 Symbol 类型?
摘要: 为什么比怎么用更有意义. 原文:JavaScript 为什么要有 Symbol 类型 作者:前端小智 Symbols 是 ES6 引入了一个新的数据类型 ,它为 JS 带来了一些好处,尤其是对 ...
- 25.JavaScript的Symbol类型、隐藏属性、全局注册表
文章目录 Symbol类型的使用 Symbol简介 Symbol类型的描述 Symbol不会隐式转字符串 Symbol类似作为对象的属性键 创建Symbol键 for-in中被跳过 隐藏自定义属性 S ...
- 简述电子计算机的用途和特点_华南理工大学2013春计算机基础作业1 -
一.问答题 1. 简述电子计算机的用途和特点. 电子计算机的用途非常广泛,主要应用领域有: (1)科学计算. (2)自动控制.(3)信息处理.(4)计算机辅助设计.(5)人工智能. (6)网络通信.( ...
- [JavaScript] 好用的 JavaScript Symbol 类型
初识Symbol 什么是Symbol? 可以理解它为一个标识,一般情况下用来解决重名问题. let hd = Symbol('hello,dust.') let edu = Symbol('good ...
- ES6笔记(4)-- Symbol类型
系列文章 -- ES6笔记系列 Symbol是什么?中文意思是标志.记号,顾名思义,它可以用了做记号. 是的,它是一种标记的方法,被ES6引入作为一种新的数据类型,表示独一无二的值. 由此,JS的数据 ...
- ES6新特性_ES6对象添加Symbol类型属性---JavaScript_ECMAScript_ES6-ES11新特性工作笔记016
然后我们再来看,给对象添加symbol类型的属性, 这个这样做的目的就是: 保证我们添加的方法或属性是唯一的,因为我们知道 我们的symbol这个属性是有唯一性的. 首先我们有个 let game = ...
- Symbol()类型的定义及特点
前文我们提到了JavaScript中的两种数据类型的存储方式,在说到数据类型的时候,提到了ES6新增的一种数据类型:Symbol类型,这个类型的功能类似于一种标识唯一性的ID.Symbol类型属于Ja ...
- Allegro PCB的5种形状Symbol类型
#1, Allegro PCB的5种形状Symbol类型 Allegro PCB种,有5种类型的Symbol,分别是Package Symbol.Mechanical Symbol.Format Sy ...
- 如何实现一个深拷贝(考虑循环引用对象、和symbol类型)
文章目录 第一步:简单实现 第二步:拷贝数组 第三步:循环引用 1.使用哈希表 2.使用数组 第四步:拷贝 Symbol 第一步:简单实现 其实深拷贝可以拆分成 2 步,浅拷贝 + 递归,浅拷贝时判断 ...
最新文章
- Nginx禁止通过IP,未绑定域名访问服务器
- Java实现找出数组中重复次数最多的元素以及个数
- Java面试2021,java数据可视化项目
- 智能手机下,如何拯救你,我的孩子
- ionic路由(一)
- django-模型类关系
- linux proc大量文件夹,简析Linux中 /proc/[pid] 目录的各文件
- 软件测试测试用例编写 不超过7步骤_教你快速编写一个合格的测试用例!
- 0基础学python要多久-零基础自学python要多久?
- .net抽象类和抽象函数abstract
- cru使用教程_极客自习室 篇四:「教程向」给你显示器超个频呗!一键提升40%!省下好几百!...
- 我打算学计算机学英语,英语人教版八年级上册我打算学习计算机科学.doc
- cad打开服务器文件太慢,CAD打开文件很慢怎么处理
- JLINK V8更新固件
- 对接支付宝手机网站支付接口,alin10071
- 一键U盘装系统-【万能U盘启动盘制作工具】
- 用labview设计jk触发器_基于LabVIEW的基本触发器设计.doc
- 彻底理解单例设计模式
- Android 强制第三方应用横屏显示
- 通用内参抗体鸡尾酒套装说明书