在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.aiwalls.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)
摘自 haibin369