javascript對象類型轉換

Object類型

除基本數據類型以外的全部類型都爲Object類型。

toString方法

toString方法通常返回一個反映這個對象的字符串
//通常對象
  var obj = {name:'jack',age:18};
  console.log(typeof obj.toString(),obj.toString());
  //數組
  var arr = ['zero','one','two'];
  console.log(typeof arr.toString(),arr.toString());
  //函數
  var fun = function(a,b){ return a+b; };
  console.log(typeof fun.toString(),fun.toString());
  //正則表達式
  var reg = /\s+/;
  console.log(typeof reg.toString(),reg.toString());
  //日期
  var d = new Date();
  console.log(typeof d.toString(),d.toString());

測試結果
輸入圖片說明正則表達式

valueOf方法

通常默認返回對象自己,Date類重寫了valueOf方法,其返回1970年1月1日以來的毫秒數
var obj = {name:'jack',age:18};
  console.log(typeof obj.valueOf(),obj.valueOf());
  //數組
  var arr = ['zero','one','two'];
  console.log(typeof arr.valueOf(),arr.valueOf());
  //函數
  var fun = function(a,b){ return a+b; };
  console.log(typeof fun.valueOf(),fun.valueOf());
  //正則表達式
  var reg = /\s+/;
  console.log(typeof reg.valueOf(),reg.valueOf());
  //日期
  var d = new Date();
  console.log(typeof d.valueOf(),d.valueOf());

測試結果
輸入圖片說明數組

轉換爲字符串

這裏的轉換指的是顯示類型轉換,轉換步驟爲:函數

  1. 對象轉換爲字符串時會優先調用toString方法,若是toString方法返回一個原始值,則將該值轉換爲字符串
  2. 若是toString方法不返會原始值,則調用valueOf方法,若是valueOf方法返回原始值,則將該值轉換爲字符串
  3. 若是valueOf方法也不返回原始值,則拋出類型錯誤異常 轉換步驟測試:
//test1的toString方法返回字符串'toString',valueOf方法返回字符串'valueof'
  var test1 = {
    toString:function() {
      console.log('調用了toString方法');
      return 'tostring';
    },
      valueOf:function() {
        console.log('調用了valueOf方法');
        return 'valueof';
      }
  };
  console.log(String(test1));

測試結果
輸入圖片說明
能夠看到這裏優先調用了toString方法,返回了'tostring'測試

//test2的toString方法返回對象{},valueOf方法返回字符串'valueof'
  var test2 = {
    toString:function() {
      console.log('調用了toString方法');
      return {};
    },
    valueOf:function() {
      console.log('調用了valueOf方法');
      return 'valueof';
    }
  };
  console.log(String(test2));

測試結果:
輸入圖片說明
能夠看到這裏先調用了toString方法,因爲toString方法返回對象,接着又調用了valueOf方法,返回了'valueof' 。code

//test3的toString方法和valueOf方法均返回對象
  var test3 = {
    toString:function() {
      console.log('調用了toString方法');
      return {};
    },
    valueOf:function() {
      console.log('調用了valueOf方法');
      return {};
    }
  };
  console.log(String(test3));

測試結果:
輸入圖片說明
這裏有與toString方法和valueOf方法均不返回原始值,因而拋出類型錯誤異常對象

轉換爲數字

這裏的轉換一樣指的是顯示類型轉換,轉換步驟爲:圖片

  1. 對象轉換爲數字時會優先調用valueOf方法,若是valueOf方法返回一個原始值,則將該值轉換爲數字
  2. 若是valueOf方法不返會原始值,則調用toString方法,若是toString方法返回原始值,則將該值轉換爲數字
  3. 若是toString方法不返回原始值,則拋出類型錯誤異常。

轉換步驟測試:字符串

//這裏test1的valueOf方法返回'123',toString方法返回'456'
  var test1 = {
    toString:function() {
      console.log('調用了toString方法');
      return '456';
    },
    valueOf:function() {
      console.log('調用了valueof方法');
      return '123';
    }
  };
  console.log(Number(test1));

測試結果:
輸入圖片說明
能夠看到test1先調用的valueOf方法,返回'123',並將'123',轉換爲了數字123string

//這裏test2的valueOf方法返回對象{},toString方法返回'456'
  var test2 = {
    toString:function() {
      console.log('調用了toString方法');
      return '456';
    },
    valueOf:function() {
      console.log('調用了valueOf方法');
      return {};
    }
  };
  console.log(Number(test2));

測試結果:
輸入圖片說明
能夠看到test2先調用的valueOf方法,因爲其返回的是一個對象,緊接着又調用了toString方法,返回'456',並將'456',轉換爲了數字456it

//這裏test3的valueOf方法返回對象{}和toString方法返回對象{}
  var test3 = {
    toString:function() {
      console.log('調用了toString方法');
      return {};
    },
    valueOf:function() {
      console.log('調用了valueOf方法');
      return {};
    }
  };
  console.log(Number(test3));

測試結果:
輸入圖片說明
能夠看到test3先調用的valueOf方法和toString方法均返回對象,拋出類型錯誤異常

轉換爲布爾值

Boolean(obj) => true

幾個特殊的轉換

- Number([])  => 0  
  這裏[]先調用其valueOf方法,因爲返回對象[],而後調用toString方法,返回'',再將''轉換爲數字0。
- Number([9])  => 9
  這裏[9]先調用其valueOf方法,因爲返回對象[9],而後調用toString方法,返回'9',再將'9'轉換爲數字0。
- Number(['a']) => NaN
  這裏['a']先調用其valueOf方法,因爲返回對象['a'],而後調用toString方法,返回'a',再將'a'轉換爲數字NaN。
相關文章
相關標籤/搜索