我知道call和apply用于在javascript中显式地设置this。下面代码的用途是检查它是否为数组对象。它将控制台[object Array]。
var arr = [];
console.log(toString.call(arr));
谁能让我明白代码 toString.call(arr)
在做什么?
toString.call(arr)
调用toString
(无论那是什么),this
设置为数组。它的作用将完全取决于toString
是什么。
例如,如果它是Object.prototype.toString
,它可靠地产生这个字符串:[object Array]
。在es2015之前的环境中,这对于确定数组是数组还是其他东西很方便:
if (Object.prototype.toString.call(arr) === "[object Array]") {
// Yes, it's a true array
} else {
// No, it isn't
}
(ES2015新增Array.isArray
: if (Array.isArray(arr))
.)
您这样做而不是仅仅arr.toString()
的原因是数组覆盖toString
,而不是使用它们从Object
继承的一个(Array.prototype.toString
调用Array.prototype.join
,产生一个字符串,该字符串包含数组中被强制为字符串的连接在一起的条目)。