JS symbol的学习

详细介绍见MDN文档,本文是从文档中精简的

介绍

  • symbol是一种基本数据类型。
  • Symbol()函数会返回symbol类型的值,此值是唯一的。
  • 一个symbol值能作为对象属性的标识符(这是该数据类型仅有的目的)。
  • 不支持语法 new Symbol();通过Symbol([description])创建symbol值。围绕原始数据类型创建一个显式包装器对象从 ECMAScript 6 开始不再被支持。(现有的包装器对象如new Boolean,new String,new Number因为历史遗留原因仍可被创建)
var sym1 = Symbol('foo');
var sym2 = Symbol('foo');
sym1 == sym2 //false
sym2.toString();//"Symbol('foo')"

Symbols 与 for...in

Symbols在for...in迭代中不可枚举。Object.getOwnPropertyNames()不会返回symbol对象的属性,但是可以通过Object.getOwnPropertySymbols()得到他们。

 var obj = {
        a:'a',
        'b':'b',
   };
   obj[Symbol('c')] = 'c'
   for (var key in obj){
        console.log(key);//a b
    }
console.log(Object.getOwnPropertySymbols(obj));//[Symbol(c)]

Symbols 与JSON.stringify()

当使用 JSON.strIngify() 时以 symbol 值作为键的属性会被完全忽略:

JSON.stringify({[Symbol("foo")]: "foo"});                 
// '{}'
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 概述 ES5的对象属性名都是字符串,这容易造成属性名的冲突。比如,你使用了一个他人提供的对象,但又想为这个对象添加...
    oWSQo阅读 3,561评论 1 3
  • 官方中文版原文链接 感谢社区中各位的大力支持,译者再次奉上一点点福利:阿里云产品券,享受所有官网优惠,并抽取幸运大...
    HetfieldJoe阅读 11,616评论 3 22
  • ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值。它是JavaScript语言的第七种数据类型,前...
    语目阅读 9,362评论 0 3
  • 一年一度的跨年演讲,那个男人又来了。四万多字的无删节文字版在罗辑思维的公号已经发出。我对他其实了解不多,简单作下框...
    第一公文馆阅读 4,806评论 0 1
  • 今天,13:30,我们约,给你一节好课 天气,是一个特别的词语 天,是一个系统!气,是一个契机!这个世界所有的一切...
    ykxcxlm阅读 1,180评论 0 0

友情链接更多精彩内容