JS每日一题:Es6中新增的数据类型有哪些?使用场景?

5次阅读

共计 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 点推送当天的参考答案
注 绝不仅限于完成当天任务,更多是查漏补缺,学习群内其它同学优秀的答题思路
点击加入答题

正文完
 0