| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> JavaScript知识库 -> Symbol的基本使用 -> 正文阅读 |
|
[JavaScript知识库]Symbol的基本使用 |
Symbol的介绍????????ES6引入了一种新的原始数据类型Symbol,表示独一无二的值。它是Javascript语言的第七种数据类型。 ????????ES5对象属性名都是字符串,这容易造成属性名的冲突。为了解决这个问题引入了Symbol类型来解决命名冲突的问题。 ????????Symbol值通过Symbol函数生成,也就是说,对象的属性名现在可以有两种形类型,一种是原来就有的字符串,另一种就是新增的Symbol类型。 Symbol的特点
认识Symbol?Symobol函数可以接受一个字符串作为参数,用来区分或者描述Symbol实例。
如果Symbol的参数传递的是一个对象,那么它内部会调用toString方法将对象转为字符串,在生成一个Symbol值。
相同参数创建出来的Symbol值是不相等的
Symbol的值不能与其他类型的值进行运算,如果进行运算会报错。
Symbol可以显示转为字符串。
Symbol也可以转为Boolean值
Symbol作为对象的属性名????????前面我们说到每一个Symbol的值都是不相等的,所以我们可以将Symbol的值作为对象的属性名来使用,这样就能保证不会出现同名属性,防止属性被覆盖或者改写。
Symbol属性名的遍历????????Symbol 作为属性名,该属性不会出现在for in、for of循环中,也不会被Object.keys()、Object.getOwnPropertyNames()返回。但是它也不是私有属性,有一个Object.getOwnPropertySymbols()方法可以获指定对象的所有Symbol属性名。 ????????Object.getOwnPropertySymbols()方法返回的是一个数组,成员是当前对象所有用作属性名的Symbol值 ????????Reflect.ownKeys()方法返回所有类型的键名,包括常规键名和Symbol键名。
Symbol.for() 、Symbol.keyFor()????????有时候我们想要使用同一个Symbol值,Symbol.keyFor()方法可以做到这一点。它接收一个字符串参数,让后搜索有没有以该参数作为名称的Symbol值,如果有,就返回这个Symbol值,否则就新建一个以该字符串命名的Symbol值。
????????Symbol.for()和Symbol()这两种写法都会生成新的Symbol,它们的区别是,前者会被登记在全局环境中供搜索,而后者不会Symbol.for(),不会在每次调用时都返回一个新的Symbol类型的值,而是先检查给定的key是否已经存在,如果不存在就会返回一个新值。 Symbol.keyFor()方法返回一个已登记的Symbol类型值的key
sym1属于为登记的Symbol值,所以返回undefined
内置的Symbol????????除了定义自己使用的 Symbol 值以外,ES6 还提供了 11 个内置的 Symbol 值,指向语言内部使用的方法。 ? ? ? ? 以下属性不一一举例说明了,如果需要详细示例请看ECMAScript 6 标准入门https://es6.ruanyifeng.com/#docs/symbol Symbol.hasInstance????????对象的
????????上面代码中, Symbol.isConcatSpreadable????????对象的 Symbol.species对象的 ? Symbol.match对象的 Symbol.replace对象的 Symbol.search对象的 Symbol.split对象的 Symbol.iterator对象的 Symbol.toPrimitive对象的
Symbol.toStringTag对象的 Symbol.unscopables对象的 |
|
JavaScript知识库 最新文章 |
ES6的相关知识点 |
react 函数式组件 & react其他一些总结 |
Vue基础超详细 |
前端JS也可以连点成线(Vue中运用 AntVG6) |
Vue事件处理的基本使用 |
Vue后台项目的记录 (一) |
前后端分离vue跨域,devServer配置proxy代理 |
TypeScript |
初识vuex |
vue项目安装包指令收集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 23:03:09- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |