10Symbol

概述

  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 方法
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1.概述 ES5的对象属性名都是字符串,这容易造成属性名的冲突。比如,你使用了一个他人提供的对象,但又想为这个对象...
    赵然228阅读 4,208评论 2 10
  • 本人是android开发的,由于最近React Native的火热,再加上自己完全不懂JS的语法,俗话说的好"落后...
    Bui_vlee阅读 2,361评论 0 0
  • ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值。它是JavaScript语言的第七种数据类型,前...
    语目阅读 9,342评论 0 3
  • 我想知道弄丢朋友的到底是什么,因为不想再失去任何一个。 从小到大,每学期每年我们都会遇到新的同学,都会交到新的朋友...
    木木青南阅读 3,047评论 0 1
  • “洗脑”二字最近能是我听得最多的词。“你已被洗脑”“看那么多那些性格书,有什么用,小心被乐嘉洗脑了”“还花钱去听...
    承思而行阅读 1,787评论 0 1

友情链接更多精彩内容