js中的Symbol数据类型
最近,在学习vue的过程中碰到了一种从没有遇到过的数据类型:Symbol
查阅资料后,发现这是一种在ES6 中新添加的数据类型,好奇之下研究了下。
Symbol 本质上是一种唯一标识符,可用作对象的唯一属性名,这样其他人就不会改写或覆盖你设置的属性值。
声明方法:
let id = Symbol("id“);
Symbol 数据类型的特点是唯一性,即使是用同一个变量生成的值也不相等。
let id1 = Symbol('id');let id2 = Symbol('id');console.log(id1 == id2); //false
Symbol 数据类型的另一特点是隐藏性,for···in,object.keys() 不能访问
let id = Symbol("id");let obj = {[id]:'symbol'};for(let option in obj){console.log(obj[option]); //空}
但是也有能够访问的方法:Object.getOwnPropertySymbols
Object.getOwnPropertySymbols 方法会返回一个数组,成员是当前对象的所有用作属性名的 Symbol 值。
let id = Symbol("id");let obj = {[id]:'symbol'};
let array = Object.getOwnPropertySymbols(obj);console.log(array); //[Symbol(id)]console.log(obj[array[0]]); //'symbol'
虽然这样保证了Symbol的唯一性,但我们不排除希望能够多次使用同一个symbol值的情况。
为此,官方提供了全局注册并登记的方法:Symbol.for()
let name1 = Symbol.for('name'); //检测到未创建后新建let name2 = Symbol.for('name'); //检测到已创建后返回console.log(name1 === name2); // true
通过这种方法就可以通过参数值获取到全局的symbol对象了,反之,能不能通过symbol对象获取到参数值呢?
是可以的 ,通过Symbol.keyFor()
let name1 = Symbol.for('name');let name2 = Symbol.for('name');console.log(Symbol.keyFor(name1)); // 'name'console.log(Symbol.keyFor(name2)); // 'name'
最后,提醒大家一点,在创建symbol类型数据 时的参数只是作为标识使用,所以 Symbol() 也是可以的。
参考资料:http://es6.ruanyifeng.com/#docs/symbol
js中的Symbol数据类型相关推荐
- JS中的基本数据类型与引用数据类型
JS中的数据类型可以这样分类: 原始数据类型: number, string ,boolean, undefined, null, symbol 基本类型(简单类型): 值类型: number((整数 ...
- JS中的原始数据类型
首先声明JS中的数据类型分为 原始数据类型 Undefined, Null, Boolean, Number, Symbol, String 对象数据类型 Object 其中可被执行的对象叫做函数或 ...
- JS中的六大数据类型 (笔记0)
js中有六种数据类型,包括五种基本数据类型(Number,String,Boolean,Undefined,Null),和一种复杂数据类型(Object). typeof 操作符 由于js中的变量是松 ...
- JS中的原始数据类型(基础数据类型)和 引用数据类型
文章目录 一.js的数据类型划分方式为 原始数据类型(基础数据类型)和 引用数据类型 二.两种类型的区别 1.存储位置不同 2.传值方式不同 3.两种数据类型在实参和形参中的区别 一.js的数据类型划 ...
- js中的基本数据类型有哪些?
在js中有这俩种数据类型,一种为基本数据类型 ,另一种引用数据类型 基本数据类型分别为: Number(数值型),String(字符串类型),Boolean(布尔类型),Underfind(未定义), ...
- js中判断对象数据类型的方法
javascript中有六种数据类型:string:boolean:Array:Object:null;undefined.如何检测这些数据类型呢,总结方法如下: 方法一:采用typeof var f ...
- JavaScript中的基本数据类型与引用数据类型
JavaScript中的基本数据类型与引用数据类型 转载自:https://www.cnblogs.com/c2016c/articles/9328725.html 1.栈(stack)和堆(heap ...
- js中的闭包问题(持续更新)
闭包,是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. 好啦说人话: "我的理解是,闭包就是能够读取其他函数内部变量的函数." ...
- js中的数组基本知识
数组是js中的复杂数据类型之一,有的时候我们有大量的数据需要存储,而这个我们用简单数据存储就会浪费资源,所以我们就可以用数组来存储数据,数据是有序的值集合可以存储任意类型数据,但一般我们还是会去存储相 ...
最新文章
- android在线切图工具,9Cut切图工具
- libev源码解析——定时器监视器和组织形式
- 分享Kali Linux 2017年第11周镜像文件
- linux中sort命令
- 算法 排序 python 实现--快速排序
- 为踏实上进的【飞鸽传书】开发者而感动
- python manager模块_Python 并发模块
- Java学习中的不解
- 深入理解SpringBoot配置
- STM8S003串口printf及帧判断
- python中[-1]、[:-1]、[::-1]、[-1:-7:-1]的使用方法
- PHP字节转换,KB换算MG、GB、TB
- 隐藏高德地图左下角LOGO
- 工程下有一个红叉,但是可以照常运行
- 这篇文章告诉你:信息学奥赛的由来,几岁学对孩子有多重要性
- 与非营利朕亨基金会合作 Keybase将保密通讯软体结合加密货币
- AceAdmin-v1.4.0 下载
- LeetCode每日一题:927. 三等分 (困难) 数组 数学
- TortoiseGit使用指南
- Lr CC使用几何面板中的直立控件调整图片教程
热门文章
- 学计算机的学生用什么笔记本电脑,什么样的笔记本电脑对学生有好处?这再合适不过了!...
- 软件测试需要掌握哪些知识?软件测试基础理论
- 2021年上半年全球首席执行官任命达到创纪录水平,女性首席执行官翻了一番|美通社头条...
- 低分辨率人脸识别(LRFR)相关文章整理——(待更)
- CrossTalk典型串扰影响及其处理方法分析
- 从零搭建移动H5开发项目实战
- 中科院计算机所副研究员,中科院计算技术研究所副研究员 谭光明
- 把ubuntu安装在U盘的教程之一:制作U盘启动盘
- Android获取局域网所有设备的ip地址
- LINGO Error Code 122 和 237 出现原因及其解决方法