toString方法 - Azurehuihui/LearnJS GitHub Wiki

toString方法是Object原型上的方法,所以对象都可以使用,但Object中的toString方法与其他类型的toString方法略有不同

先看下面这个例子

var a = {};
var b = {'name':'wahaha'};
var c = {};
c[a] = 'one';
c[b] = 'two';

console.log(c[a]);	//two
console.log(c);  //{[Object,Object]:'two'}

之所以会出现上述的现象是因为,当我们将一个对象作为另一个对象的key值时, 默认会自动转换key值所对应的对象,即自动会执行 toString方法

a.toString();   //[Object,Object]
b.toString();   //[Object,Object]

c[a]会打印出two,是因为所以对象作为key值,他真正的key值都是 [Object,Object], 所以c[b]就复写了c[a]的值。

Object.toString() :  返回 “[Object type]”,type 是对象的类型。
Object.prototype.toString.call('');                            //[object String]
Object.prototype.toString.call(1);                             //[object Number]
Object.prototype.toString.call(true);                          //[object Boolean]
Object.prototype.toString.call([]);                            //[object Array]
Object.prototype.toString.call({});                            //[object Object]
Object.prototype.toString.call(undefined);                     //[object Undefined]
Object.prototype.toString.call(null);                          //[object Null]
Object.prototype.toString.call(new Function());                //[object Function]
Object.prototype.toString.call(new Date());                    //[object Date]
Object.prototype.toString.call(new RegExp());                  //[object RegExp]
Object.prototype.toString.call(new Error());                   //[object Error]
Object.prototype.toString.call(document);                      //[object HTMLDocument]
Object.prototype.toString.call(window);                        //[object Window]

注意: 对于Number、String,Boolean,Array,RegExp、Date、Function原型上的toString方法,重写了Object.toString()方法。 这些对象上的toString()方法都是把当前的数据类型转换为字符串的类型;

// 注意,数字类型,不能直接用字面量去 .toString()  
1.toString()  // Uncaught SyntaxError: Invalid or unexpected token  
(1).toString() // "1"  js 解析器把 . 解析了 1.toString() 相当于 (1.)toString()报错了
a = 1 
a.toString() // "1"  

"2".toString() // "2"

true.toString() // "true"

[1,2,3].toString() // "1,2,3"

f = function (){}
f.toString() // "function (){}"

h = new Date()
h.toString()  // "Fri May 07 2021 09:05:43 GMT+0800 (GMT+08:00)"