摘要:是中一种新的数据类型。或许某天遇到什么需求可以派上用场。它是唯一的每个实例都是唯一的。对象属性正因为他是唯一的。他主要是可以通过它的唯一性代替常量。原来情况可以改用或者等,类似的情况。
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 带来了一些好处,尤其是对象属性时。 但是,...
阅读 3319·2023-04-26 01:39
阅读 3443·2023-04-25 18:09
阅读 1699·2021-10-08 10:05
阅读 3357·2021-09-22 15:45
阅读 2948·2019-08-30 15:55
阅读 2515·2019-08-30 15:54
阅读 3235·2019-08-30 15:53
阅读 1398·2019-08-29 12:32
极致性价比!云服务器续费无忧!
Tesla A100/A800、Tesla V100S等多种GPU云主机特惠2折起,不限台数,续费同价。
NVIDIA RTX 40系,高性价比推理显卡,满足AI应用场景需要。
乌兰察布+上海青浦,满足东推西训AI场景需要