在啃vue源码过程中看到:
1const _toString = Object.prototype.toString 2 3/** 4 * Convert a value to a string that is actually rendered. 5 * 将值转换为实际呈现的字符串 6 */ 7export function toString (val: any): string { 8 return val == null 9 ? '' 10 : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString) 11 ? JSON.stringify(val, null, 2) 12 : String(val) 13}
我们捋一下。 val是空值直接返回空字符串'',否则进行判断 val是数组或者val是对象obj(isPlainObject用来判断是否是对象),并且一个条件(待定)。满足则返回带2个空白缩进的json字符串,否则直接转换为string
这个条件写法是val.toString === Object.prototype.toString,这里用的全等,因此可以先猜想是为了判断val是Object。我的印象里val.toString不是一直等于Object.prototype.toString吗
1''.toString === Object.prototype.toString // false 2 3[].toString === Object.prototype.toString // false 4 5new Object().toString === Object.prototype.toString // true 6 7let functionC = function(){ 8 return '' 9} 10functionC.toString === Object.prototype.toString //false

我们可以看到不同类型的.toString都是不同的类型,但他们都是返回 ƒ toString() { [native code] }
因此我做了尝试

再去mdn搜索下
也就是说不同类型的原型都创建了toString方法
因此我们可以验证我们的猜想,val.toString === Object.prototype.toString为了判断val是Object
