20190125Q:Es6新增了哪些数据类型?使用场景?在es6中,增加了一种新的原始数据类型Symbol。最大的特点是独特性。符号值由符号函数生成。在es5中,对象的属性都是字符串。我们使用别人定义的对象,然后加上自己的属性,这样很容易造成冲突,覆盖掉原来的属性。Symbol也可以看作是一个字符串,但是这个字符可以保证是唯一的。基础示例//Objectconstobj={name:'JS'}obj.name='JSeveryDailyquestion'//Symbolconstname=Symbol('name')//这里的参数没有特殊意义,可以看成aSymbol添加了标记obj[name]='JS每日一题'Symbol用法当前有多少个Symbol一种写法//一个consttitle=Symbol()constobj={}obj[title]='JS每日一题'//二个constobj={[title]:'JS每日题目'}//三个Object.defineProperty(obj,title,{value:'JS每日题目'})obj[title]//输出结果都是JS每日标题。这里注意,当Symbol作为属性名时,不能使用点来读取obj.title//undefinedSymbol作为属性名,只能通过Object.getOwnPropertySymbols方法返回constattrs=Object.getOwnPropertySymbols(obj)//[Symbol[title]]Symbol.for()如果我们想重复Symbol,我们可以使用Symbol.for,Smybol.for()和Smybol()的区别是Symbol.for()会先检查是否已经在下面声明了全局的,如果有则返回值,如果没有则创建一个新值。每次调用Symbol()都会创建新的代码来理解:consttitle=Symbol.for('JS每日题')....Symbol.for('JS每日题')//使用的第一条语句是第一条语句多次使用Symbol.for('JS每日一题')===Symbol.for('JS每日一题')//trueconsttitle=Symbol('JS每日一题')Symbol('JS每日一题')===Symbol('JS每日一题')//false总结了Symbol的特点,唯一性,不能隐式转换,不能被结合点运算符不能用于对其他数据类型的操作ps:今天回答问题的朋友多次提到了map和set。补充一下,唯一的新数据类型是Symbol,map和set是新数据。结构~_~关于JS每日题JS每日题可以看作是一个语音答题社区,利用碎片化时间,每天60秒内以语音的形式完成当天的试题。组长会在第二天0点推送当天的参考答题笔记不局限于完成当天的任务,更多的是查漏补缺,向群内其他同学学习.点击加入答案
