JavaScript對象的類型轉換

來源:互聯網
上載者:User

在JavaScript中,對象轉換成基礎資料型別 (Elementary Data Type)或者字串用到了toString() 方法和alueOf()方法。
 
 
 
將對象轉換成字串時:
 
1.調用對象的toString()方法,將對象轉換成返回的字串,如果方法返回其它基礎資料型別 (Elementary Data Type),則會自動轉換成字串;
 
2.如果對象沒有toString()方法,或方法返回的不是基礎資料型別 (Elementary Data Type),那麼以相同方式調用valueOf()方法;
 
3.同樣,如果valueOf()方法不存在或者傳回值不是基礎資料型別 (Elementary Data Type),則提示錯誤(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])
 
類似的,將對象轉換成基礎資料型別 (Elementary Data Type)時也會作相應處理,但是會先調用valueOf() 函數而不是toString()。
 
將對象轉換成基礎資料型別 (Elementary Data Type)時:
 
1.調用對象的valueOf() 方法,將對象轉換成返回的基礎資料型別 (Elementary Data Type);
 
2.如果對象沒有valueOf() 方法,或方法返回的不是基礎資料型別 (Elementary Data Type),那麼以相同方式調用toString()方法;
 
3.同樣,如果toString()方法不存在或者傳回值不是基礎資料型別 (Elementary Data Type),則提示錯誤;
 
 
 
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.當“+”的兩個運算元有物件類型時,先把對象根據上面的規則轉換成基礎資料型別 (Elementary Data Type);
 
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)
 
摘自 haibin369

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.