Symbol在对象中作用

symbol是ES6中新添加的一种数据类型,他属于原始数据类型,也就是存放在栈中,是按值传递。


首先来看看他的声明方式

1
let vm = Symbol();

我们来看看他的打印,与将他转换成字符串相比,我们可以看到symbol类型的输出的是红体字

1
2
3
let vm = Symbol('lalala');
console.log(vm);
console.log(vm.toString);

我们来看看在对象中他用于key值构建的地方,以及在对象中的打印方法

1
2
3
4
5
6
let vm = Symbol();
let obj = {
[vm] :'liu'
}
console.log(obj[vm]);//注意这里改变了之前用点方式调用的方式
obj[vm] = 'lin';//改变值同样也用中括号

symbol还有一个用处就是他有对数据进行保护的作用

比如,我们用常规的方法来打印对象,我们可以看到对象中每一个元素都被打印出来了

1
2
3
4
let obj = {a:1,b:2};
for(let item in obj){
console.log(obj[item]);
}

而如果我们不希望b被打印出来,这个时候就是symbol上场的时候了

1
2
3
4
5
6
7
8
9
10
11
let obj = {a:1};
let b = Symbol();
obj[b] = 2;
for(let item in obj){
console.log(obj[item]);
}
//这个时候b就不被打印出来了

//如果我们想打印出来b

console.log(obj[b]);
-------------本文结束感谢您的阅读-------------