码迷,mamicode.com
首页 > 其他好文 > 详细

es6-Symbol

时间:2017-08-22 18:38:58      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:efi   没有   简单   name   markdown   ref   key   abc   let   

  • Symbol 表示独一无二的值。
  • Symbol 值通过Symbol函数生成。也就是说,对象的现在可以有两种类型:
    1. 原来就有字符串的类型
    2. 新增的Symbol类型

一、Symbol 创建方式

// 第一种
{
  var a = Symbol(‘132‘);
  console.log(‘Symbol‘, a);
}

{
  let a = Symbol(‘132‘);
  let b = Symbol(‘132‘);
  console.log(‘unequi‘, a === b); // false
}

{
  let a = Symbol(‘132‘);
  let b = a;
  console.log(‘equi‘, a === b); //true
}

// 第二种
{
  let a3 = Symbol.for(‘a3‘);
  let a4 = Symbol.for(‘a3‘);

  console.log(‘for‘,a3 === a4); //true
}

二、对象的属性

var sbl = Symbol();
// 第一种
{
  const a = {};
  a[sbl] = ‘123‘;
}
// 第二种
{
  const a = {
    [sbl]: ‘123‘
  };
}
// 第三种
{
  Object.defineProperty(a, sbl, { value: ‘Hello!‘ });
}

在对象在字变量方式创建对象,用Symbol类型来创建对象属性必须有[];

三、属性名的遍历

由于Symbol特殊性,并不能用for ingetOwnPropertyNameskeys 将对象属性遍历出来,如下:

var sbl = Symbol();
let obj = {
  [sbl]: ‘123‘,
  ‘abc‘: 345,
  ‘c‘: 456
}
for (var o in obj) {
  console.log(‘obj‘, o); // 并没有输出obj[sbl];
}

var sbl = Symbol();
let obj = {
  [sbl]: ‘123‘,
  ‘abc‘: 345,
  ‘c‘: 456
}
console.log(‘obj‘, Object.getOwnPropertyNames(obj)); // 返回数组并没有[sbl];
console.log(‘keys‘, Object.keys(obj)); // 返回数组并没有[sbl];

es6 添加遍历的api

  • getOwnPropertySymbols 只能遍历Symbol的属性
Object.getOwnPropertySymbols(obj).forEach(item => {
  console.log(‘Symbol‘, item, obj[item]);
});
  • Reflect.ownKeys() 这是Reflect的一个方法
Reflect.ownKeys(obj).forEach(item => {
  console.log(‘ownKeys‘, item, obj[item]);
});

四、Symbol.for()

在前面创建方式中提到过,简单来说,就是可以创建相同的Symbol

五、其他的api,基本按照这个线来的,其他勤加练习。

es6-Symbol

标签:efi   没有   简单   name   markdown   ref   key   abc   let   

原文地址:http://www.cnblogs.com/liangcheng11/p/7412900.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!