最近,在学习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数据类型相关推荐

  1. JS中的基本数据类型与引用数据类型

    JS中的数据类型可以这样分类: 原始数据类型: number, string ,boolean, undefined, null, symbol 基本类型(简单类型): 值类型: number((整数 ...

  2. JS中的原始数据类型

    首先声明JS中的数据类型分为 原始数据类型 Undefined, Null, Boolean, Number, Symbol,  String 对象数据类型 Object 其中可被执行的对象叫做函数或 ...

  3. JS中的六大数据类型 (笔记0)

    js中有六种数据类型,包括五种基本数据类型(Number,String,Boolean,Undefined,Null),和一种复杂数据类型(Object). typeof 操作符 由于js中的变量是松 ...

  4. JS中的原始数据类型(基础数据类型)和 引用数据类型

    文章目录 一.js的数据类型划分方式为 原始数据类型(基础数据类型)和 引用数据类型 二.两种类型的区别 1.存储位置不同 2.传值方式不同 3.两种数据类型在实参和形参中的区别 一.js的数据类型划 ...

  5. js中的基本数据类型有哪些?

    在js中有这俩种数据类型,一种为基本数据类型 ,另一种引用数据类型 基本数据类型分别为: Number(数值型),String(字符串类型),Boolean(布尔类型),Underfind(未定义), ...

  6. js中判断对象数据类型的方法

    javascript中有六种数据类型:string:boolean:Array:Object:null;undefined.如何检测这些数据类型呢,总结方法如下: 方法一:采用typeof var f ...

  7. JavaScript中的基本数据类型与引用数据类型

    JavaScript中的基本数据类型与引用数据类型 转载自:https://www.cnblogs.com/c2016c/articles/9328725.html 1.栈(stack)和堆(heap ...

  8. js中的闭包问题(持续更新)

    闭包,是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. 好啦说人话: "我的理解是,闭包就是能够读取其他函数内部变量的函数." ...

  9. js中的数组基本知识

    数组是js中的复杂数据类型之一,有的时候我们有大量的数据需要存储,而这个我们用简单数据存储就会浪费资源,所以我们就可以用数组来存储数据,数据是有序的值集合可以存储任意类型数据,但一般我们还是会去存储相 ...

最新文章

  1. android在线切图工具,9Cut切图工具
  2. libev源码解析——定时器监视器和组织形式
  3. 分享Kali Linux 2017年第11周镜像文件
  4. linux中sort命令
  5. 算法 排序 python 实现--快速排序
  6. 为踏实上进的【飞鸽传书】开发者而感动
  7. python manager模块_Python 并发模块
  8. Java学习中的不解
  9. 深入理解SpringBoot配置
  10. STM8S003串口printf及帧判断
  11. python中[-1]、[:-1]、[::-1]、[-1:-7:-1]的使用方法
  12. PHP字节转换,KB换算MG、GB、TB
  13. 隐藏高德地图左下角LOGO
  14. 工程下有一个红叉,但是可以照常运行
  15. 这篇文章告诉你:信息学奥赛的由来,几岁学对孩子有多重要性
  16. 与非营利朕亨基金会合作 Keybase将保密通讯软体结合加密货币
  17. AceAdmin-v1.4.0 下载
  18. LeetCode每日一题:927. 三等分 (困难) 数组 数学
  19. TortoiseGit使用指南
  20. Lr CC使用几何面板中的直立控件调整图片教程

热门文章

  1. 学计算机的学生用什么笔记本电脑,什么样的笔记本电脑对学生有好处?这再合适不过了!...
  2. 软件测试需要掌握哪些知识?软件测试基础理论
  3. 2021年上半年全球首席执行官任命达到创纪录水平,女性首席执行官翻了一番|美通社头条...
  4. 低分辨率人脸识别(LRFR)相关文章整理——(待更)
  5. CrossTalk典型串扰影响及其处理方法分析
  6. 从零搭建移动H5开发项目实战
  7. 中科院计算机所副研究员,中科院计算技术研究所副研究员 谭光明
  8. 把ubuntu安装在U盘的教程之一:制作U盘启动盘
  9. Android获取局域网所有设备的ip地址
  10. LINGO Error Code 122 和 237 出现原因及其解决方法