@Wangww0925
2019-08-20T08:18:32.000000Z
字数 1233
阅读 214
ES6
Symbol是ES6新增加的类型,它的意思是全局标记。我们先看看它的声明方式。
我们先来回顾一下我们的数据类型,在最后在看看Symbol如何声明,并进行一个数据类型的判断。
let str = new String;
var num = new Number;
var boo = new Boolean;
var arr = new Array;
var obj = new Object;
var sym = Symbol();
console.log(typeof(str)); // object
console.log(typeof(num)); // object
console.log(typeof(boo)); // object
console.log(typeof(arr)); // object
console.log(typeof(obj)); // object
console.log(typeof(sym)); // symbol
我们先声明一个Symbol,然后我们在控制台输出一下。
let sym = Symbol('www');
console.log('sym : ', sym);
console.log('sym.toString() : ', sym.toString());
这时候我们仔细看控制台是有区别的,symbol显示的是红字,toString显示的是黑字。
看一下如何用Symbol构建对象的Key,并调用和赋值。
let sym = Symbol();
let obj = {
[sym]: 'www'
}
console.log(obj.sym); // undefined, 使用.无效
console.log(obj[sym]); // www
obj[sym] = 'web'; // 修改值
console.log(obj[sym]); // web
在对象中有很多值,但是循环输出时,并不希望全部输出,那我们就可以使用Symbol进行保护。
没有进行保护的写法:
let obj = {
name: 'wwww',
age: 18
}
for (let key in obj){
console.log(obj[key]);
}
控制台打印:
www
18
现在我不想别人知道我的年龄,这时候我就可以使用Symbol来进行循环保护。
symbol保护数据的写法:
let obj = { name: 'wwww' }
let age = Symbol();
obj[age] = 18
for (let key in obj){
console.log(obj[key]);
}
console.log('obj', obj);
控制台打印:
注意: 此时只输出了name,没有输出age
**总结: ** symbol在nodeJs中还是有一些用处的,但是在平时我们写前端代码时symbol用处是不大