symbol类型

77 阅读1分钟

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链接🔗