天天看點

對象到字元串、數字的轉換

1、對象到字元串的轉換:

如果對象有toString()方法,javascript調用它。如果傳回一個原始值(primitive value如:string number boolean),将這個值轉換為字元串作為結果

如果對象沒有toString()方法或者傳回值不是原始值,javascript尋找對象的valueOf()方法,如果存在就調用它,傳回結果是原始值則轉為字元串作為結果

否則,javascript不能從toString()或者valueOf()獲得一個原始值,此時throws a TypeError

2、對象到數字的轉換:

如果對象有valueOf()方法并且傳回元素值,javascript将傳回值轉換為數字作為結果

否則,如果對象有toString()并且傳回原始值,javascript将傳回結果轉換為數字作為結果

否則,throws a TypeError

TIPS:valueOf()函數小解

valueOf()函數傳回指定對象的原始值。

JavaScript的許多内置對象都重寫了該函數,以實作更适合自身的功能需要。是以,不同類型對象的valueOf()方法的傳回值和傳回值類型均可能不同。

// Array:傳回數組對象本身
var array = ["CodePlayer", true, , -];
document.writeln( array.valueOf() === array ); // true

// Date:目前時間距1970年1月1日午夜的毫秒數
var date = new Date(, , , , , , );
document.writeln( date.valueOf() ); // 1376838719230

// Number:傳回數字值
var num =  ;
document.writeln( num.valueOf() ); // 15.2654

// 布爾:傳回布爾值true或false
var bool = true;
document.writeln( bool.valueOf() === bool ); // true
// new一個Boolean對象
var newBool = new Boolean(true);
// valueOf()傳回的是true,兩者的值相等
document.writeln( newBool.valueOf() == newBool ); // true
// 但是不全等,兩者類型不相等,前者是boolean類型,後者是object類型
document.writeln( newBool.valueOf() === newBool ); // false

// Function:傳回函數本身
function foo(){ 
}
document.writeln( foo.valueOf() === foo ); // true
var foo2 =  new Function("x", "y", "return x + y;");
document.writeln( foo2.valueOf() === foo2 ); // true

// Object:傳回對象本身
var obj = {name: "張三", age: };
document.writeln( obj.valueOf() === obj ); // true

// String:傳回字元串值
var str = "http://www.365mini.com";
document.writeln( str.valueOf() === str ); // true
// new一個字元串對象
var str2 = new String("http://www.365mini.com");
// 兩者的值相等,但不全等,因為類型不同,前者為string類型,後者為object類型
document.writeln( str2.valueOf() === str2 ); // false
           
js