JavaScript对象的类型转换

在JavaScript中,对象转换成基本数据类型或者字符串用到了toString() 方法和alueOf()方法。

 

将对象转换成字符串时:

1.调用对象的toString()方法,将对象转换成返回的字符串,如果方法返回其它基本数据类型,则会自动转换成字符串;

2.如果对象没有toString()方法,或方法返回的不是基本数据类型,那么以相同方式调用valueOf()方法;

3.同样,如果valueOf()方法不存在或者返回值不是基本数据类型,则提示错误(IE可能不会报错);

Js代码 复制代码  收藏代码
  1. //自定义函数(类)   
  2. function myObject(objectName)   
  3. {   
  4.     this.objectName = objectName;   
  5. }   
  6. var myObj = new myObject("MyObj");   
  7.   
  8. //正常情况,首先调用toString()方法   
  9. myObject.prototype.toString = function(){return 123;};   
  10. myObject.prototype.valueOf = function(){return 321;};   
  11. alert(myObj);   //结果为123   
  12.   
  13. //toString()方法返回不正确类型,调用valueOf()方法   
  14. myObject.prototype.toString = function(){return new Date();};   
  15. myObject.prototype.valueOf = function(){return 321;};   
  16. alert(myObj);   //结果为321   
  17.   
  18. //toString()方法不存在,valueOf()方法返回不正确类型   
  19. myObject.prototype.toString = undefined;   
  20. myObject.prototype.valueOf = function(){return new Date();};   
  21. alert(myObj);   //提示错误(IE8中不报错并提示[Object])  
//自定义函数(类)
function myObject(objectName)
{
	this.objectName = objectName;
}
var myObj = new myObject("MyObj");

//正常情况,首先调用toString()方法
myObject.prototype.toString = function(){return 123;};
myObject.prototype.valueOf = function(){return 321;};
alert(myObj);	//结果为123

//toString()方法返回不正确类型,调用valueOf()方法
myObject.prototype.toString = function(){return new Date();};
myObject.prototype.valueOf = function(){return 321;};
alert(myObj);	//结果为321

//toString()方法不存在,valueOf()方法返回不正确类型
myObject.prototype.toString = undefined;
myObject.prototype.valueOf = function(){return new Date();};
alert(myObj);	//提示错误(IE8中不报错并提示[Object])

 

类似的,将对象转换成基本数据类型时也会作相应处理,但是会先调用valueOf() 函数而不是toString()。

将对象转换成基本数据类型时:

1.调用对象的valueOf() 方法,将对象转换成返回的基本数据类型;

2.如果对象没有valueOf() 方法,或方法返回的不是基本数据类型,那么以相同方式调用toString()方法;

3.同样,如果toString()方法不存在或者返回值不是基本数据类型,则提示错误;

 

Js代码 复制代码  收藏代码
  1. //自定义函数(类)   
  2. function myObject(objectName)   
  3. {   
  4.     this.objectName = objectName;   
  5. }   
  6. var myObj = new myObject("MyObj");   
  7.   
  8. //正常情况,首先调用valueOf()方法   
  9. myObject.prototype.toString = function(){return 123;};   
  10. myObject.prototype.valueOf = function(){return 321;};   
  11. alert(myObj*2);         //结果为642   
  12.   
  13. //valueOf()方法返回不正确类型,调用toString()方法   
  14. myObject.prototype.toString = function(){return 123;};   
  15. myObject.prototype.valueOf = function(){return new Date();};   
  16. alert(myObj*2);         //结果为246   
  17.   
  18. //toString()方法不存在,valueOf()方法返回不正确类型   
  19. myObject.prototype.toString = undefined;   
  20. myObject.prototype.valueOf = function(){return new Date();};   
  21. alert(myObj*2);         //提示错误  
//自定义函数(类)
function myObject(objectName)
{
	this.objectName = objectName;
}
var myObj = new myObject("MyObj");

//正常情况,首先调用valueOf()方法
myObject.prototype.toString = function(){return 123;};
myObject.prototype.valueOf = function(){return 321;};
alert(myObj*2);			//结果为642

//valueOf()方法返回不正确类型,调用toString()方法
myObject.prototype.toString = function(){return 123;};
myObject.prototype.valueOf = function(){return new Date();};
alert(myObj*2);			//结果为246

//toString()方法不存在,valueOf()方法返回不正确类型
myObject.prototype.toString = undefined;
myObject.prototype.valueOf = function(){return new Date();};
alert(myObj*2);			//提示错误

 

 当对象操作设计“+”运算符时就要特别注意,因为“+”既能进行算数操作,也能进行字符串拼接操作。

1.当“+”的两个操作数有对象类型时,先把对象根据上面的规则转换成基本数据类型;

2.转换完的两个操作数如果有一个是字符串类型的,则把另一个操作数转换成字符串;

3.否则,把两个操作数都转换成数值类型(或NaN),进行相加操作。

 

Js代码 复制代码  收藏代码
  1. //自定义函数(类)   
  2. function myObject(objectName)   
  3. {   
  4.     this.objectName = objectName;   
  5. }   
  6. var myObj = new myObject("MyObj");   
  7.   
  8. //正常情况,首先调用valueOf()方法,返回数字   
  9. myObject.prototype.toString = function(){return 123;};   
  10. myObject.prototype.valueOf = function(){return 321;};   
  11. alert(myObj + 1);           //结果为322(数值相加)   
  12. alert(myObj + "1");         //结果为3211(字符串拼接)   
  13.   
  14. //正常情况,首先调用valueOf()方法,返回字符串   
  15. myObject.prototype.toString = function(){return 123;};   
  16. myObject.prototype.valueOf = function(){return "321";};   
  17. alert(myObj + 1);           //结果为3211(字符串拼接)   
  18. alert(myObj + "1");         //结果为3211(字符串拼接)   
  19.   
  20. //valueOf()方法返回不正确类型,调用toString()方法,返回字符串   
  21. myObject.prototype.toString = function(){return "123";};   
  22. myObject.prototype.valueOf = function(){return new Date();};   
  23. alert(myObj + 1);           //结果为1231(字符串拼接)   
  24. alert(myObj + "1");         //结果为1231(字符串拼接)   
  25.   
  26. //toString()方法不存在,valueOf()方法返回不正确类型   
  27. myObject.prototype.toString = undefined;   
  28. myObject.prototype.valueOf = function(){return new Date();};   
  29. alert(myObj + 1);           //提示错误(IE8不报错,并提示undefined)   
  30. alert(myObj + "1");         //提示错误(IE8不报错,并提示undefined)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值