首页 / ES6 / es6的Symbol
es6的Symbol
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了es6的Symbol,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1150字,纯文字阅读大概需要2分钟。
内容图文
![es6的Symbol](/upload/InfoBanner/zyjiaocheng/1205/9be785ff728c4724a3ba9e8779922e5a.jpg)
ES6中引入了一种新的数据类型:Symbol,可以作为对象属性的标识符使用
ES6引入Symbol的原因:防止属性名的冲突(ES5的对象属性名都是字符串,容易造成属性名的冲突)
Symbol函数前不能使用new命令,否则会报错
Symbol值不能与其他类型的值进行运算
Symbol函数可以接受一个字符串作为参数(可选),表示对 Symbol 实例的描述,主要是为了在控制台显示,或者转为字符串时,比较容易区分
在js文件中定义的Symbol,不能在其他文件中共享
每个Symbol实例都是唯一的。因此,当你比较两个Symbol实例的时候,将总会返回false:
let s1 = Symbol() let s2 = Symbol(‘another symbol‘) let s3 = Symbol(‘another symbol‘) s1 === s2 // false s2 === s3 // false
Symbol值可以转为字符串:
var sym = Symbol(‘My symbol‘); String(sym); // ‘Symbol(My symbol)‘ sym.toString(); // ‘Symbol(My symbol)‘
Symbol值作为对象属性名时,不能用点运算符:
var mySymbol = Symbol(); var a = {}; a.mySymbol = ‘Hello!‘; a[mySymbol] // undefined a[‘mySymbol‘] // "Hello!"
上面代码中,因为点运算符后面总是字符串,所以不会读取mySymbol作为标识名所指代的那个值,导致a的属性名实际上是一个字符串,而不是一个Symbol值。
同理,在对象的内部,使用Symbol值定义属性时,Symbol值必须放在方括号之中。下面代码中,如果s不放在方括号中,该属性的键名就是字符串s,而不是s所代表的那个Symbol值:
let s = Symbol(); let obj = { [s]: 1 };
属性名的遍历
Symbol作为属性名,该属性不会出现在for...in、for...of循环中,也不会被Object.keys()、Object.getOwnPropertyNames()返回。但是,它也不是私有属性,有一个Object.getOwnPropertySymbols方法,可以获取指定对象的所有Symbol属性名。
Reflect.ownKeys方法可以返回所有类型的属性名,包括常规的和Symbol属性名。
原文:https://www.cnblogs.com/xjy20170907/p/12683902.html
内容总结
以上是互联网集市为您收集整理的es6的Symbol全部内容,希望文章能够帮你解决es6的Symbol所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。