symbol 的引入是为了解决对象中的属性名冲突的问题

使用symbol() 函数生成的变量值不与任何的变量值相等,  所有用改变量的值做属性名是不会冲突的

symbol 可以转化为字符串, 可以转化为 boolean. 其余的运算不能参与

在对象中使用 symbol 必须使用方括号, 不能使用点, 引用也是如此

看来 symbol  只是生成一个不相等值的函数,

symbol 不能被普通的方法遍历

Reflect.ownKeys 可以获取到对象中的 symbol 的属性

Object.getOwnPropertyNames(obj)  可以获取 symbol

symbol的不能被普通的方法遍历可以利用做私有属性名

Symbol.for

可以看成 一个缓存堆, 如果这个堆中存在一个值, 就直接拿出来使用, 否则就是创建一个返回,  注意其值的获取方式是其描述是否是一致的

Symbol.keys

返回一个symbol 变量的描述, 只能是已经登记的(使用 symbol.for的)

语言内置的函数, 只是由字符串变为了 symbol的方式来引用,为的是不被冲突, 例如数组的某一个方法名 . 例如 Array[Symbol.hasinstance]

总结

  没发现 symbol 有什么必需的, 其作用就是生出一个不可能相同的值.

  感觉真是饶了一个弯子, symbol 可以保证一个对象中的不被冲突, 但是变量名怎么保证不冲突??

es6 中的 symbol的更多相关文章

  1. ES6中的Symbol类型

    前面的话 ES5中包含5种原始类型:字符串.数字.布尔值.null和undefined.ES6引入了第6种原始类型——Symbol ES5的对象属性名都是字符串,很容易造成属性名冲突.比如,使用了一个 ...

  2. ES6中的Symbol

    ---恢复内容开始--- Symbol 1.1 概述 保证每个属性的名字都是独一无二的就好了,这样就从根本上防止属性名的冲突.这就是 ES6 引入Symbol的原因 在es6之前,JavaScript ...

  3. 理解ES6中的Symbol

    一.为什么ES6引入Symbol 有时候我们在项目开发的过程中可能会遇到这样的问题,我写了一个对象,而另外的同时则在这个对象里面添加了一个属性或是方法,倘若添加的这个属性或是方法是原本的对象中本来就有 ...

  4. 深入了解JavaScript中的Symbol的使用方法

    这篇文章主要介绍了深入了解JavaScript中的Symbol的使用方法,本文针对ES6版本的JS进行讲解,需要的朋友可以参考下 Symbol 是什么? Symbols 不是图标,也不是指在代码中可以 ...

  5. ES6中关于数据类型的拓展:Symbol类型

    ES5中包含5种原始类型:字符串.数值.布尔值.null.undefined.ES6引入了第6种原始类型——Symbol. ES5的对象属性名都是字符串,很容易造成属性名冲突.比如,使用了一个他人提供 ...

  6. [每日一题]ES6中为什么要使用Symbol?

    关注「松宝写代码」,精选好文,每日面试题 加入我们一起学习,day day up 作者:saucxs | songEagle 来源:原创 一.前言 2020.12.23日刚立的flag,每日一题,题目 ...

  7. ES6中的新数据类型——Symbol

    今天小编和大家来聊一聊es6中新增的一个原始数据类型Symbol.在es5中原始数据类型(基本数据类型)有以下六种:Undefind.Null.Bool. String.Number.Object.今 ...

  8. ES6中的Set和Map集合

    前面的话 在ES6标准制定以前,由于可选的集合类型有限,数组使用的又是数值型索引,因而经常被用于创建队列和栈.如果需要使用非数值型索引,就会用非数组对象创建所需的数据结构,而这就是Set集合与Map集 ...

  9. ES6中的迭代器(Iterator)和生成器(Generator)

    前面的话 用循环语句迭代数据时,必须要初始化一个变量来记录每一次迭代在数据集合中的位置,而在许多编程语言中,已经开始通过程序化的方式用迭代器对象返回迭代过程中集合的每一个元素 迭代器的使用可以极大地简 ...

随机推荐

  1. 墨水屏 E-Paper module【转】

    转自:https://blog.csdn.net/smallmount123/article/details/77489196 https://www.digikey.com/product-deta ...

  2. codeforces 893F - Physical Education Lessons 动态开点线段树合并

    https://codeforces.com/contest/893/problem/F 题意: 给一个有根树, 多次查询,每次查询对于$x$i点的子树中,距离$x$小于等于$k$的所有点中权值最小的 ...

  3. [Linux]目录x权限对文件操作的影响

    问题 我们常使用linux以下命令 cd 进入目录 ls 列出目录中的文件 或者直接打开目录中的文件 以上操作对于目录权限位的设置来说,是有一定迷惑性的,如表格所示   cd进入该目录 cd进入该目录 ...

  4. Java——静态变量/方法与实例变量/方法的区别

    静态只能调用静态 非静态: 对象名.方法名 package ti; //通过两个类 StaticDemo.LX4_1 说明静态变量/方法与实例变量/方法的区别. class StaticDemo { ...

  5. IntelliJ IDEA运行eclipse的web项目报错的问题

    用IDEA已经有一段时间了, 由于之前的IDEA版本不支持Tomcat服务器, 所以很长一段时间web项目都是由eclipse开发调试. 今天闲来无事下载了一个最新版的IDEA, 按网上的教程, 尝试 ...

  6. docker修改默认存储位置

    前言:我这是默认安装的docker,所以其存放位置是/var/lib/docker,你可以发现是在/下面,之后你用docker 拉取的镜像文件也存放在这下面,这样就很快导致/空间爆满 1.修改配置文件 ...

  7. css中的宽度

    浏览器通过CSS对元素的盒子模型的描述进行页面渲染的.因此,元素的宽度受到父元素.css描述的影响. 通常,元素的宽度是指盒子模型中content-box所占用的宽度.也就是说,默认box-sizin ...

  8. Redis .NET操作

    Redis是一个支持数据结构更多的键值对数据库.它的值不仅可以是字符串等基本数据类型,也可以是类对象,更可以是Set.List.计数器等高级的数据结构. Memcached也可以保存类似于Set.Li ...

  9. docker 部署mvc项目 <四>

    一:部署方式 直接使用centos镜像,做一个镜像,此镜像制定端口号,在centos容器中安装jexus独立版,就可以了 docker run -d -p : -itd --name wds cent ...

  10. nuxt

    nuxt nuxt 1.4.0 https://zh.nuxtjs.org/guide/installation vue init nuxt-community/starter-template te ...