你不知道的Symbol
...大约 2 分钟
你不知道的Symbol
简介
Symbol 是 ES6 推出的一种新的基本类型,那么这时候我们 js 的基本类型就有 7 种
分别是
- undefined
- null
- number
- string
- Symbol
- boolean
- Object
其中前 6 中是基本类型 Object 是一个引用类型
Symbol 的基本数据类型,表示的是一个唯一值,自己和自己都不相等的值,symbol 是一种基本数据类型 (primitive data type)。Symbol()函数会返回 symbol 类型的值,每个从 Symbol()返回的 symbol 值都是唯一的。一个 symbol 值能作为对象属性的标识符;这是该数据类型仅有的目的。
基本特性
- Symbol() 和 Symbol([key])
- Symbol不能被new
- Symbol.prototype 与 Object(Symbol())
- Symbol不能与其他类型的值计算
- 数学计算:不能转换为数字
- 字符串拼接:隐式转换不可以,但是可以显示转换
- 模板字符串
- Symbol 属性不参与 for…in/of 遍历,不可枚举
- Object.getOwnPropertySymbols可以回去一个对象中属性是Symbol类型的属性key,返回一个数组
- Object.getOwnPropertyNames获取一个对象中除Symbol类型的其他属性key值,返回一个数组
- Object.keys获取一个对象中除Symbol的属性key,返回一个数组
Symbol的内置方法
在ES6中Symbol内置了很多方法,正常情况下不下动
对象的唯一属性:防止同名属性,及被改写或覆盖
当一个对象里边有两个 Symbol 的时候这两个 key 是完全不一致的
let obj = {
[Symbol()]: 1,
[Symbol()]: 2
}
console.log(obj)
上边 obj 对象是有两个不同属性的,尽管写法上都一样但是运行时候是完全不一致的
消除魔术字符串:指代码中多次出现,强耦合的字符串或数值,应避免,而使用含义清晰的变量代替
const vote_plus = Symbol('vote_plus')
function reducer(action) {
let state = {
count: 0
}
switch (action.type) {
case vote_plus:
state.count++
break
}
return state
}
reducer({
type: vote_plus
})
Powered by Waline v2.15.8