摘要:是中一种新的数据类型。或许某天遇到什么需求可以派上用场。它是唯一的每个实例都是唯一的。对象属性正因为他是唯一的。他主要是可以通过它的唯一性代替常量。原来情况可以改用或者等,类似的情况。
symbol
symbol是ES6中一种新的数据类型。平时很少会用到,今天特意了解一下。或许某天遇到什么需求可以派上用场。
首先它是一种新的数据类型使用方法
let e = Symbol()
这样便创建了一个Symbol实例。如果我们用typeof来检查它,会返回symbol,一个新的类型。
typeof e //symbol它是唯一的
每个symbol实例都是唯一的。
let s1 = Symbol() let s2 = Symbol("another symbol") let s3 = Symbol("another symbol") s1 === s2 // false s2 === s3 // false对象属性
正因为他是唯一的。我们可以把他做对象的特定属性。
const PROP_NAME = Symbol() const PROP_AGE = Symbol() let obj = { [PROP_NAME]: "属性" [PROP_AGE] = 18 } obj[PROP_NAME] // "属性" obj[PROP_AGE] // 18对象中的Symbol不能普通方法列举
Symbol类型的key是不能通过Object.keys()或者for...in来枚举的,它未被包含在对象自身的属性名集合(property names)之中。
let obj = { [Symbol("name")]: "name", age: 18, title: "Engineer" } Object.keys(obj) // ["age", "title"] for (let p in obj) { console.log(p) // 分别会输出:"age" 和 "title" } Object.getOwnPropertyNames(obj) // ["age", "title"]
所以可以用Symbol存放一些不需要对外操作的属性。
枚举SymbolSymbol有自己特定的枚举方法。
// 使用Object的API Object.getOwnPropertySymbols(obj) // [Symbol(name)] // 使用新增的反射API Reflect.ownKeys(obj) // [Symbol(name), "age", "title"]场景
按他的特性来说能我遇到过需要Symbol用场景确实不是很多。他主要是可以通过它的唯一性代替常量。
// 原来情况 export const FECTH_PROJECT_ROOT = "fetchProjectRoot" export const DELETE_FILE = "deleteFile" let obj={ [FECTH_PROJECT_ROOT]:{ }, [DELETE_FILE]:{ } }
可以改用Symbol
export const FECTH_PROJECT_ROOT = Symbol(); export const DELETE_FILE = Symbol(); let obj={ [FECTH_PROJECT_ROOT]:{ }, [DELETE_FILE]:{ } }
或者switch等,类似的情况。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/105581.html
摘要:的码点被称为基本字符区域。关于的介绍,我准备用文档阮一峰来做一些介绍,具体的可以参考文档引入的原因的对象属性名都是字符串,这容易造成属性名的冲突。其他的一些属性可以去看文档阮一峰注意函数前不能使用命令,否则会报错。 笔记说明 重学前端是程劭非(winter)【前手机淘宝前端负责人】在极客时间开的一个专栏,每天10分钟,重构你的前端知识体系,笔者主要整理学习过程的一些要点笔记以及感悟,完...
摘要:的码点被称为基本字符区域。关于的介绍,我准备用文档阮一峰来做一些介绍,具体的可以参考文档引入的原因的对象属性名都是字符串,这容易造成属性名的冲突。其他的一些属性可以去看文档阮一峰注意函数前不能使用命令,否则会报错。 笔记说明 重学前端是程劭非(winter)【前手机淘宝前端负责人】在极客时间开的一个专栏,每天10分钟,重构你的前端知识体系,笔者主要整理学习过程的一些要点笔记以及感悟,完...
摘要:的码点被称为基本字符区域。关于的介绍,我准备用文档阮一峰来做一些介绍,具体的可以参考文档引入的原因的对象属性名都是字符串,这容易造成属性名的冲突。其他的一些属性可以去看文档阮一峰注意函数前不能使用命令,否则会报错。 笔记说明 重学前端是程劭非(winter)【前手机淘宝前端负责人】在极客时间开的一个专栏,每天10分钟,重构你的前端知识体系,笔者主要整理学习过程的一些要点笔记以及感悟,完...
摘要:也有类似的概念,它是根据传递的数据类型推断的。这个特性的名称被称为私有字段,虽然这不会使所有对象受益,但会使类实例的对象受益。警告中有一个功能会破坏代理的隐私。 showImg(https://segmentfault.com/img/bVbpL6y?w=800&h=456); Symbols 是 ES6 引入了一个新的数据类型 ,它为 JS 带来了一些好处,尤其是对象属性时。 但是,...
阅读 3169·2023-04-26 01:39
阅读 3329·2023-04-25 18:09
阅读 1589·2021-10-08 10:05
阅读 3205·2021-09-22 15:45
阅读 2714·2019-08-30 15:55
阅读 2358·2019-08-30 15:54
阅读 3129·2019-08-30 15:53
阅读 1306·2019-08-29 12:32