前言

小伙伴们大家好。今天继续分享Symbol相关的小知识。相信小伙伴们对instanceof,Object.prototype.toString,Number({}),String({})这些都不陌生吧,但小伙伴是否知道当我们使用这些东西时,其实多多少少都会跟Symbol有些许的关系。下面我们就来看一下到底有什么关系呢。

其实在日常开发中,除了能够定义自己使用的Symbol值以外,ES6还为我们提供了一些内置的Symbol属性值,指向语言内部使用的一些方法。

Symbol.hasInstance

对象的Symbol.hasInstance属性指向一个内部的方法,当我们使用instanceof去检测一个对象是否是一个类的实例时,就会调用这个方法。比如:arr instanceof Array,在底层实际调用的是Array[Symbol.hasInstance] (arr)这个方法,注意这个方法的返回值只能是布尔类型。

const Even = {[Symbol.hasInstance](obj) {console.log('instanceof 时我会被调用哦')return Number(obj) % 2 === 0;}
};
1 instanceof Even // false
2 instanceof Even // true
12345 instanceof Even // false

Symbol.toPrimitive

对象的Symbol.toPrimitive属性指向一个内部的方法。当一个对象被转换为原始类型的值时,会调用这个方法并返回该对象被转换为原始类型后的值。
Symbol.toPrimitive被调用时接收一个字符串参数,并且该字符串只能是三个值中的一个:

  • ‘number’:把对象转换为数字时,参数值为’number’
  • ‘string’:把对象转换为字符串,参数值为’string’
  • ‘default’:默认值
