[Symbol.toPrimitive](hint) hint 什么时候为 default?

本文探讨了JavaScript中Symbol.toPrimitive方法的使用,特别是在hint参数为'default'时的情况。当运算符如+既可处理数字又可处理字符串时,会触发'default' hint,导致对象转换为原始值。总结了hint的三种可能取值:'number'、'string'和'default',并提供了示例来解释转换规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

Symbol.toPrimitive() 用于将对象转换为原始值,包括字符串、数字和未指定的原始类型。
且其转换取决于传入的一个字符串参数 hint 。
hint 的可能取值为 ‘number’、‘string’、‘default’。

举例说明如下,创建一个对象并修改其 Symbol.toPrimitive 属性:
根据 hint 的不同类型,让其返回不同的值。

let test = {
  [Symbol.toPrimitive] = function(hint){
	switch(hint){
	  case 'number': return 3;
	  case 'string': return 'string case';
	  case 'default':
	  default: return 'default case';
   	}
}
console.log(3 + test); // "3default case"
console.log(3 - test); // 0
console.log(String(test)); // "string case"

通过上例 :
② 3 - test ,该场景应该将 test 转换为数值,因此传入 hint 为 ‘number’,结果为 0。
③ String(test) ,该场景应该将 test 转换为字符串,因此传入 hint 为 ‘string’,结果为 ‘string case’,
这两个比较容易理解,
而 ① 3 + test 的结果为 ‘3default case’,可知 test 调用Symbol.toPrimitive 时传入的 hint 为 ‘default’,
这是因为 + 运算符在此场景下,既可以表示数值相加 ,也可以表示字符串拼接因此该场景转换为 ‘number’ 或 ‘string’ 都可行,当出现这种场景时,传入的 hint 即为 default

总结

hint 取值为:
‘number’:该场合需要转成数值,
‘string’:该场合需要转成字符串,
‘default’:该场合可以转成数值,也可以转成字符串。

参考资料

来自 segmentfault 的 luoqua 大佬的文章
toString方法和valueOf方法以及Symbol.toPrimitive方法的学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值