你想要的一眼就知道的【Symbol】

js的基本数据类型

基本类型:String,Boolean,Number,Symbol,Undefind,Null
引用类型:Array,Object,Function

Symbol

  • 什么是Symbol?
    • 是js语言的一种数据类型,和String,Number一样。
  • 为什么要用Symbol?
    • Symbol的作用: ES6引入,生成一个随机的且独一无二的值
    • Symbol的使用场景:Symbol 包装器对象作为属性的键; 举个栗子: 你想在一个已存在的对象中添加属性,但是不知道该对象里有哪些属性,为避免属性名命名重复,可以使用Symbol来生成一个独一无二的属性名。
  • 怎么使用symbol?
    • 如何生成这个值:let a = Symbol('s11'),或者let a = Symbol.for('s11')
      Symbol()和Symbol.for()的区别,代码借鉴MDN:
      Symbol.for("foo"); // 创建一个 symbol 并放入 symbol 注册表中,键为 "foo"
      Symbol.for("foo"); // 从 symbol 注册表中读取键为"foo"的 symbol
      
      Symbol.for("bar") === Symbol.for("bar"); // true,证明了上面说的
      Symbol("bar") === Symbol("bar"); // false,Symbol() 函数每次都会返回新的一个 symbol
      
      let a = Symbol('a');
      a === Symbol.for('a'); // false
      
      var sym = Symbol.for("mario");
      sym.toString(); 
      // "Symbol(mario)",mario 既是该 symbol 在 symbol 注册表中的键名,又是该 symbol 自身的描述字符串
      
      //为了防止冲突,最好给你要放入 symbol 注册表中的 symbol 带上键前缀。
      Symbol.for("mdn.foo");
      Symbol.for("mdn.bar");
      
    • 如何取到这个属性名:无法用for...in,for...of进行属性名遍历,无法用Object.keys()Object.getOwnPropertyNames()获取属性。可以用Objrect.getOwnPropertySymbols()获取。
      let a = Symbol('a');
      let b = Symbol('b');
      let obj = {};
      obj[a] = 'valueA';
      obj[b] = 'valueB';
      obj[Symbol('d')] = 'valueD'
      let objKeyList = Object.getOwnPropertySymbols(obj);
      console.log(objKeyList.length); // => 2
      console.log(objKeyList); // => [ Symbol(a), Symbol(b) ]
      console.log(a===Symbol.for('a'))
      
      console.log(JSON.stringify({[Symbol('c')]:'value'})) // {}
      console.log(JSON.stringify(obj[Symbol('c')])) // => undefined
      console.log(obj[a]) // => valueA
      console.log(obj[Object(a)]) // => valueA
      console.log(obj[Symbol('d')]) // => undefined ; 因为每次Symbol()都是新生成一个值,此处的Symbol('d')和上面不是同一个
      
      
    • 如何取到该属性值:上面代码obj[a]obj[Object(a)]就可以获取到属性值,变量a已经存储了固定的属性名,但如果用obj[Symbol('d')]就会重新生成一个属性名。
  • 深度了解symbol(待更新)
    …todo…
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值