[关闭]
@Wangww0925 2019-08-20T08:18:32.000000Z 字数 1233 阅读 214

ES6的Symbol数据类型在对象中的作用

ES6


Symbol是ES6新增加的类型,它的意思是全局标记。我们先看看它的声明方式。

声明Symbol

我们先来回顾一下我们的数据类型,在最后在看看Symbol如何声明,并进行一个数据类型的判断。

  1. let str = new String;
  2. var num = new Number;
  3. var boo = new Boolean;
  4. var arr = new Array;
  5. var obj = new Object;
  6. var sym = Symbol();
  7. console.log(typeof(str)); // object
  8. console.log(typeof(num)); // object
  9. console.log(typeof(boo)); // object
  10. console.log(typeof(arr)); // object
  11. console.log(typeof(obj)); // object
  12. console.log(typeof(sym)); // symbol

Symbol的打印

我们先声明一个Symbol,然后我们在控制台输出一下。

  1. let sym = Symbol('www');
  2. console.log('sym : ', sym);
  3. console.log('sym.toString() : ', sym.toString());

这时候我们仔细看控制台是有区别的,symbol显示的是红字,toString显示的是黑字。

image_1di9hba742mt7gvrie21r1idi9.png-43.3kB


Symbol在对象中的应用

看一下如何用Symbol构建对象的Key,并调用和赋值。

  1. let sym = Symbol();
  2. let obj = {
  3. [sym]: 'www'
  4. }
  5. console.log(obj.sym); // undefined, 使用.无效
  6. console.log(obj[sym]); // www
  7. obj[sym] = 'web'; // 修改值
  8. console.log(obj[sym]); // web

Symbol对象元素的保护作用

在对象中有很多值,但是循环输出时,并不希望全部输出,那我们就可以使用Symbol进行保护。

没有进行保护的写法:

  1. let obj = {
  2. name: 'wwww',
  3. age: 18
  4. }
  5. for (let key in obj){
  6. console.log(obj[key]);
  7. }

控制台打印:
www
18

现在我不想别人知道我的年龄,这时候我就可以使用Symbol来进行循环保护。

symbol保护数据的写法:

  1. let obj = { name: 'wwww' }
  2. let age = Symbol();
  3. obj[age] = 18
  4. for (let key in obj){
  5. console.log(obj[key]);
  6. }
  7. console.log('obj', obj);

控制台打印:
image_1di9il1r61vechnq89v15ko157313.png-48.9kB

注意: 此时只输出了name,没有输出age

**总结: ** symbol在nodeJs中还是有一些用处的,但是在平时我们写前端代码时symbol用处是不大

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注