Web | JavaScript的引用數據類型強制轉換類型

我在這裏主要的想提下的是JavaScript中的引用類型進行強制轉換類型.因爲對於基本數據類型的變換大多都是雷同的,很容易熟知,但是引用數據類型有一點小插曲.

JavaScript的引用類型主要爲對象,數組和函數.主要針對的是對對象和數組進行轉換.而轉換又包括兩種方式,即顯式和隱式轉換.

顯式強制類型轉換

首先我們需要一些基本的規則.

基本類型的字符串化規則:

  • null ==> ‘null’
  • true ==>‘true’ ,false ==> ‘false’
  • undefined ==> ‘undefined’
  • 數字也是自身字符串化,1 ==> ‘1’

基本類型的數字化規則:

  • null ==> 0
  • undefined ==> NaN
  • true ==> 1, false ==> 0
  • 字符串會拆開引號,看它是否是數字,是則輸出數字,否則輸出NaN.如果是空字符串,則會轉成0.

不同類型對象的valueof規則:

對象 ==>對象本身

Boolean ==> 布爾值

Number ==> 數字值

String ==> 字符串值

Array ==> 返回數組對象本身

Date ==> 距離1970的毫秒數

Function ==> 函數本身

Math和Error沒有valueof方法

通過構造String()化

首先,會調用引用數據類型的tostring()方法,會看該方法是否會返回基本數據類型,如果是就使用.如果不是就會調用valueof方法,返回基本數據類型就使用,如果不是則會報錯.

		//通過複寫其系統方法來觀察
		// obj,對象
		Object.prototype.toString=function () {
            return  [];
        }
        Object.prototype.valueOf=function () {
            return  456;
        }
       var obj = {
           name:"Jan",
           age:18
       }
        // obj.toString()  ---> obj.valueOf()
       var res = String(obj);
       console.log(typeof res,res);//string '456'

		// 數組
		 Array.prototype.toString=function () {

        }
        Array.prototype.valueOf=function () {
            return  123;
        }
       var arr =[1,2,3,4];
       var res = String(arr);
       console.log(typeof res,res);//string undefined

通過構造Number()化

首先,會調用引用數據類型的valueof()方法,會看該方法是否會返回基本數據類型,如果是就使用.如果不是就會調用tostring()方法,返回基本數據類型就使用,如果不是則會報錯.

	//對數組和對象進行number化
	var arr = [1,2,3];
    var res = Number(arr); //tostring==>1,2,3
    console.log(typeof res,res);//number NaN

    Object.prototype.valueOf=function(){
        return "    12345     ";
    }
    var obj ={};
    var res = Number(obj);
    console.log(typeof res,res);//number 12345

    var res = +obj;
    console.log(typeof res,res);//number 12345

只有Number()和’+'正號才能激發顯式number化.

另外提下toPrimitive,它是引用數據類型轉基本數據類型.都是先回調用valueof方法,然後才調用tostring方法.

隱式強制類型轉換

隱式轉換一般是’+'符號觸發,還有邏輯判斷觸發

    //如果某個操作數是字符串  + 將進行拼接操作
    //遇到對象 則ToPrimitive()

    Array.prototype.valueOf=function(){
        return "1";
    }
    Array.prototype.toString=function(){
        return false;
    }
    console.log([] + 1); //'11'
(1)  if (..) 語句中的條件判斷表達式。
(2)  for ( .. ; .. ; .. ) 語句中的條件判斷表達式(第二個)。
(3)  while (..) 和 do..while(..) 循環中的條件判斷表達式。
(4)  ? : 中的條件判斷表達式。
(5)  邏輯運算符 || (邏輯或)和 && (邏輯與)左邊的操作數(作爲條件判斷表達式)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章