李才哥
Symbol
原创
关注作者
前往小程序,Get
更优
阅读体验!
立即前往
腾讯云
开发者社区
文档
建议反馈
控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
搜索
搜索
关闭
发布
登录/注册
首页
学习
活动
专区
工具
TVP
最新优惠活动
返回腾讯云官网
李才哥
首页
学习
活动
专区
工具
TVP
最新优惠活动
返回腾讯云官网
社区首页
>
专栏
>
Symbol
Symbol
原创
李才哥
关注
修改于 2021-02-23 14:32:03
770
0
修改于 2021-02-23 14:32:03
举报
文章被收录于专栏:
李才哥
李才哥
Symbol
概述
ES5 的对象属性名都是字符串,这容易造成属性名的冲突
Symbol的引入,保证每个属性的名字都是独一无二的就好了,这样就从根本上防止属性名的冲突
它是 JavaScript 语言的第七种数据类型,前六种是:undefined、null、布尔值(Boolean)、字符串(String)、数值(Number)、对象(Object)
Symbol函数前不能使用new命令,否则会报错
Symbol 值不是对象,所以不能添加属性
Symbol 值不能与其他类型的值进行运算,会报错
Symbol 值可以显式转为字符串
Symbol 值也可以转为布尔值,但是不能转为数值
作为属性名的 Symbol
由于每一个 Symbol 值都是不相等的,这意味着 Symbol 值可以作为标识符,用于对象的属性名,就能保证不会出现同名的属性
Symbol 值作为对象属性名时,不能用点运算符
实例:消除魔术字符串
魔术字符串指的是,在代码之中多次出现、与代码形成强耦合的某一个具体的字符串或者数值
常用的消除魔术字符串的方法,就是把它写成一个变量。
属性名的遍历
Symbol 作为属性名,该属性不会出现在for...in、for...of循环中,也不会被Object.keys()、Object.getOwnPropertyNames()、JSON.stringify()返回
有一个Object.getOwnPropertySymbols方法,可以获取指定对象的所有 Symbol 属性名
Reflect.ownKeys方法可以返回所有类型的键名,包括常规键名和 Symbol 键名
Symbol.for(),Symbol.keyFor()
我们希望重新使用同一个 Symbol 值,Symbol.for方法可以做到这一点
它接受一个字符串作为参数,然后搜索有没有以该参数作为名称的 Symbol 值
如果有,就返回这个 Symbol 值,否则就新建并返回一个以该字符串为名称的 Symbol 值
Symbol.for()不会每次调用就返回一个新的 Symbol 类型的值,而是会先检查给定的key是否已经存在,如果不存在才会新建一个值
Symbol.keyFor方法返回一个已登记的 Symbol 类型值的key
实例:模块的 Singleton 模式
Singleton 模式指的是调用一个类,任何时候返回的都是同一个实例
如果键名使用Symbol方法生成,那么外部将无法引用这个值,当然也就无法改写。
内置的
Symbol 值
除了定义自己使用的 Symbol 值以外,ES6 还提供了 11 个内置的 Symbol 值,指向语言内部使用的方法
对象的Symbol.hasInstance属性,指向一个内部方法
对象的Symbol.isConcatSpreadable属性等于一个布尔值,表示该对象用于Array.prototype.concat()时,是否可以展开
对象的Symbol.species属性,指向一个构造函数。创建衍生对象时,会使用该属性
对象的Symbol.match属性,指向一个函数。当执行str.match(myObject)时,如果该属性存在,会调用它,返回该方法的返回值
对象的Symbol.replace属性,指向一个方法,当该对象被String.prototype.replace方法调用时,会返回该方法的返回值
对象的Symbol.search属性,指向一个方法,当该对象被String.prototype.search方法调用时,会返回该方法的返回值
对象的Symbol.split属性,指向一个方法,当该对象被String.prototype.split方法调用时,会返回该方法的返回值
对象的Symbol.iterator属性,指向该对象的默认遍历器方法。
对象的Symbol.toPrimitive属性,指向一个方法。该对象被转为原始类型的值时,会调用这个方法,返回该对象对应的原始类型值
对象的Symbol.toStringTag属性,指向一个方法。在该对象上面调用Object.prototype.toString方法时,如果这个属性存在,它的返回值会出现在toString方法返回的字符串之中,表示对象的类型
对象的Symbol.unscopables属性,指向一个对象。该对象指定了使用with关键字时,哪些属性会被with环境排除
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系
cloudcommunity@tencent.com
删除。
编程算法
java
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系
cloudcommunity@tencent.com
删除。
编程算法
java
评论
登录
后参与评论
0 条评论
热度
最新
推荐阅读
LV.
关注
文章
0
获赞
0
目录
概述
ES5 的对象属性名都是字符串,这容易造成属性名的冲突
Symbol的引入,保证每个属性的名字都是独一无二的就好了,这样就从根本上防止属性名的冲突
它是 JavaScript 语言的第七种数据类型,前六种是:undefined、null、布尔值(Boolean)、字符串(String)、数值(Number)、对象(Object)
Symbol函数前不能使用new命令,否则会报错
Symbol 值不是对象,所以不能添加属性
Symbol 值不能与其他类型的值进行运算,会报错
Symbol 值可以显式转为字符串
Symbol 值也可以转为布尔值,但是不能转为数值
作为属性名的 Symbol
由于每一个 Symbol 值都是不相等的,这意味着 Symbol 值可以作为标识符,用于对象的属性名,就能保证不会出现同名的属性
Symbol 值作为对象属性名时,不能用点运算符
实例:消除魔术字符串
魔术字符串指的是,在代码之中多次出现、与代码形成强耦合的某一个具体的字符串或者数值
常用的消除魔术字符串的方法,就是把它写成一个变量。
属性名的遍历
Symbol 作为属性名,该属性不会出现在for...in、for...of循环中,也不会被Object.keys()、Object.getOwnPropertyNames()、JSON.stringify()返回
有一个Object.getOwnPropertySymbols方法,可以获取指定对象的所有 Symbol 属性名
Reflect.ownKeys方法可以返回所有类型的键名,包括常规键名和 Symbol 键名
Symbol.for(),Symbol.keyFor()
我们希望重新使用同一个 Symbol 值,Symbol.for方法可以做到这一点
它接受一个字符串作为参数,然后搜索有没有以该参数作为名称的 Symbol 值
如果有,就返回这个 Symbol 值,否则就新建并返回一个以该字符串为名称的 Symbol 值
Symbol.for()不会每次调用就返回一个新的 Symbol 类型的值,而是会先检查给定的key是否已经存在,如果不存在才会新建一个值
Symbol.keyFor方法返回一个已登记的 Symbol 类型值的key
实例:模块的 Singleton 模式
Singleton 模式指的是调用一个类,任何时候返回的都是同一个实例
如果键名使用Symbol方法生成,那么外部将无法引用这个值,当然也就无法改写。
内置的 Symbol 值
除了定义自己使用的 Symbol 值以外,ES6 还提供了 11 个内置的 Symbol 值,指向语言内部使用的方法
对象的Symbol.hasInstance属性,指向一个内部方法
对象的Symbol.isConcatSpreadable属性等于一个布尔值,表示该对象用于Array.prototype.concat()时,是否可以展开
对象的Symbol.species属性,指向一个构造函数。创建衍生对象时,会使用该属性
对象的Symbol.match属性,指向一个函数。当执行str.match(myObject)时,如果该属性存在,会调用它,返回该方法的返回值
对象的Symbol.replace属性,指向一个方法,当该对象被String.prototype.replace方法调用时,会返回该方法的返回值
对象的Symbol.search属性,指向一个方法,当该对象被String.prototype.search方法调用时,会返回该方法的返回值
对象的Symbol.split属性,指向一个方法,当该对象被String.prototype.split方法调用时,会返回该方法的返回值
对象的Symbol.iterator属性,指向该对象的默认遍历器方法。
对象的Symbol.toPrimitive属性,指向一个方法。该对象被转为原始类型的值时,会调用这个方法,返回该对象对应的原始类型值
对象的Symbol.toStringTag属性,指向一个方法。在该对象上面调用Object.prototype.toString方法时,如果这个属性存在,它的返回值会出现在toString方法返回的字符串之中,表示对象的类型
对象的Symbol.unscopables属性,指向一个对象。该对象指定了使用with关键字时,哪些属性会被with环境排除
领券
问题归档
专栏文章
快讯文章归档
关键词归档
开发者手册归档
开发者手册 Section 归档
0
0
0
推荐