• Symbol 类型


    4.Symbol 类型

    4.1 定义

    ES6 中引入了一个新的原始数据类型Symbol类型,它表示独一无二的值。

    最大用途用来定义私有对象的私有成员。

    ES6 数据类型除了 Number 、 String 、 Boolean 、 Object、 null 和 undefined ,还新增了 Symbol 。

    它是一个基本类型的值,不能使用new关键字来创建。

    补充:=====的区别,详细请参考https://www.runoob.com/note/12388

    const name1 = Symbol('name');
    const name2 = Symbol('name');
    console.log(name1===name2);// 虽然两个值相同的类型,相同的值,但是内存地址时不同的。
    >>> false
    

    4.2 使用场景

    说明:一般使用较少,通常用来定义私有成员。由于 每一个Symbol的值都是不相等的,所以Symbol作为对象的属性(),可以保证属性不重复。

    • 写法一

      let s1 = Symbol('s1');
      let obj = {};
      obj[s1] = 'mm';
      console.log(s1) // 输出的值唯一
      >>> Symbol(s1)
      console.log(obj) //{Symbol(s1): 'mm'}
      
    • 写法二

      let s1 = Symbol('s1');
      
      let obj2 = {
          [s1]:'jj'// 需要使用中括号进行包裹
      }
      console.log(obj2);//
      >>> {Symbol(s1): 'jj'}
      
    • 写法三

      let s1 = Symbol('s1');
      let obj3 = {} 
      Object.defineProperty(obj3,s1,{
          value:'mjj'
      })// 类似与通过反射为对象进行赋值的操作。
      console.log(obj3);//
      console.log(obj3[s1]);//mjj
      console.log(obj3.s1);//undefined
      >>> {Symbol(s1): 'mjj'}
      
    • Symbol 作为对象属性名时不能用.运算符,要用方括号。因为.运算符后面是字符串,所以取到的是字符串 s1 属性,而不是 Symbol 值 s1 属性

    4.3 注意点

    获取相关的键的时候需要使用对应的方法进行操作

    let s1 = Symbol('s1');
    let obj3 = {}
    Object.defineProperty(obj3,s1,{
        value:'mjj'
    })
    for (let key in obj3){
        console.log(key);// 无输出
    }
    console.log(Object.keys(obj3)); //[]
    let s = Object.getOwnPropertySymbols(obj3);
    console.log(s);// [Symbol(s1)]
    
    let m = Reflect.ownKeys(obj3);
    console.log(m);// [Symbol(s1)]
    
  • 相关阅读:
    需求工程——软件建模与分析阅读笔记一
    需求工程——软件建模与分析阅读笔记二
    个人开发—进度记录(六)
    个人开发—进度记录(五)
    个人开发—进度记录(四)
    个人开发—进度记录(三)
    个人开发—进度记录(二)
    Ubuntu18.04上安装Docker CE
    用vs调试docker环境下web程序的一处坑
    asp.net core 使用docker默认端口修改
  • 原文地址:https://www.cnblogs.com/Blogwj123/p/16557132.html
Copyright © 2020-2023  润新知