首页  >  文章  >  web前端  >  JavaScript对象的类型转换

JavaScript对象的类型转换

高洛峰
高洛峰原创
2016-11-25 15:31:401050浏览

在JavaScript中,对象转换成基本数据类型或者字符串用到了toString() 方法和alueOf()方法。
 
 
 
将对象转换成字符串时:
 
1.调用对象的toString()方法,将对象转换成返回的字符串,如果方法返回其它基本数据类型,则会自动转换成字符串;
 
2.如果对象没有toString()方法,或方法返回的不是基本数据类型,那么以相同方式调用valueOf()方法;
 
3.同样,如果valueOf()方法不存在或者返回值不是基本数据类型,则提示错误(IE可能不会报错);
 
Js代码 
//自定义函数(类)  
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]) 
 
//自定义函数(类)
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代码 
//自定义函数(类)  
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);         //提示错误 
 
//自定义函数(类)
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代码 
//自定义函数(类)  
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 + 1);           //结果为322(数值相加)  
alert(myObj + "1");         //结果为3211(字符串拼接)  
 
//正常情况,首先调用valueOf()方法,返回字符串  
myObject.prototype.toString = function(){return 123;};  
myObject.prototype.valueOf = function(){return "321";};  
alert(myObj + 1);           //结果为3211(字符串拼接)  
alert(myObj + "1");         //结果为3211(字符串拼接)  
 
//valueOf()方法返回不正确类型,调用toString()方法,返回字符串  
myObject.prototype.toString = function(){return "123";};  
myObject.prototype.valueOf = function(){return new Date();};  
alert(myObj + 1);           //结果为1231(字符串拼接)  
alert(myObj + "1");         //结果为1231(字符串拼接)  
 
//toString()方法不存在,valueOf()方法返回不正确类型  
myObject.prototype.toString = undefined;  
myObject.prototype.valueOf = function(){return new Date();};  
alert(myObj + 1);           //提示错误(IE8不报错,并提示undefined)  
alert(myObj + "1");         //提示错误(IE8不报错,并提示undefined) 
 
//自定义函数(类)
function myObject(objectName)
{
       this.objectName = objectName;
}
var myObj = new myObject("MyObj");
 www.2cto.com
//正常情况,首先调用valueOf()方法,返回数字
myObject.prototype.toString = function(){return 123;};
myObject.prototype.valueOf = function(){return 321;};
alert(myObj + 1);                 //结果为322(数值相加)
alert(myObj + "1");               //结果为3211(字符串拼接)
 
//正常情况,首先调用valueOf()方法,返回字符串
myObject.prototype.toString = function(){return 123;};
myObject.prototype.valueOf = function(){return "321";};
alert(myObj + 1);                 //结果为3211(字符串拼接)
alert(myObj + "1");               //结果为3211(字符串拼接)
 
//valueOf()方法返回不正确类型,调用toString()方法,返回字符串
myObject.prototype.toString = function(){return "123";};
myObject.prototype.valueOf = function(){return new Date();};
alert(myObj + 1);                 //结果为1231(字符串拼接)
alert(myObj + "1");               //结果为1231(字符串拼接)
 
//toString()方法不存在,valueOf()方法返回不正确类型
myObject.prototype.toString = undefined;
myObject.prototype.valueOf = function(){return new Date();};
alert(myObj + 1);                 //提示错误(IE8不报错,并提示undefined)
alert(myObj + "1");               //提示错误(IE8不报错,并提示undefined)

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn