基本上所有的JavaScript数据类型都有valueOf(),toString()方法,null除外,这两个方法解决了JavaScript值运算和显示的问题
valueOf()会把数据类型转换成原始类型,也就是说原来是什么类型,转换后还是什么类型,日期类型除外
toString()会把数据类型转换成string类型,也就是说不管原来是什么类型,转换后一律是string类型
 
这两个方法有意思的地方在于什么时候使用,总结如下:
1、valueOf()偏向于运算,toString()偏向于显示
2、对象转换时,优先调用toString()
3、强转字符串的情况下,优先调用toString()方法;强转数字的情况下优先调用valueOf()
4、正常情况下,优先调用toString()
5、在有运算操作符的情况下valueOf()的优先级高于toString(),这里需要注意的是当调用valueOf()方法无法运算后还是会再调用toString()方法
下面来看个案例:
var a = { a : 10 , toString : function(){ console.log("tostring"); return this.a } };
alert(+a); //10 tostring,先调用valueOf()方法,发现无法进行+运算,紧接着调用toString()方法
var b= {a:2,valueOf:function(){return this.a+2}};
alert(+b) //4 ,先调用valueOf()方法,返回4,可以进行运算,不再调用toString()
 
var b= {a:2,valueOf:function(){return this.a+2},toString : function(){ console.log("tostring"); return this.a }};
alert(+b) //4 ,先调用valueOf()方法,返回4,可以进行运算,不再调用toString(),从输出上可以看出没有调用toString()方法
JavaScript各种数据对象调用valueOf,toString返回值也是个容易出错的地方,下面做个总结:
调用valueOf()
对象 返回值 类型
Array 数组本身 Array
Boolean Boolean 值。 Boolean
Date 存储的时间是从 1970 年 1 月 1 日午夜开始计的毫秒数 UTC。 Number
Function 函数本身。 Function
Number 数字值。 Number
Object 对象本身。这是默认情况。 Object
String 字符串 String
调用toString()
对象 返回值 类型
Array 数组的元素被转换为字符串,这些字符串由逗号分隔,连接在一起。其操作与 Array.toString 和 Array.join 方法相同。 String
Boolean 字符串“true”,“false” String
Date 字符串日期,如"Fri Dec 23 2016 11:24:47 GMT+0800 (中国标准时间)" String
Function 函数字符串 String
Number 字符串形式值 String
Object "[object Object]" String
String 字符串 String
 
 
参考资料:
http://www.jb51.net/article/34843.htm  想看案例的可以看看这个

valueOf和toString的区别的更多相关文章

  1. String.valueOf()和toString()的区别

    1.String.valueOf(): Object obj=null; String str=""; str=String.valueOf(obj); //str=obj.toS ...

  2. 深入理解Javascript中的valueOf与toString

    基本上,javascript中所有数据类型都拥有valueOf和toString这两个方法,null除外.它们俩解决javascript值运算与显示的问题,本文将详细介绍,有需要的朋友可以参考下. t ...

  3. Javascript中valueOf与toString区别

    前言 基本上,所有JS数据类型都拥有这两个方法,null除外.它们俩解决JavaScript值运算与显示的问题,重写会加大它们调用的优化. 测试分析 先看一例:var aaa = {  i: 10,  ...

  4. Javascript中的valueOf与toString

    基本上,javascript中所有数据类型都拥有valueOf和toString这两个方法,null除外.它们俩解决javascript值运算与显示的问题,本文将详细介绍,有需要的朋友可以参考下. t ...

  5. valueOf和toString

    有一道经典的题目: var add = function() {___}; console.log(add(3)(4)(5)); // 输出60 题目要求能无限相乘,请补充add函数. 首先很显然,a ...

  6. ToString()和Convert.ToString()的区别

    ToString()和Convert.ToString()的区别 一般情况下,这两种方法都可以通用,但是当返回的数据类型中有可能出现null值时如果调用ToString方法了,就会返回NullRefe ...

  7. C# ToString()和Convert.ToString()的区别

    一.一般用法说明 ToString()是Object的扩展方法,所以都有ToString()方法;而Convert.ToString(param)(其中param参数的数据类型可以是各种基本数据类型, ...

  8. C# ToString()和Convert.ToString()的区别【转】

    一.一般用法说明 ToString()是Object的扩展方法,所以都有ToString()方法;而Convert.ToString(param)(其中param参数的数据类型可以是各种基本数据类型, ...

  9. JavaScript的valueOf和toString

    深度好文 http://www.cnblogs.com/coco1s/p/6509141.html 知识要点 不同对象调用valueOf和toString的顺序不一样 高阶函数的使用,替代for循环 ...

随机推荐

  1. jQuery操作DOM元素

    作为一个后端程序员,也是要和前端页面打交道的.最常见的场景莫过DOM元素操作和前端页面使用AJAX向服务器发送请求.实现上述两个功能当然可以使用原生js来完成,但在实际开发过程中很少这样做,通常会使用 ...

  2. iOS冰与火之歌(番外篇) - 基于PEGASUS(Trident三叉戟)的OS X 10.11.6本地提权

    iOS冰与火之歌(番外篇) 基于PEGASUS(Trident三叉戟)的OS X 10.11.6本地提权 蒸米@阿里移动安全 0x00 序 这段时间最火的漏洞当属阿联酋的人权活动人士被apt攻击所使用 ...

  3. js正则表达式校验非零的正整数:^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. struts2类型转换

    1. Struts2中的类型转换 我们知道通过HTTP提交到后台的数据,都是字符串的形式,而我们需要的数据类型当然不只字符串类型一种.所以,我们需要类型转换! 在Struts2中,类型转换的概念除了用 ...

  5. Quartz —— 从 HelloWorld 开始

    1.Quartz 是用来完成任务调度的. 2.Quartz 的三个核心概念:调度器.任务.触发器. (1)Job:通过实现该接口来定义需要执行的任务. public interface Job { / ...

  6. 有主线程发送message给子线程

    通常我们在处理耗时任务时候都会通过新建线程来处理,当任务处理完后通过Handler将结果发送回主线程.比如下面示例: package com.example.testlistener; import ...

  7. 关于bundle install 的一点补充

    在第一次运行bundle install之后,生成了Gemfile.lock文件,里面记录gem的具体版本号,按照官方文档说明,以后运行bundle install就不会再依据Gemfile,而是根据 ...

  8. C#语句2——循环语句(for循环与for循环嵌套)

    循环:反复执行某段代码. 循环四要素:初始条件,循环条件,循环体,状态改变. for(初始条件;循环条件;状态改变) { 循环体 } break ——中断循环,跳出整个循环 continue——停止本 ...

  9. Java 消息摘要 散列 MD5 SHA

    package xxx.common.util; import java.math.BigInteger; import java.security.MessageDigest; import jav ...

  10. java、easyui-combotree树形下拉选择框

    最近一直在研究这个树形的下拉选择框,感觉非常的有用,现在整理下来供大家使用: 首先数据库的表架构设计和三级菜单联动的表结构是一样,(父子关系) 1.下面我们用hibernate建一下对应的额实体类: ...