symbol类型
之前基本数据类型有5种,number、string、boolean、null、undefined
ES6新增了一个新的基本数据类型 symbol
问题:
对象的键都是字符串类型,如果写了相同很容易产生冲突问题
symbol就可以解决这个问题,因为symbol数据类型每一个都是独一无二的
var obj = {
a: 1,
b: 2
}
for(let key in obj){
console.log(typeof key) //结果string字符串类型
}
obj.a = 'hello'
console.log(obj) //结果{a:hello b:2}
如果写相同了,很容易发生冲突问题,但symbol可以解决
let sy1 = Symbol('10')
let sy2 = Symbol('10')
console.log(sy1 == sy2) //false
let obj = {}
obj.name = '张三'
obj.name = '李四'
console.log(obj) //在这里结果结束李四,后者覆盖前者
let obj = {}
obj[Symbol('name')] = '张三'
obj[Symbol('name')] = '李四'
console.log(obj) //这里不会覆盖,结果上{symbol(name):张三;symbol(name):李四}
Symbol类型一般使用在对象内部,一些属性或者方法不需要被别人给修改或者覆盖直接使用,一般适合js内置方法不需要获取
let obj = {
//注意点:在对象内部添加Symbol类型必须使用中括号
[Symbol('name')]: '张三',
[Symbol('name')]: '李思思'
}
console.log(obj)
//注意点:获取到是一个伪数组
var res = Object.getOwnPropertySymbols(obj)
//获取Symbol的值
console.log(obj[res[0]])
console.log(obj[res[1]])
使用场景
数据类型-栈在demo中有实际使用到Symbol: 链接🔗