首頁  >  文章  >  web前端  >  JavaScript物件的型別轉換

JavaScript物件的型別轉換

高洛峰
高洛峰原創
2016-11-25 15:31:401063瀏覽

在JavaScript中,物件轉換成基本資料型別或字串用到了toString() 方法和alueOf()方法。
 
 
 
將物件轉換成字串時:
 
1.呼叫物件的toString()方法,將物件轉換成傳回的字串,如果方法傳回其它基本資料型別,則會自動轉換成字串;

2.如果物件沒有toString()方法,或方法傳回的不是基本資料類型,那麼以相同方式呼叫valueOf()方法;
 
3.同樣,如果valueOf()方法不存在或傳回值不是基本資料類型,則提示錯誤(IE可能不會錯誤);
 
Js程式碼 
//自訂函數(類別)  
function myObject(objectName)  
{  
} Name myObject(" MyObj");  
 
//正常情況,首先呼叫toString()方法  
myObject.prototype.toString = function(){return 123;};  myObject.prototype.valueOf = function" alert(myObj);   //結果為123  
 
//toString()方法傳回不正確類型,呼叫valueOf()方法  
myObject.prototype.toString = function(){return new Date(myObject.prototype.toString = function(){return new Date(myObject.prototype.toString = function(){return new Date(); prototype.valueOf = function(){return 321;};  
alert(myObj);   //結果為321  
 
//toString()方法不存在,valueOf()方法傳回不正確。 undefined;  
myObject.prototype.valueOf = function(){return new Date();};  
alert(myObj);   //提示錯誤(IE8中不報錯並提示[Object]) 
/類別)
function myObject(objectName)
{
       this.objectName = objectName;
}
var myObj = new myObject("MyObj"); = 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(); (myObj);  //提示錯誤(IE8中不報錯並提示[Object])
 
類似的,將物件轉換成基本資料型別時也會作對應處理,但是會先呼叫valueOf() 函數而不是toString( )。
 
將物件轉換成基本資料型別時:
 
1.呼叫物件的valueOf() 方法,將物件轉換成傳回的基本資料型別;
 
2.如果物件沒有valueOf() 方法,或方法傳回的不是基本資料類型,那麼以相同方式呼叫toString()方法;
 
3.同樣,如果toString()方法不存在或傳回值不是基本資料類型,則提示錯誤;
 
 
 
Js 函數(類別)  
function myObject(objectName)  
{  
    this.objectName = objectName;  
}  
var myObjectName;  
}  
var myObjectName; Of()方法  
myObject.prototype .toString = function(){return 123;};  
myObject.prototype.valueOf = function(){return 321;};  
alert(myObj*2) 不正確類型,呼叫toString()方法  
myObject.prototype.toString = function(){return 123;};  
myObject.prototype.valueOf = function(){return new Date();};  );         //結果為246  
 
//toString()方法不存在,valueOf()方法回傳不正確類型  
myObject.prototype.toString = undefined; );};  
alert(myObj*2);         //提示 錯誤var myObj = new myObject( "MyObj");
 
//正常情況,首先呼叫valueOf()方法
myObject.prototype.toString = function(){return 123;};
myObject.prototype.valueOf = function(){return 321;};
alert(myObj*2);                    //結果為642
 
//valueOf()方法上傳回不正確類型,且調用 func()); type .valueOf = function(){return new Date();};
alert(myObj*2);                  prototype.toString = undefined;
myObject.prototype.valueOf = function(){return new Date();};
alert(myObj*2);      符時就要特別注意,因為「+」既能進行算數操作,也能進行字串拼接操作。
 
1.當「+」的兩個運算元有物件型別時,先將物件依照上面的規則轉換成基本資料型別;
 
2.轉換完的兩個運算元如果有一個是字串型的,則把另一個運算元轉換成字串;
 
3.否則,將兩個運算元都轉換成數值型別(或NaN),進行相加運算。
 
 
 
Js程式碼 
//自訂函數(類別)  
function myObject(objectName)  
{  
}  myObject("MyObj");  
 
//正常狀況,先呼叫valueOf()方法,回傳數字  
myObject.prototype.toString = function(){return 123;};  
myObject.prototype.valueOf = function(){return 321;} ); //結果為322(數值相加)  
alert(myObj + "1");         //結果為3211(字串拼接)  
 
//正常情況,並先呼叫valueOf)方法,先傳回prototype.toString = function(){return 123;};  
myObject.prototype.valueOf = function(){return "321";};  
alert(myObj + 1);   alert(myObj + "1");         //結果為3211(字串拼接)  
 
//valueOf()方法傳回不正確型別,呼叫toString()方法,並傳回字串號 
my 
. ){return "123";};  
myObject.prototype.valueOf = function(){return new Date();};  
alert(myObj + 1);   + "1");         //結果為1231(字串拼接)  
 
//toString()方法不存在,valueOf()方法回傳不正確類型  
myObject.prototype. = function(){return new Date();};  
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(myOb /正常情況,首先呼叫valueOf()方法,回傳字串
myObject.prototype.toString = function(){return 123;};
myObject.prototype.valueOf = function(){return "321";}; 3211(字串拼接)
alert(myObj + "1");               //結果為3211(字串拼接)
 
//valueOf()方法傳回不正確型別,呼叫toString()方法,回傳字串
myObject.prototype.toString = function(){return "123";};
myObject.prototype.valueOf = function(){return new Date();};
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