10Symbol

作者: 我_巨可爱 | 来源:发表于2017-10-30 16:57 被阅读0次

概述

  1. Symbol 是一种新的数据类型
  2. nullundefined 等六种类型并列。typeof的结果是symbol
  3. 使用Symbol()创建的值,独一无二,与标识相同的symbol值也不同,没有登记机制
  4. 不能与其他类型进行运算,拼接也不行
  5. 显式转化成字符串
  6. 可以转化成布尔类型
  7. 不可以转化成数值类型

作为属性名的Symbol

var mySymbol = Symbol();
var a = {
    [mySymbol] : 'hello!'
}
// 只能用这种方式
a[mySymbol]

消除魔术字符串

魔术字符串,指的是在代码中多次出现,并且与代码形成强耦合的具体字符串或者数值

  1. 其实这个案例是作为属性值的Symbol
const shapgeType = {
    triangle: Symbol()
};
function () {
    // 只要 shapgeType 有属性即可,不需要属性值
}

属性名的遍历

  1. Symbol作为属性名,不会出现在
  • for in
  • for of
  • object.keys()
  • object.getOwnPropertyNames()
  • JSON.stringify()
  1. 可以通过以下方法获取
  • object.getOwnPropertySymbols(),返回一个数组
  • Reflect.ownKeys可以返回所有里类型的键名,包含常规键名和Symbol键名

Symbol.for()Symbol.keyFor()

  1. Symbol.for()相当于进行了登记
  2. Symbol.keyFor()可以找到登记的Symbol
  3. 登记的Symbol是全局环境的,跨越iframe
// 不登记的情况
var s1 = Symbol('hi');
var s2 = Symbol('hi');
s1 === s2; // false

// 登记的情况
var s1 = Symbol.for('hi');
var s2 = Symbol.for('hi');
s1 === s2; // true

内置的 Symbol

ES6 内置了11个Symbol值,可以与一些方法结合使用。

  1. Symbol.hasInstanceinstanceof
  2. Symbol.isConcatSpreadable 和 数组的concat方法
  3. Symbol.matchstr.match()
  4. Symbol.iterator指向对象的默认遍历器方法
  5. 还有很多
// 对象进行 for of 循环时,会调用 Symbol.iterator 方法

相关文章

  • 10Symbol

    概述 Symbol 是一种新的数据类型 与 null或undefined 等六种类型并列。typeof的结果是sy...

网友评论

      本文标题:10Symbol

      本文链接:https://www.haomeiwen.com/subject/eecmpxtx.html