共计 1185 个字符,预计需要花费 3 分钟才能阅读完成。
20190125 问:
Es6 中新增的数据类型有哪些?使用场景?
es6 中新增一种原始数据类型 Symbol, 最大的特点是唯一性,Symbol 值通过 Symbol 函数生成, 在 es5 中对象的属性都是字符串,我们使用他人定义的对象,然后去新增自己的属性,这样容易起冲突覆盖原有的属性, Symbol 也可以看成为一个字符串,不过这个字符能保证是独一无二的
基本示例:
// Object
const obj = {
name: ‘JS’
}
obj.name = ‘JS 每日一题 ’
// Symbol
const name = Symbol(‘name’) // 这里的参数没有特殊意义,可以看成为 Symbol 加了一个标记
obj[name] = ‘JS 每日一题 ’
Symbol 用法
Symbol 目前有多种写法
// 一
const title = Symbol()
const obj = {}
obj[title] = ‘JS 每日一题 ’
// 二
const obj = {
[title]: ‘JS 每日一题 ’
}
// 三
Object.defineProperty(obj, title, { value: ‘JS 每日一题 ’})
obj[title] // 输出的结果都为 JS 每日一题
这里注意一下,Symbol 做为属性名时,不能用点去读取
obj.title // undefined
Symbol 作为属性名,只有通过 Object.getOwnPropertySymbols 方法返回
const attrs = Object.getOwnPropertySymbols(obj)
// [Symbol[title]]
Symbol.for()
如果我们想要重复 Symbol 可以使用 Symbol.for,Smybol.for() 及 Smybol() 的区别在于 Symbol.for() 会先去查找全局下有没有声明过,如果有就返回该值,没有就新建一个,Symbol() 每一次调用都会新建一个
代码理解:
const title = Symbol.for(‘JS 每日一题 ’)
….Symbol.for(‘JS 每日一题 ’) // 调用多次都是使用的第一次声明的值
Symbol.for(‘JS 每日一题 ’) === Symbol.for(‘JS 每日一题 ’) // true
const title = Symbol(‘JS 每日一题 ’)
Symbol(‘JS 每日一题 ’) === Symbol(‘JS 每日一题 ’) // false
总结
Symbol 的特点
独一无二
不能隐式转换
不能与其它数据类型做运算
不能使用点运算符进行操作
ps: 今天答题的小伙伴多次都提到了 map,set,,补充一下,新增的数据类型只有 Symbol 一种,map,set 是新增的数据结构 ~_~
关于 JS 每日一题
JS 每日一题可以看成是一个语音答题社区 每天利用碎片时间采用 60 秒内的语音形式来完成当天的考题 群主在次日 0 点推送当天的参考答案
注 绝不仅限于完成当天任务,更多是查漏补缺,学习群内其它同学优秀的答题思路
点击加入答题