当前位置: 首页 > news >正文

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

问题描述

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方法的学习

相关文章:

  • JavaScript 对象遍历方法及其遍历顺序的总结
  • vue 实现根据窗口大小自适应图片预览
  • 《计算机网络 自顶向下方法》笔记 - 第二章 应用层
  • 使用 BrowserRouter 报错 invaild hook call 解决方案
  • python中assert关键字的作用
  • CSS3 :nth-child(n)用法
  • CSS3中的transition属性详解
  • HTML中导航栏title前面小图标的实现
  • mysql区分大小写
  • SpringMvc中/和/*的区别
  • varchar 和 varchar2的区别
  • IntelliJ IDEA 各种搜索功能
  • HashMap中的tableSizeFor(int cap)
  • Jdk1.8-HashMap put() 方法tab[i = (n - 1) hash] 解惑
  • JDK1.8源码 resize()解析
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • es的写入过程
  • Javascript设计模式学习之Observer(观察者)模式
  • MD5加密原理解析及OC版原理实现
  • vue-router 实现分析
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 从0实现一个tiny react(三)生命周期
  • 搞机器学习要哪些技能
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 物联网链路协议
  • 运行时添加log4j2的appender
  • ![CDATA[ ]] 是什么东东
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (四)JPA - JQPL 实现增删改查
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (转)shell中括号的特殊用法 linux if多条件判断
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .net Stream篇(六)
  • .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .NET序列化 serializable,反序列化
  • [2009][note]构成理想导体超材料的有源THz欺骗表面等离子激元开关——
  • [Android]Android开发入门之HelloWorld
  • [bzoj4010][HNOI2015]菜肴制作_贪心_拓扑排序
  • [C#基础知识系列]专题十七:深入理解动态类型
  • [C++从入门到精通] 14.虚函数、纯虚函数和虚析构(virtual)
  • [ComfyUI进阶教程] animatediff视频提示词书写要点
  • [corCTF 2022] CoRJail: From Null Byte Overflow To Docker Escape
  • [CTO札记]如何测试用户接受度?
  • [echarts] y轴不显示0
  • [emuch.net]MatrixComputations(7-12)
  • [GN] DP学习笔记板子
  • [IE技巧] 如何关闭Windows Server版IE的安全限制
  • [JMS 3] ActiveMQ实现简单的helloworld
  • [jquery]this触发自身click事件,当前控件向上滑出