2017-08-15 80 views
3

好:在JavaScript中,哪些类型支持toString()?

'hello'.toString() // "hello" 
let obj = {} 
obj.toString()  // "[object Object]" 

坏:

undefined.toString() // throws TypeError 
null.toString()  // throws TypeError 

是否还有其他类型,将扔在.toString()方法?

+4

'toString'是在'Object'定义,所以比undefined和null,这当然不支持任何方法在所有其它任何类型。 – 2017-08-15 05:13:53

+1

值得注意的是,这也适用于数字文字,但由于时间段作为小数分隔符和成员访问运算符服务双重任务,因此您必须注意语法。 '1.toString()'产生一个语法错误,但'1..toString()'产生'“1”'。 –

+0

[并非所有人都这样做](https://stackoverflow.com/q/18640776/1048572)。 – Bergi

回答

2

每个从Object继承的obj都必须使用string方法。

从javascript开始 从JavaScript 1.8.5开始toString()调用null返回[object Null],undefined返回[objectUndefined]。

您可以通过以下链接阅读更多关于它: You can read more about it at this link

1

在原型链中没有此方法的对象上调用toString()将导致错误。例如:

let a = Object.create(null); 
a.toString() //TypeError 
+0

由于a不是Object的实例而引发错误。 –

+0

'let a = Object.create(null); a.toString = function(){return'test'}; a.toString()//测试' –

4

toString()

docs每个对象具有被自动调用当对象被表示为文本值或当对象被称为一个toString()方法以期望字符串的方式。默认情况下,toString()方法由继承,每个对象来自Object

如果变量类型不是对象,它将抛出。

所以你最好的选择是你打电话之前可以检查test instanceof Object

而且值得一提的是,你的代码与1.8.5版本

var toString = Object.prototype.toString; 
toString.call(undefined) // gives [object Undefined] 
toString.call(null)  // gives [object Null] 

注:在JavaScript启动1.8.5的toString()呼吁空返回[对象空],和不确定的回报[对象未定义],如ECMAScript第5版中定义的和随后的勘误表。请参阅使用_toString()_ to_detect_object_class。

+0

不仅Object的后代对象有'toString'方法。您可以手动将此方法添加到任何对象 –

+0

它关于从Object派生的toString(),并且您可以在任何对象上创建自己的方法。 –

+1

像'undefined'和'null'这样的调用方法只会抛出异常,而不会产生字符串。不,JS1.8.5没有改变。 – Bergi

1

toString在Object上定义,因此除undefined和null以外的任何其他类型都将继承toString