简介: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', { width: 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, { width: 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])
 
 
 
 
 
 
 

ES6的新增数据类型:Symbol的更多相关文章

  1. ES6新增数据类型Symbol

    Symbol的含义? ES6(2015) 引入了第七种原始数据类型Symbol,Symbol英文文意思为 符号.象征.标记.记号,在 js 中更确切的翻译应该为独一无二的 Symbol的使用? Sym ...

  2. es6 新增数据类型Symbol

    es6在string number boolean null undefined object之外又新增了一种Symbol类型. Symbol意思是符号,有一个特性—每次创建一个Symbol值都是不一 ...

  3. ECMAScript6新增数据类型symbol数据类型

    25.Symbol目的:为了解决对象之间属性名冲突的问题,Symbol它是引用数据类型. Symbol( ),它代表着一个独一无二的值 [name]: '小红',//加中括号代表默认创建了一个Symb ...

  4. 浅谈ES6新增数据类型:Symbol

    面试中喜闻乐见的问题就是问我们的ES6新增了哪些个新特性 这篇文章一起学习一下新增的数据类型:Symbol JS的原始数据类型:6种Boolean,String,Undefined,NULL,Numb ...

  5. ES6 新增基本数据类型Symbol

    ES6 增加了一个新的基本数据类型 symbol. 不过,和其他基本数据类型相比,它有点与众不同,因为它没有字面量的表现形式,而且创建的方式也有点奇怪,只能通过调用全局函数Symbol()来完成. l ...

  6. 理解ES6的新数据类型:Symbol

    ES6之前的数组类型 在ES6之前JS只有6种数据类型,分别是:Undefined.Null.布尔值(Boolean).字符串(String).数值(Number).对象(Object). ES6引入 ...

  7. ES6 之 第七种数据类型Symbol

    概述 为了减少对象的属性名冲突,ES6引入新的原始数据类型Symbol,JS的第七种数据类型. Symbol 能够保证每个属性的名字都是独一无二,这样就能从根本上防止属性名冲突. Symbol 值能够 ...

  8. ES6中的新数据类型——Symbol

    今天小编和大家来聊一聊es6中新增的一个原始数据类型Symbol.在es5中原始数据类型(基本数据类型)有以下六种:Undefind.Null.Bool. String.Number.Object.今 ...

  9. ES6新数据类型Symbol

    Symbol 需计算字面量属性时使用 const benz = Symbol('benz'); const car = { [benz]: 'benz car' }; const info = Sym ...

随机推荐

  1. Codeforces Round #392 (Div. 2) A B C 水 模拟 暴力

    A. Holiday Of Equality time limit per test 1 second memory limit per test 256 megabytes input standa ...

  2. swift的UIbutton

    override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, ...

  3. bzoj 1098 [POI2007]办公楼biu bfs+补图+双向链表

    [POI2007]办公楼biu Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 1543  Solved: 743[Submit][Status][Di ...

  4. bzoj 3714 [PA2014]Kuglarz 最小生成树

    [PA2014]Kuglarz Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 1335  Solved: 672[Submit][Status][Di ...

  5. centos6.5 配置mongodb3

    下载地址 http://www.mongodb.org/downloads 下载 curl -O -L https://fastdl.mongodb.org/linux/mongodb-linux-i ...

  6. [LeetCode] 8. String to Integer (atoi) ☆

    Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input cases. ...

  7. Codeforces 617E XOR and Favorite Number莫队

    http://codeforces.com/contest/617/problem/E 题意:给出q个查询,每次询问区间内连续异或值为k的有几种情况. 思路:没有区间修改,而且扩展端点,减小端点在前缀 ...

  8. 插入排序Insertion sort 2

    原理类似桶排序,这里总是需要10个桶,多次使用 首先以个位数的值进行装桶,即个位数为1则放入1号桶,为9则放入9号桶,暂时忽视十位数 例如 待排序数组[62,14,59,88,16]简单点五个数字 分 ...

  9. Java中哈希表(Hashtable)是如何实现的

    Java中哈希表(Hashtable)是如何实现的 Hashtable中有一个内部类Entry,用来保存单元数据,我们用来构建哈希表的每一个数据是Entry的一个实例.假设我们保存下面一组数据,第一列 ...

  10. loj516 「LibreOJ β Round #2」DP 一般看规律

    传送门:https://loj.ac/problem/516 [题解] 那段代码求的是相同的数中间隔最小的值. 离散后用set维护每个值出现次数,每次操作相当于合并两个set,这步可以启发式合并. 加 ...