let obj = {[Symbol.toPrimitive](hint) {switch (hint) {case 'number':return 1;case 'string':return 'obj';case 'default':return 'default';}
}
Number(obj) // 1
String(obj) // 'obj'
obj == 1 // 'default'

Symbol.toStringTag

对象的Symbol.toStringTag属性指向一个内部的方法。当我们通过调用object.prototype.toString方法去检测对象的具体数据类型时,会把Symbol.toStringTag属性的值返回,并出现在toString方法返回的字符串之中,表示对象的具体类型。比如如果检测一个对象的类型是[object Array],那么Symbol.toStringTag属性的值就是Array

let obj = {[Symbol.toStringTag]: "HelloWorld"
}
class Yannis{static [Symbol.toStringTag] = "Javascript"
}
Object.prototype.toString.call(obj);// [object HelloWorld]
Object.prototype.toString.call(Yannis);// [object Javascript]

总结

通过本章的学习我们又了解到:原来我经常用的实例检测,对象类型检测和对象类型转换还跟Symbol相关呢。关于Symbol的三个内置属性是就分享到这里了。

喜欢的小伙伴欢迎点赞留言加关注哦!

Symbol - 看似平凡的Symbol其实我们每天都在用 - 对象操作相关推荐

  1. Symbol - 看似平凡的Symbol其实我们每天都在用 - 字符串操作

    前言 小伙伴们大家好.前面我们分享了一篇关于对象操作的几个Symbol的内置属性.比如实例检测的Symbol.hasInstance,对象类型转换的Symbol.toPrimitive和检测数据类型的 ...

  2. 世界上最神奇的数字:142857,看似平凡的数字,为什么说他最神奇呢?——The world's most amazing number: 142857...

    世界上最神奇的数字:142857,看似平凡的数字,为什么说他最神奇呢? 我们把它从1乘到6看看 142857 X 1 = 142857 142857 X 2 = 285714 142857 X 3 = ...

  3. 计算机专业可以考天文学研究生吗,天文学专业强势高校来袭 看似冷门考生却挤破头都想去...

    原标题:天文学专业强势高校来袭 看似冷门考生却挤破头都想去 有这样一个专业,听起来让人"望尘莫及",它就是"天文学".提到天文,人们可能都会联想到宇宙" ...

  4. Office Word 公式乱码解决方案 symbol字体安装文件 symbol.ttf下载

    Office的公式变成了乱码,解决方案如下: 下载symbol字体 ,下载地址如下 symbol.ttf字体文件Office公式乱码解决方案-专业指导文档类资源-CSDN下载 安装字体. 重新启动Of ...

  5. undefined reference to symbol xxxxx和undefined symbol:xxxx错误的原因分析以及解决方法

    Linux下编译程序时,经常会遇到"undefined reference to XXX" 报错,或者运行时出现undefined symbol:xxxx报错. 这里总结一些可能的 ...

  6. 编译库文件时报错move_base: symbol lookup error: undefined symbol:

    Q:编译库文件时报错/opt/ros/kinetic/lib/move_base/move_base: symbol lookup error: /home/xjl/deepDisk/ubuntu/f ...

  7. Cannot resolve symbol ‘NotBlank‘ Cannot resolve symbol ‘Email‘ Cannot resolve symbol ‘NotEmpty‘

    @Validated数据检验出现问题 没有添加依赖 <dependency><groupId>org.springframework.boot</groupId>& ...

  8. shouldoverrideurlloading为什么有时候不走_心理学:为什么很多看似不般配的人,往往都能走到最后?...

    每天耕耘最有趣.最实用的心理学 俗话说:不是一家人,不进一家门.很多时候两个人之所以能够在一起,是因为他们之间有很多相似的地方. 例如相同的价值观.兴趣爱好.着装搭配.人生目标等等,这些相似性就像磁铁 ...

  9. 氮化镓充电器哪家做得好_这颗国产器看似简单:每个氮化镓充电器都少不了

    充电头网在OPPO 50W饼干氮化镓快充发布会当天便这款产品其进行了详细的拆解.据充电头网分析得知,这款充电器输入端采用了一颗来自深圳市沃尔德实业有限公司的软桥WRMSB40M(沃尔德已取得" ...

最新文章

  1. 加解密基础——(对称加密、非对称加密和混合加密)
  2. 避免重蹈欧美“超级电厂”覆辙 瑞星全力保障国内电力行业信息安全
  3. c语言静态图片做成动态效果,如何使静态图片做成动态效果?怎么让静态图片动起来...
  4. PHPCMS修改域名
  5. adf4350配置_配置MySQL以进行ADF开发
  6. php open gl,Open GL 资料 01
  7. 详解MySQL执行事务的语法和流程
  8. 【janino】janino自定义函数报错A method named xx is not declared in any enclosing class nor through a static
  9. egg结合mysql如何做数据返回_egg-mysql使用体验和笔记
  10. Redis详解(一)——基础知识与安装
  11. php伪随机数 ctf,[GWCTF 2019]枯燥的抽奖
  12. 儿童专注力训练——虚线描成实现
  13. 淘宝信用等级|淘宝买家信用等级|淘宝卖家信用等级(图片介绍更清晰)
  14. 作为审稿人,你什么情况下会选择拒稿?
  15. 物体识别,Win7下运行TensorFlow Object Detection API详细版教程(零基础操作)
  16. zdm各命令的功能和作用_ZDM命令 注释
  17. UVa 1647 - Computer Transformation
  18. Centos 7搭建DNS(5)智能DNS
  19. 浅斟低唱的词坛第一人——柳永
  20. git clone 出现fatal: unable to access https://github 解决方法

热门文章

  1. 提高电脑运行速度--关闭电脑无用服务
  2. 历史在重演:从KHTML到WebKit,再到Blink(转)
  3. win10无法连接wifi_Wifi出现“已连接但无法上网”怎么办, 用这6个方法就能解决?...
  4. Advanced IP Scanner教程 详细使用方法
  5. 【软件测试学习笔记】接口自动化测试基础-Day1 网络协议 2020-09-21
  6. mysql 从多个表中删除行,MySQL从多个表中删除行
  7. 解决FileReader读取文本文件中字乱码问题
  8. shared_ptr的引用计数原理
  9. Gitlab修改服务端及客户端密码方式方法
  10. Android基础整合项目之节日群发助手(二)