zoukankan      html  css  js  c++  java
  • Symbol详情: 在不支持es6的浏览器上,通过Babel转译

    开发者可以通过Babel将ES6代码转译为ES5代码来实现兼容

    ES6引入了一种新的原始数据类型Symbol,表示 独一无二的值.他是jacascript语言的第七种数据类型,前六种是undefined.null,Boolean,String,Number,Object

    直接调用Symbol函数即可生成一个Symbol函数.(注意:Symbol函数前不能使用new命令,不然会报错)

    函数可以接受一个字符串作为参数,表示对Symbol的描述,主要是为了在控制动态显示.或者转为字符串时,比较容易区分

    let s1 = Symbol('foo');
    
    let s2 = Symbol('aabb');
    
    s1 // Symbol(foo)
    s2 // Symbol(aabb)
    // Symbol的参数只是表示对当前Symbol值的描述,因此相同参数的Symbol函数的返回值是不相等的

    用法: 

    Symbol作为属性

    Symbol值可以作为标识符,用于对象的属性名,由于每一个Symbol值都是不相等的,这意味着就能保证不会出现同名的属性

    注意:  在对象的内部,使用Symbol值定义属性时,Symbol值必须放在方括号中

    let mySymbol = Symbol();
    
    // 第一种写法
    let a = {};
    a[mySymbol] = 'hello word';
    
    // 第二种写法
    let a = {
      [mySymbol]: 'hello word';
    }
    
    // 第三种写法
    let a = {};
    Object.defineProperty(a, mySymbol, { value: 'Hello word' });
    
    以上写法 console.log(a[mySymbol])  的结果都是  'hello word'

    Symbol的属性值 不能在 for in ~  for of ~ 循环中,也不会被Object.keys(), Object.getOwnpropertyNames(), JSON.stringify()返回. 

    但是 Object.getOwnPropertySymbols() 方法可以获取指定对象的所有Symbol属性名

    Symbol.for('定义的名称'')

  • 相关阅读:
    apache2.4+php7.3.2+mysql5.7
    redis 中的key值过期后,触发通知事件
    zookeeper之分布式锁以及分布式计数器(通过curator框架实现)
    SpringCloud学习笔记(4)——Zuul
    SpringCloud学习笔记(3)——Hystrix
    SpringCloud学习笔记(2)——Ribbon
    c++各种排序的简单实现
    c++动态规划dp算法题
    华为机试练习
    ubuntu遇到的 the system is runing low-graphics mode 问题
  • 原文地址:https://www.cnblogs.com/wsm777/p/14120016.html
Copyright © 2011-2022 走看看