es6-Symbol

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了es6-Symbol相关的知识,希望对你有一定的参考价值。

  • 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的主要内容,如果未能解决你的问题,请参考以下文章

ES6-Symbol的用法 ,symbol在对象中的应用,改变值

es6-Symbol

微信小程序代码片段

VSCode自定义代码片段——CSS选择器

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js

片段和活动之间的核心区别是啥?哪些代码可以写成片段?