在ES6中引入了一种新的原始数据类型symbol,表示独一无二的值。它是JavaScript语言的第七种数据类型,是一种类似于字符串的数据类型
symbol的特点
- symbol的值是唯一的,用来解决命名冲突的问题
- symbol的值不能与其他数据进行运算
- symbol定义的对象属性不能使用for in来进行遍历,但是可以使用reflect.ownkeys来获取对象的所有键名
let s=Symbol();
console.log(s,typeof s)//Symbol() "symbol"
symbol的唯一性是不可见的我们看不到
let s1=Symbol('张三')
let s2=Symbol('张三')
console.log(s1===s2)//false
let s4=Symbol.for('张三')
let s5=Symbol.for('张三')
console.log(s4===s5)//true
最后总结一波数据类型
- undefined
- string
- object
- null
- number
- boolean
- symbol
Symbol 添加属性、修改值
symbol表示独一无二的值,他给对象添加属性和方法
n1=Symbol('n1是我');
n2=Symbol();
let movie={
name:'琉璃',
year:2020,
[n1]:'司凤',
[n2]:'璇玑',
};
console.log(movie.name);//琉璃
console.log(movie[n1]);//司凤
console.log(movie);//{name: "琉璃", year: 2020, Symbol(n1是我): "司凤", Symbol(): "璇玑"}
movie[n2]='袁冰妍';
console.log(movie){name: "琉璃", year: 2020, Symbol(n1是我): "司凤", Symbol(): "袁冰妍"}
使用Symbol有什么好处呢?举个例子
n1=Symbol('n1是我');
n2=Symbol();
let movie={
name:'琉璃',
year:2020,
[n1]:'司凤',
[n2]:'璇玑',
};
for (index in movie){
console.log(movie[index])//琉璃 2020
}
Symbol的作用:
1、Symbol可以把一些不需要对外操作和访问的属性使用Symbol来定义,因为Symbol类型的key是不能通过object.
key()或者for in玫举的
2、Symbol可以用来替代常量。