ES6笔记-symbol

ES6 symbol 是什么

ES5的对象属性名是字符串,这容易造成属性名的冲突。symbol是一种机制,保证每个属性的名字都是独一无二的。这样就从根本上防止属性名冲突。

它是一种原始数据类型Symbol,表示独一无二的值。它属于javaScript语言的原生数据类型之一。其他数据类型是,undefinde,null, 布尔值(Boolean),字符串(String),数值(Number),大整数(BigInt),对象(object)

symbol值通过symbol()函数生成。这也就是说,对象的属性名现在可以有两种类型,一种是原来就有的字符串,另一种是新增的Symbol类型。凡是属性名属于Symbol类型,就都是独一无二的,可以保证不会与其他属性名产生冲突

Symbol()函数不能使用new命令 ,否则会报错。这是因为Symbol是一个原始类型的值,不是对象,所以不能用new命令来调用。Symbol值不是对象,所以也不能添加属性。基本上,它是一种类似字符串的数据类型

Symbol()函数的参数只是对当前Symbol值的描述,因此相同参数的Symbol函数返回值是不相等的

Symbol值不能与其他类型的值进行运算,会报错

Symbol()函数创建symbol值时,可以用参数添加一个描述

但是读取这个方法要将symbol显示转换为字符串

由于每一个symbol值都是不相等的,这意味着只要symbol值作为标识符,用于对象的属性名,就能保证不会出现同名属性。这对于一个对象由多个模块构成的情况非常有用,能防止某一个键不小心改写覆盖
属性名遍历

symbol值作为属性名,遍历对象的时候,该属性不会出现在for…in,for…of循环中,也不会被object.keys(),object.getownproppertyNames(),json.stringify()返回
但是它也是一个私有属性有一个object.getownPropertysymbols()方法,可以获取指定对象的所有symbol属性名。该方法返回一个数组,成员是当前对象的所有用作属性名的symbol值

reflect.ownkeys()方法阶梯返回所有类型的键名,包括常规键和symbol键名

有时我能希望使用同一个symbol值,symbol.for()方法可以做到这一点。它接受一个字符串作为参数,然后搜索没有以该参数作为名称的symbol值。如果有,就返回这个symbol值,否则就新建一个以该字符串为名称的symbol值,并将其注册到全局

symbol.for()与symbol()这两种写法都会生成新的symbol。它们的区别是,前者会被登记在全局环境中共搜索,后者不会。symbol.for()不会每次调用就返回一个新的symbol类型的值,而是会先检查给定的key是否已经存在,如果不存在才会新建一个值。

Symbol.keyFor()方法返回一个已登记的symbol类型的key

由于symbol没有登记机制,所以用symbol创建的会返回undefinde

相关推荐

  1. ES6笔记-symbol

    2024-01-24 13:56:03       31 阅读
  2. ES6Symbol详解

    2024-01-24 13:56:03       18 阅读
  3. ES6新增的 Symbol

    2024-01-24 13:56:03       40 阅读
  4. ES6之原始数据类型Symbol

    2024-01-24 13:56:03       31 阅读
  5. 详解ES6中的symbol

    2024-01-24 13:56:03       31 阅读
  6. es6Symbol 独一无二的值

    2024-01-24 13:56:03       14 阅读
  7. ES6中新增的基本数据类型----symbol

    2024-01-24 13:56:03       30 阅读
  8. ES6笔记总结

    2024-01-24 13:56:03       29 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-24 13:56:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-24 13:56:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-24 13:56:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-24 13:56:03       20 阅读

热门阅读

  1. 最小生成树 prim + kruskal

    2024-01-24 13:56:03       28 阅读
  2. NLP自然语言处理介绍

    2024-01-24 13:56:03       34 阅读
  3. 2024.1.20 Python学习笔记7:字符串常见处理函数

    2024-01-24 13:56:03       33 阅读
  4. C++中模板的使用

    2024-01-24 13:56:03       36 阅读
  5. Python之list

    2024-01-24 13:56:03       26 阅读
  6. 行内样式css不生效

    2024-01-24 13:56:03       36 阅读
  7. 1.23 力扣图论

    2024-01-24 13:56:03       35 阅读
  8. LeetCode 49 字母异位词分组

    2024-01-24 13:56:03       39 阅读
  9. 文心一言 VS ChatGPT

    2024-01-24 13:56:03       37 阅读