js对象中的valueOf()方法和toString()方法非常类似,但是,当需要返回对象的原始值而非字符串的时候才调用它,尤其是转换为数字的时候。如果在需要使用原始值的上下文中使用了对象,JavaScript就会自动调用valueOf()方法。

valueOf()方法是Object的原型方法,每个对象都具有该方法,但是各对象返回的值有一定的区别。我们一起来看看。

Object.prototype.valueOf()

JavaScript调用valueOf()方法将对象转换为原始值。你很少需要自己调用valueOf()方法;

默认情况下,valueOf()方法由Object后面的每个对象继承。每个内置的核心对象都会覆盖此方法以放回适当的值。

如果对象没有原始值,则valueOf()将返回对象本身。

你可以在自己的代码中使用valueOf()将内置对象转换为原始值。创建自定义对象时,可以覆盖Object.prototype.valueOf()来调用自定义方法,而不是默认Object方法。

覆盖自定义对象的valueOf()方法

你可以创建一个取代valueOf()方法的函数,你的方法必须不能传入参数。

假设你有个对象叫MyNumberType而你想为它创建一个valueOf()方法。下面的代码为valueOf()方法赋予了一个自定义函数:

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

有了这样的一个方法,下一次每当MyNumberType要被转换为原始类型值时,JavaScript在此之前会自动调用自定义的valueOf()方法。

valueOf()方法一般都会被JavaScript自动调用,但你也可以像下面代码那样自己调用:

myNumberType.valueOf()

String.prototype.valueOf()

语法:strObj.valueOf()

返回值:表示给定String对象的原始值

说明:valueOf()方法返回一个String对象的原始值,该值等同于String.prototype.toString()

该方法通常在JavaScript内部被调用,而不是在代码里显示调用。

let x = new String('Hello world')
console.log(x.valueOf()) // Hello world

Date.prototype.valueOf()

语法:dataObj.valueOf()

返回值:表示给定Date对象的原始值

说明:valueOf()方法返回以数值格式表示的一个Date对象的原始值。该值从1970年1月1日0时0分0秒(UTC,即协调世界时)到该日期对象所代表时间的毫秒数。

该方法的功能和Date.prototype.getTime()方法一样。

该方法通常在JavaScript内部调用,而不是在代码中显示调用。

var x = new Date(2018, 1, 12)
var myVar = x.valueOf()
console.log(myVar) // 1518364800000

Number.prototype.valueOf()

语法: numObj.valueOf()

返回值:表示给定Number对象的原始值。

说明:该方法通常在JavaScript内部调用,而不是在代码中显示调用。覆盖Object.prototype.valueOf()方法

案例:

Boolean.prototype.valueOf()

语法:bool.valueOf()

返回值: 返回给定Boolean对象的原始值

说明: BooleanvalueOf()方法返回一个Boolean字面量的原始值作为布尔数据类型。该方法通常在JavaScript内部调用,而不是在代码中显示调用。

案例:

Symbol.prototype.valueOf()

语法: Symbol().valueOf()

返回值:返回给定Symbol对象的原始值

说明:SymbolvalueOf()方法返回Symbol对象的原始值作为Symbol数据类型。JavaScript调用valueOf()方法将对象转换为原始值。你很少需要自己调用valueOf()方法。当遇到期望有原始值的对象时,JavaScript会自动调用它。

案例:



[完]

最新文章

  1. PHP反向代理-百度图片
  2. 【BZOJ-1103】大都市meg 树状数组 + DFS序
  3. 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数002·AI人工智能
  4. ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(十四)之漏掉的客服消息
  5. 系统安全扫描工具(appscan)的扫描类型小记
  6. Puppet's Architecture 3.7
  7. [freemarker篇]04.简单介绍-基本数据类型
  8. Share SDK 第三方登录
  9. JAVA的设计模式之单例设计模式
  10. 重学C语言 -- printf,scanf
  11. SQLLoader1(简单测试,以控制文件方式导入数据)
  12. maven01 hello maven
  13. Python的自学之路:Python基础(一)
  14. B - Glider Gym - 101911B(二分)
  15. python内置函数zip
  16. Linux——vi的使用
  17. C#使用Xamarin开发Android应用程序 -- 系列文章
  18. [PHP]快速实现:将二维数组转为一维数组
  19. thread == 票池
  20. 常用SQL函数(字符串分隔转表、自增长转编号)

热门文章

  1. Head First设计模式之访问者模式
  2. ES6 modules 详解
  3. Effective Java 第三版——17. 最小化可变性
  4. nodejs 之 nvm和pm2
  5. C#WinCE程序(.NET Compact Framework 3.5)项目重构面向抽象设计
  6. 微信小程序<web-view>嵌入网页后,小程序如何和网页交互传值?
  7. 轻松逃脱某防火墙对ss的探测
  8. python实现单例模式
  9. webp怎么打开 webp怎么转换成jpg
  10. H5中的web worker示例demo分析