• ES6的新增数据类型:Symbol


    简介:Symbol类型是es6新增的一个数据类型,Es5的基本数据类型(undefined,null,Object,function,Number,string)
    Symbol值通过Symbol函数生成
    Symbol类型是保证每个属性的名字都是独一无二的,对于一个对象由对个模块构成的情况非常有用
     
     
    值的输出:
    var a=Symbol(‘foo’)=>Symbol(foo),与其他类型不能运算,可以转换成字符串
     
    实例:
    var a=Symbol()
    var b={}
    var c={a:’world'}
    b[a]=‘hello'
    Object.assign(b,c)=>{a:’world’,Symbol():’hello'}
     
     
    Symbol初始化相等吗?
    var a=Symbol()
    var b=Symbol()
    a==b=>false
     
    var a=Symbol(‘foo')
    var b=Symbol(‘foo')
    a==b=>false
     
    那么要怎么样两个一样参数的Symbol()才会相等为true呢,以下
    var a=Symbol.for(‘foo')
    var b=Symbol.for(‘foo')
    a==b=>true
    Symbol.for()被登记在全局环境中供搜索
    Symbol.keyFor()返回一个已等级的Symbol类型值的key跟Symbol.for()是配套的
    Symbol.keyFor(a)==>’foo’
     
     
    魔术字符串在代码之中多次出现、与代码形成强耦合的某一个具体的字符串或者数值
     
    消除魔术字符串,有魔术字符串
     
    function getArea(shape, options) {
      var area = 0;

      switch (shape) {
        case 'Triangle': // 魔术字符串
          area = .5 * options.width * options.height;
          break;
        /* ... more code ... */
      }

      return area;
    }

    getArea('Triangle', {  100, height: 100 });
     
     
       消除魔术字符串
    var shapeType = {
      triangle: 'Triangle'
    };

    function getArea(shape, options) {
      var area = 0;
      switch (shape) {
        case shapeType.triangle:
          area = .5 * options.width * options.height;
          break;
      }
      return area;
    }
     
    getArea(shapeType.triangle, {  100, height: 100 })
     
     
     
    Symbol()作为属性名,该属性不会出现在```for...in```、```for...of ```循环中,也不会出现在Object.keys(),Object.getOwnPropertyNames(),JSON.stringify()返回
    比如
    var b={}
    b[Symbol()]=‘hello'
    b[’name’]=‘wenwen'
    console.log(b)=>{Symbol():’hello’,name:’wenwen'}
    for(key in b){
         console.log(key)=>只会打印name
    }
    怎么样去获得Symbol()属性
    这样子:
    Object.getOwnPropertySymbols(b)=>[Symbol()]
    还有一种方式可以得到Symbol()属性
    Reflect.ownKeys(b)=>[’name’,Symbol()]
     
     
     
    Symbol.isConcatSpreadable 
     
    对象的Symbol.isConcatSpreadable属性等于一个布尔值,表示该对象使用Array.prototype.concat()时,是否可以展开。
     
    var arr=[‘c’,’d']
    arr[Symbol.isConcatSpreadable]=false
    [‘a’,’b’].concat(arr)=>[‘a’,’b’,[‘c’,’d']]
     
     
    Symbol.species
    不太懂这个属性
    我去
    static get [Symbol.species](){return this}
     
     
     
    Symbol.match
    是指向一个函数
    str.match(myObject)
     
    class a{
         [Symbol.match](string){
              return ‘hello world’.indexOf(string)
         }
    }
     
    ‘e’.match(new a())==>1
     
     
    Symbol.replace
    了解这个之前我先看了一下 string.prototype.replace
     
     
    js replace例子
    var str=‘hello wolrd'
    var str1=str.replace(‘world’,’wenwen’)==>’hello wenwen'
    var str1=String.prototype.replace.call(str,’world’,’wenwen’)==>’hello wenwen'
     
    Symbol.unscopables
    指向一个对象,该对象指定使用with关键字时,哪些属性会被with属性排除
     
    例子:
    Object.keys(Array.prototype{Symbol.unscopables])
     
     
     
     
     
     
     
  • 相关阅读:
    bzoj2818
    bzoj1901
    bzoj1010
    loj6277
    bzoj1001
    bzoj1787
    选项卡
    日期选择器
    去掉文本框的外边框
    bootstarp 模态框大小尺寸的控制
  • 原文地址:https://www.cnblogs.com/lwwen/p/6610366.html
Copyright © 2020-2023  润新知