JS篇(012)-複雜數據類型如何轉變爲字符串

答案:git

  • 首先,會調用 valueOf 方法,若是方法的返回值是一個基本數據類型,就返回這個值,
  • 若是調用 valueOf 方法以後的返回值仍舊是一個複雜數據類型,就會調用該對象的 toString 方法,
  • 若是 toString 方法調用以後的返回值是一個基本數據類型,就返回這個值,
  • 若是 toString 方法調用以後的返回值是一個複雜數據類型,就報一個錯誤。

解析:github

1;
var obj = {
  valueOf: function() {
    return 1;
  }
};
console.log(obj + ""); //'1'
2;
var obj = {
  valueOf: function() {
    return [1, 2];
  }
};
console.log(obj + ""); //'[object Object]';
3;
var obj = {
  valueOf: function() {
    return [1, 2];
  },
  toString: function() {
    return 1;
  }
};
console.log(obj + ""); //'1';
4;
var obj = {
  valueOf: function() {
    return [1, 2];
  },
  toString: function() {
    return [1, 2, 3];
  }
};
console.log(obj + ""); // 報錯 Uncaught TypeError: Cannot convert object to primitive value

拓展:web

var arr = [new Object(), new Date(), new RegExp(), new String(), new Number(), new Boolean(), new Function(), new Array(), Math] console.log(arr.length) // 9
for (var i = 0; i < arr.length; i++) {
    arr[i].valueOf = function() {
        return [1, 2, 3]
    }
    arr[i].toString = function() {
        return 'toString'
    }
    console.log(arr[i] + '')
}

一、若 return [1,2,3]處爲 return "valueof",獲得的返回值是 valueof toString 7valueof
說明:其餘八種複雜數據類型是先調用 valueOf 方法,時間對象是先調用 toString 方法code

二、改爲 return [1,2,3],獲得的返回值是 9toString
說明:執行 valueof 後都來執行 toString對象

參與互動get

相關文章
相關標籤/搜索