关于valueOf() 和 toString(),我们需要知道的事儿

以下代码均在Chrome控制台测试。

###1.valueOf()

  1. 解释:返回指定对象的原始值。
  2. 当对象需要原始值的时候,JavaScript会自动调用它。
  3. 不同类型对象的valueOf()方法的返回值
    Array 返回数组对象本身。
var a = [1];a.valueOf()
[1]

Boolean 布尔值。

var b =true;b.valueOf()
true

Date 存储的时间是从 1970 年 1 月 1 日午夜开始计的毫秒数 UTC。

var d =new Date();d.valueOf()

1533023968670

Function 函数本身。

var f = new Function();f.valueOf();
ƒ anonymous() {

}

Number 数字值。

var n = new Number();n.valueOf()
0
var n = new Number(8);n.valueOf()
8
var n = new Number('');n.valueOf()
0
var n = new Number('7');n.valueOf()
7

Object 对象本身。这是默认情况。

var o =new Object();o.valueOf()
{}

String 字符串值。

var s =new String();s.valueOf()
""
var s =new String('');s.valueOf()
""

Math对象没有 valueOf 方法,会报错:

var m = new Math();m.valueOf()

VM2102:1 Uncaught TypeError: Math is not a constructor
    at <anonymous>:1:9
(anonymous) @ VM2102:1

Error 对象:

var e = new Error();e.valueOf()
Error
    at <anonymous>:1:9
   ------------ 分割线 -------------
var e = new Error();e.toString()
"Error"

###2.toString()
4. .每个Object对象都包含该方法。
5. 当Object对象以字符串方式引用时会被自动调用,注意,是Object对象。
6. 默认调用时返回[object type]。例如:

var o = new Object();
o.toString();
控制台返回结果:"[object Object]"


4.可以使用toString()检测对象类型
例如:

var a="dd";
toString.call(a);
"[object String]"

function isString(arg){
	return Object.prototype.toString.call(arg) 
	=== "[object String]"
}


两者都可以通过显示原型重新定义:
myObject.prototype.valueOf() = function myValueOf(){};
myObject.prototype.toString() = function myToString(){};
重写函数都可以为匿名函数。

补充说明——Java也存在类似情况:一个类可以自定义(重写)toString方法。

我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=2e6ek1a3vmjoo


微信公众号/头条号:技术很有趣
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值