Object.prototype.valueOf()

valueOf() 方法返回指定对象的原始值。

语法

object.valueOf()

返回值

返回值为该对象的原始值。

描述

  • JavaScript 中的 valueOf() 方法用于返回指定对象的原始值,若对象没有原始值,则将返回对象本身。通常由JavaScript内部调用,而不是在代码中显式调用。当遇到要预期的原始值的对象时,JavaScript会自动调用它。

  • 默认情况下,valueOf方法由Object后面的每个对象继承。 每个内置的核心对象都会覆盖此方法以返回适当的值。如果对象没有原始值,则valueOf将返回对象本身。

  • JavaScript的许多内置对象都重写了该函数,以实现更适合自身的功能需要。因此,不同类型对象的valueOf()方法的返回值和返回值类型均可能不同。

不同类型对象的valueOf()方法的返回值

对象 返回值
Array 返回数组对象本身。
Boolean 布尔值。
Date 存储的时间是从 1970 年 1 月 1 日午夜开始计的毫秒数 UTC。
Function 函数本身。
Number 数字值。
Object 对象本身。这是默认情况。
String 字符串值。
Math 和 Error 对象没有 valueOf 方法。

覆盖自定义对象的 valueOf方法

可以创建一个取代 valueOf方法的函数,该方法不能传入参数。

MyNumberType.prototype.valueOf = function() {return customPrimitiveValue
}

有了这样的一个方法,下一次每当MyNumberType要被转换为原始类型值时,JavaScript 在此之前会自动调用自定义的valueOf方法。
valueOf方法一般都会被 JavaScript 自动调用,但也可以像下面代码那样自己调用:

myNumberType.valueOf()

Symbol.toPrimitive

对象的Symbol.toPrimitive属性,指向一个方法。该对象被转为原始类型的值时,会调用这个方法,返回该对象对应的原始类型值。
Symbol.toPrimitive(hint)方法作用同valueOf()一样,但是优先级要高于valueOf()。
Symbol.toPrimitive被调用时,会接受一个字符串参数,表示当前运算的模式,一共有三种模式。

  • number:该场合需要转成数值
  • string:该场合需要转成字符串
  • default:该场合可以转成数值,也可以转成字符串
let obj = {[Symbol.toPrimitive](hint) {switch (hint) {case 'number':return 123;case 'string':return 'str';case 'default':return 'default';default:throw new Error();}}
};2 * obj // 246
3 + obj // '3default'
obj == 'default' // true
String(obj) // 'str'

参考文档

MDN
ES6

JavaScript中的valueOf方法详解相关推荐

  1. JavaScript字符串对象的方法详解

    JavaScript字符串对象的方法详解 前面的博客我们说到了字符串对象的创建,属性及字符串的拼接.现在来详细讲一下字符串的方法. 1.ES6之前的方法 // js字符串的方法var str=&quo ...

  2. JavaScript中DOM对象的详解

    *** JavaScript中DOM对象的详解*** DOM对象:Document Object Model,文档对象模型.也称为document(文档对象),是HTML页面当前窗体的内容,是连接JS ...

  3. php 实现setinterval,JavaScript中setInterval的使用详解

    相信很多大伙都知道JavaScript中setInterval的作用是在播放动画的时,每隔一定时间就调用函数,方法或对象,也有很多小伙伴对此也只是知道setInterval的定义.也是一知半解,今天我 ...

  4. java多线程中的join方法详解

    java多线程中的join方法详解 方法Join是干啥用的? 简单回答,同步,如何同步? 怎么实现的? 下面将逐个回答. 自从接触Java多线程,一直对Join理解不了.JDK是这样说的:join p ...

  5. Java中的main()方法详解

    源文作者:leizhimin    源文链接:http://lavasoft.blog.51cto.com/62575/53263 源文作者版权申明: 版权声明:原创作品,允许转载,转载时请务必以超链 ...

  6. Python 在子类中调用父类方法详解(单继承、多层继承、多重继承)

    Python 在子类中调用父类方法详解(单继承.多层继承.多重继承)   by:授客 QQ:1033553122   测试环境: win7 64位 Python版本:Python 3.3.5 代码实践 ...

  7. php 文件扫描去重,PHP中的去重方法详解和文件下载

    本文主要和大家分享PHP中的去重方法详解和文件下载,在php中文件导入过程中,经常会遇到重复事件,那么就需要我们去重,然后进行下载. 1.思想 先设置一个存储主键数组,和一个空数组.解析文件,然后看要 ...

  8. keep alive PHP,vue中keep-alive使用方法详解

    这次给大家带来vue中keep-alive使用方法详解,vue中keep-alive使用的注意事项有哪些,下面就是实战案例,一起来看一下. 1.keep-alive的作用以及好处 在做电商有关的项目中 ...

  9. valueOf()方法详解

    valueOf方法返回指定对象的值 方法格式 object.valueOf() 返回值 返回该对象的原始值 方法描述 JavaScript 中的 valueOf() 方法用于返回指定对象的原始值,若对 ...

最新文章

  1. 单片机中存储器扩展位地址线怎么算_小白学单片机 :AT89S51单片机基本硬件结构认识(2)...
  2. 三插头内部结构图_10寸三防加固平板电脑 条码数据采集器 工业级耐摔防爆 高清屏幕带网口串口 支持航空插头...
  3. 剑指offer-数组中出现次数超过一半的数字
  4. VMware Workstation安装64位操作系统遇到的小问题
  5. infor wms 中英文对照_【融合·君豪】新君豪中英文学校第十周食谱
  6. 割平面法只能求解纯整数规划吗_【DMC第四讲】整数规划
  7. 前端/JS笔记-利用JS/正则判断input是否存数字以及字母加数字
  8. [Ext JS6]Sencha Cmd
  9. Icons8 Cube4Nano专业外置声卡设备与windows event log无法启动
  10. 汉字转GB2312编码程序c语言
  11. ****怎么解决UBUNTU里面VIM编辑器键盘错乱问题****
  12. c语言可编写的游戏,占卜子女兴盛大全篇
  13. C语言入门 -- Simple Simon 简单的西蒙游戏(2021/1/7)
  14. MySQL安装后默认密码的问题
  15. 光学系统设计学习笔记1
  16. 程序员应该如何做才能更好的实现自我价值?
  17. 孙陶然:不要轻易开始创业
  18. 中国(澳门)高校青年学生联合会港澳台侨联考辅导中心落户高科院
  19. Power BI产品帕累托分析
  20. 全志A10s芯片用户手册

热门文章

  1. jQuery滑块拼图验证插件
  2. TR069协议与商业应用4——TR069服务器测试工具
  3. mybatis逆向工程和批量插入
  4. 马氏距离+协方差公式+无偏估计
  5. 支持post的web服务器搭建,搭建Web服务器
  6. [python][mediapipe]摄像头人脸检测
  7. 程矢Axure夜话:Axure手机原型视频教程之微信公众ETC添加公众号
  8. 一文带你从Vue2.x大迈步走进Vue.js 3.0新时代
  9. python 画频率分布直方图_[python常用图件绘制#03]Gamma分布拟合图
  10. TF-IDF基本原理简释