js 的新数据类型 Symbol
js 的新数据类型 Symbol
基本用法演示
// 使用同一参数创建的 Symbol,生成的值也是不同的
let sym_1 = Symbol('sym')
let sym_2 = Symbol('sym')
console.log(sym_1 === sym_2) // false
console.log(sym_1 === sym_1) // true
console.log(sym_1) // Symbol(sym)
console.log(typeof(sym_1)) // symbol用作对象的唯一属性名
// 使用同一字符串创建的三个 Symbol,可以用作对象的三个key
let key_1 = Symbol('key')
let key_2 = Symbol('key')
let key_3 = Symbol('key')
let obj = {
a: 1,
b: 2,
[key_1]: 10,
[key_2]: undefined,
}
// 修改已有的值
obj[key_2] = 200
// 在对象外部赋值
obj[key_3] = 300
// 拥有 key 的前提下,不影响使用
console.log(obj[key_1]) // 10
console.log(obj[key_2]) // 200
console.log(obj[key_3]) // 300
// 无法遍历,无法用其他方式获取 key
console.log(JSON.stringify(obj)) // {"a":1,"b":2}
console.log(Object.keys(obj)) // ["a", "b"]类似单例模式的记录和追踪
Last updated
