好处:
'hello'.toString() // "hello"
let obj = {}
obj.toString() // "[object Object]"
坏事:
undefined.toString() // throws TypeError
null.toString() // throws TypeError
还有其他类型会引发.toString()
方法吗?
答案 0 :(得分:4)
来自toString()
的{{3}}
每个对象都有一个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()调用null返回[object Null],undefined返回[object Undefined],如第5版ECMAScript和随后的勘误表中所定义。请参阅Using_toString()_ to_detect_object_class。
答案 1 :(得分:3)
从Object继承的每个obj都必须使用string方法。
从javascript开始 从JavaScript 1.8.5开始toString()调用null返回[object Null],undefined返回[objectUndefined]。
您可以在此链接上阅读更多相关信息: You can read more about it at this link
答案 2 :(得分:1)
在原型链中没有此方法的对象上调用toString()
将导致错误。例如:
let a = Object.create(null);
a.toString() //TypeError
答案 3 :(得分:1)
toString
是在Object上定义的,因此除undefined和null之外的任何类型都将继承toString
。