前端技巧-JS元编程ES6 symbol公开符号

本文介绍ES6中新增的Symbol类型及其内置符号的应用,包括Symbol.iterator用于定义迭代逻辑、Symbol.toStringTag与Symbol.hasInstance用于类型判断、Symbol.species用于控制实例生成及Symbol.toPrimitive用于控制类型转换。

元编程就是指以操作目标为程序本身的行为特性的编程,而在ES6中增加了类型symbol,除了自定义的符号之外,还预定义了其他的一些内置符号,可以被称为内置符号。下面就来给大家介绍一下这些内置符号。

1、Symbol.iterator

这个符号表示任意对象上的一个专门的属性,语言机制会自动的在这个属性上寻找一个方法,这个方法会构造一个迭代器来消耗这个对象的值。… 展开和 for…of 循环会自动使用它。

我们也可以通过自定义 Symbol.iterator 属性为任意对象值定义自己的迭代器逻辑,它将覆盖默认的迭代器。我们相当于是定义了一种元编程的行为,提供给JavaScript其他部分(也就是运算符和循环结构)在处理定义的对象时使用。
在这里插入图片描述

2、Symbol.toStringTag 与 Symbol.hasInstance

在日常逻辑中经常出现的一个场景,判断一个值是什么类型,通常使用的是 toString() 和 instanceof 。
在这里插入图片描述

现在 ES6 中,可以定义这些操作的行为特性了。
在这里插入图片描述

通过以上案例我们可以看出:

toStringTag 符号指定了在 [object XXXX] 字符串化时使用的字符串值。

hasInstance 符号是在构造器函数上的一个方法,接受实例对象值,通过返回 true 或者 false 来显示这个值是否可以被认为是一个实例。

在 Function.prototype 上 hasInstance 默认的 writable 是 false,不可写入。可以通过 Object.defineProperty() 来绕开它。

3、Symbol.species

这个符号控制要生成新的实例时,类的内置方法使用哪一个构造器。 内置原生构造器 Symbol.species 的默认行为是 return this 。 如果要定义生成新的实例的方法,使用new this.constructorSymbol.species ,然后继承的类就可以根据它来控制由哪个构造器来产生这些实例。
在这里插入图片描述

4、Symbol.toPrimitive

在ES6之前,对象为了某个操作(例如相加 + 或比较 == )必须强制转换为原生类型时,是无法控制该行为的 ,现在可以通过Symbol.toPrimitive这个符号来控制这个行为。
在这里插入图片描述

Symbol.toPrimitive 方法根据调用 ToPrimitive 的运算期望的类型,会提供一个类型(type) 指定 “string”、“number” 或 “default”。

以上就是es6 symbol的介绍了,希望能帮到大家。

本文来自千锋教育,转载请注明出处。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值