JavaScript では、toString() メソッドと alueOf() メソッドを使用して、オブジェクトを基本的なデータ型または文字列に変換します。
オブジェクトを文字列に変換する場合:
1. オブジェクトの toString() メソッドを呼び出して、オブジェクトを返された文字列に変換します。メソッドが他の基本データ型を返す場合は、自動的に に変換されます。 string;
2. オブジェクトに toString() メソッドがない場合、またはメソッドの戻り値が基本データ型ではない場合は、同様に valueOf() メソッドを呼び出します。 () メソッドが存在しないか、戻り値が基本データ型ではない場合、エラーが表示されます (IE はエラーを報告しない場合があります); {
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;}; //結果は 321 です
// toString() メソッドが存在しません。valueOf() メソッドが間違った型を返します
myObject.prototype.toString = unknown;
myObject.prototype.valueOf = function(){return new Date();}; ); // プロンプトエラー (IE8 およびプロンプト [Object] ではエラーは報告されません)
//カスタム関数 ( Class)
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 = unknown;
myObject.prototype.valueOf = function(){return new Date();};
alert (myObj) //プロンプトエラー (IE8 ではエラーは報告されず、[Object] が表示されます) )
同様に、オブジェクトを基本データ型に変換する際にも対応する処理が行われますが、toString()ではなくvalueOf()関数が最初に呼び出されます。
オブジェクトを基本データ型に変換する場合:
1. オブジェクトの valueOf() メソッドを呼び出して、オブジェクトを返された基本データ型に変換します。メソッドが存在しない場合、またはメソッドが Basic データ型以外を返す場合は、同じ方法で toString() メソッドを呼び出します。
3. 同様に、toString() メソッドが存在しない場合、または戻り値が Basic データ型でない場合。とすると、エラーが表示されます。
//通常は、最初に valueOf() メソッドを呼び出します
myObject.prototype .toString = function(){return 123;};
myObject.prototype.valueOf = function(){return 321;}; 2); //結果は 642 です
//valueOf() メソッドが間違った型を返します。toString() メソッドを呼び出します
myObject.prototype.toString = function(){return 123;}; function(){return new Date();};
alert(myObj*2 ; );};
//通常は、最初に 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); .toString = 未定義;
。 myObject.prototype.valueOf = function(){return new Date(); 「+」は算術演算と文字列連結の両方を実行できるため、これには特に注意してください。
1. "+" の 2 つのオペランドがオブジェクト型である場合、まず、上記の規則に従ってオブジェクトを基本データ型に変換します。
2. 変換された 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;}; ; //結果は 322 (値を加算)
alert(myObj + "1");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 = unknown;
myObject.prototype.valueOf = function(){return new Date();}; エラーはありませんが報告され、未定義のプロンプトが表示されます)
//カスタム関数 (クラス)
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") 、文字列を返します
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";}; ){return new Date();};
alert(myObj + 1); //結果は 1231 (文字列連結)
alert(myObj + "1") () メソッドが存在しないため、valueOf() メソッドが返されます。不正な type
myObject.prototype.toString = unknown;
myObject.prototype.valueOf = function(){return new Date();};
alert(myObj + 1); //エラーを表示します (IE8 はエラーを報告しません) 、およびプロンプトが表示されます unknown)
alert(myObj + "1");