首页 > 其他分享 >关于Symbol

关于Symbol

时间:2023-07-05 16:37:45浏览次数:29  
标签:console log Symbol Object let 关于 mySymbol

一、概念

Symbol是ECMAScript 6新增的基本数据类型。Symbol是原始值,且Symbol实例是唯一、不可变的。Symbol的用途是确保对象属性使用唯一标识符,不会发生属性冲突的危险。

二、基本使用

作为对象的属性,有以下三种书写方式:打印结果都是‘hello’

第一种 第二种 第三种

let mySymbol = Symbol()
let a = {}
a.mySymbol = 'hello'
console.log(a[mySymbol])

let mySymbol = Symbol()
let a = {
[mySymbol]: 'hello'
}
console.log(a[mySymbol])

let mySymbol = Symbol()
let a = {}
Object.defineProperty(a,mySymbol,{value: 'hello'})

注意:因为symbol是原始类型,所以typeof操作符对其返回symbol

let sym = Symbol();
console.log(typeof sym);      // symbol

三、symbol参数

调用Symbol()函数时,也可以传入一个字符串参数作为对符号的描述(description),将来可以通过这个字符串来调试代码。如下案例:

 let s = Symbol('a')
 let ss = Symbol('a')
 console.log(s == 's')      // false

分析:字符串a表示一种修饰,对你当前创建Symbol类型的一种修饰,作为区分使用,否则当你创建多个Symbol数据时,容易混淆。

 四、唯一性

上述三中的案例也能看出来symbol具有唯一性特点。

五、遍历

Symbol作为属性名,该属性不会出现在for…in,for…of循环中,也不会被Object.keys(),Object.getOwnPropertyNames(),JSON.stringify()返回。所以我们可以用Object.getOwnPropertySymbols方法,获取指定对象的所有Symbol属性名。

新API方法:Reflect.ownKeys(),可以返回对象所有的属性,包含Symbol属性。

getOwnPropertyDescriptors():获取指定对象的自身属性描述符

 1 let person = {
 2     name:'小明',
 3     age: 12,
 4     [Symbol('level')]: 'A'
 5 }
 6 console.log((Object.keys((person))))
 7 console.log(Object.getOwnPropertyNames(person))
 8 console.log(Object.getOwnPropertySymbols(person))
 9 console.log(Reflect.ownKeys(person))
10 console.log(Object.getOwnPropertyDescriptors(person))

结果:

 

标签:console,log,Symbol,Object,let,关于,mySymbol
From: https://www.cnblogs.com/heisetianshi/p/17528433.html

相关文章

  • 关于沧一信竞发展的观点
    Q.沧一的现状如何A.高一(2022级)的生源貌似不太好,上回五校联考被泊头一中吊打,比如数学被甩了十几分,当然也可能是泊头一中太厉害了,泊头一中新高一已经打过邯郸一中了。所以现在的不等式链条为沧一<邯郸一中<泊头一中。所以这次五校联考高一只让北大班参加,贻笑大方。Q.如何看待河......
  • 金蝶Apusic 应用服务器9.0版本上,springboot项目关于文件上传的一个问题
    金蝶Apusic应用服务器9.0版本上,springboot项目关于文件上传的一个问题 项目部署在金蝶v9上使用文件上传时,请求接口获取不到参数。但是在本地启动应用是可以获取到参数,没有任何问题。 @RequestMapping("doUpload")publicvoiddoUpload(DocAttaPagepage,@RequestParam(val......
  • 关于白屏???
     白屏是指在网页加载过程中,页面内容不能正常展示,只显示空白页面的情况。 导致白屏的原因有很多,下面简单分析一下导致白屏的一些主要原因:1、网络问题导致加载失败:  可能因为网络问题导致资源无法正常加载而导致页面空白。还可能由于服务器故障、网络连接问题或资源路径错......
  • 关于Java已死,看看国外开发者怎么说的
    博主在浏览medium社区时,发现了一篇点赞量1.5k的文章,名称叫《JavaisDead—5MisconceptionsofdevelopersthatstillthinkJavaisrelevanttoday!》直译过来就是《Java已死—开发人员对Java在现代编程语言中的5个误解》。这篇文章可以说是标题党得典范,热度全靠标......
  • es6 中Symbol
    letgame={up:function(){console.log("upmethods!")},down:function(){console.log("downmethods!")}}//es6symbol用法可以给已经封装好的方法上加上方法letmethods={up:Symbol(),down:Symbol()}......
  • 关于spring-cloud-starter-alibaba-nacos-discovery找不到,没有版本(pom爆红,找不到)
    #一,我这边发现每次项目都有经常发生这样的问题问题:这种问题说实话很弱智,但还是有类似于这种事情发生啊原因:1.在POM依赖没有版本的时候,可能原因是父工程或者父依赖中没有指定版本,所以在子工程中找不到版本(本次错误)2.还有就是父工程有版本,或者子工程也有版本的时候,此时就是本地......
  • LeetCode 周赛 352(2023/07/02)一场关于子数组的专题周赛
    本文已收录到AndroidFamily,技术和职场问题,请关注公众号[彭旭锐]和[BaguTreePro]知识星球提问。往期回顾:LeetCode单周赛第350场·滑动窗口与离散化模板题单周赛352概览T1. 最长奇偶子数组(Easy)标签:滑动窗口、枚举T2. 和等于目标值的质数对(Medium)标签:质......
  • 关于JAVA项目公共字段自动填充的理解
    公共字段字段填充是什么? “公共字段自动填充”顾名思义,其实就是省略了在程序当中对某些字段手动填写的步骤,大大提高了效率! 为什么要使用公共字段填充技术在我们的程序当中? 在我们项目的开发中,当我们在修改数据库中的某些值的时候,有一些字段属于公共子段,就是有些字段不仅是......
  • 关于mysql存储引擎、管理和维护概述
    数据库的存储引擎是数据库的底层软件组件,数据库管理系统使用数据库引擎进行增删查改的操作。mysql的核心就是数据库引擎。mysql5.7支持的存储引擎有innoDBMyISAMMemory可以通过showengines。InnoDB存储引擎:1.InnoDB给mysql提供了具有提交,回滚,崩溃恢复的功能的事务能力的安......
  • 关于时钟
    参考https://zhuanlan.zhihu.com/p/405934692《硬件架构的艺术》1.同步时钟&异步时钟1.1同步时钟如果多个时钟都起源于同一时钟,并且它们的相位和频率关系是已知的,那么它们可以看成是同步时钟。同源同频同相位来源于同一时钟源,频率和相位都是相同的。只需要满......