symbol和Biglnt的基本使用
Symbol是什么
- Symbol是ES6中新增的一个基本数据类型,翻译为符号。
- 在ES6之前,对象的属性名都是字符串形式,那么很容易造成属性名冲突;
- 比如原来有一个对象,我们希望在其中添加一个新的属性和值,但是我们在不确定它原来内部有什么内容的情况下,很容易造成冲突,从而覆盖掉它内部的某个属性;
- 或者开发中我们使用混入,那么混入中出现了同名的属性,必然有一个会被覆盖掉。
- 使用sumbol会生成一个独一无二的值,永远不会覆盖前面的值
- symbol的值是通过symbol函数来生成的,生成后可以作为属性名;
- 对象的属性名可以使用字符串,也可以使用symbol值;
-
const a = Symbol(); //调用symbol const b = Symbol(); const obj = { [a]: 1, //将a作为obj的键 }; obj[b] = 2; //将b作为obj的键 console.log(obj); //输出对象
- symbol即使多次创建值,他们也是不同的
- symbol函数执行后每次创建出来的值都是独一无二的;
- 我们也可以在创建symbol值的时候传入一个描述description(这是es10新增特性)
获取symbol对应的key
-
console.log(Object.keys(obj)); //获取不到symbol console.log(Object.getOwnPropertySymbols(obj)); //单独获取symbol数组 const Symbolkeys = Object.getOwnPropertySymbols(obj); //得到sumbol键的值 for (const key of Symbolkeys) { console.log(obj[key]); }
创建相同的Symbol
- 我们可以使用Symbol.for来做到这一点
- 并且可以通过Symbol.keyFor方法来截取对应的key
-
const s3 = Symbol("ccc");//ccc是symbol的一个解释 console.log(s3.description); //得到s3里面的ccc const s4 = Symbol.for("aa"); const s5 = Symbol.for("aa"); console.log(s4 == s5); //得到true console.log(Symbol.keyFor(s5));//得到s5里面的值
biglnt是什么
- 在早期的javascript中,我们不能正确的使用过大的数字
- 大于MAX_SAFE_INTEGER的数值,表示的可能是不正确的。
- 在ES11中,引入了新的数据类型Bigint,用于表示大的整数
- Biglnt的表示方法是在数值的后面加上n
-
const max = Number.MAX_SAFE_INTEGER; console.log(max); //得到 9007199254740991 console.log(max + 2); //得到 9007199254740992;正确是//得到 9007199254740993 const max1 = 9007199254740993; //得到 9007199254740991; const max2 = 9007199254740993n; //得 9007199254740993n; console.log(max1, max2);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构