es6-symbol的用法

Symbol数据类型

Synmbol 数据类型提供一个独一无二的值。

Symbol的声明

{
  // 声明
  let a1=Symbol(); // 这里没有 new
  let a2=Symbol();
  console.log(a1===a2); // false
  let a3=Symbol.for('a3'); // 返回由给定的 key 找到的 symbol,否则就是返回新创建的 symbol
  let a4=Symbol.for('a3');
  console.log(a3, a4, a3===a4); // Symbol(a3) Symbol(a3) true
}

Symbol的使用

根据规范,对象属性键只能是string类型或symbol类型,不能是number、boolean,只有string和symbol两种类型。

{
  let a1=Symbol.for('abc');
  let obj={
    [a1]:'123', 
    'abc':345,
    'c':456
  };
  console.log('obj',obj); // {abc: 345, c: 456, Symbol(abc): "123"}
  // 注意:对象中,symbol 做属性值,通过 for in 和 for of 拿不到属性值
  for(let [key,value] of Object.entries(obj)){
    console.log('let of',key,value); // abc 345 // c 456
  }

  Object.getOwnPropertySymbols(obj).forEach(function(item){ // api 结果是数组
    console.log(obj[item]); // 123
  })

  Reflect.ownKeys(obj).forEach(function(item){ // api 返回数组包含symbol和非symbol
    console.log('ownkeys',item,obj[item]); // abc 345 c 456 Symbol(abc) 123
  })
}

推荐阅读更多精彩内容

  • 1.概述 ES5的对象属性名都是字符串,这容易造成属性名的冲突。比如,你使用了一个他人提供的对象,但又想为这个对象...
    赵然228阅读 630评论 2 10
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 129,411评论 18 137
  • 本文由“币嗨Bihi内容合伙人计划”赞助 周小川示警纯炒作性加密货币,金融要为实体经济服务 新闻背景:据新浪财经消...
    1212秋刀鱼阅读 95评论 0 2
  • 生活就是一系列连锁反应。事情不顺,然后心情不好,心情不好然后思考人生,思考人生然后怀疑人生,怀疑人生然后无法好好生...
    趋近理想阅读 84评论 0 0
  • 161110 在图书馆看People and organization的一天。
    XxXxXxN阅读 42评论 2 1
  • 有一种特殊视角,可以在电影里获取—— 死后的视角。 不止一部电影尝试给我们解答死后的世界是什么样的。 惊悚的解答,...
    Sir电影阅读 2,797评论 8 81