我知道call和apply用于在javascript中显式设置 this 。 使用以下代码是为了检查它是 array 对象。它将控制 [object Array] 。
var arr = [];
console.log(toString.call(arr));
有人能让我了解 toString.call(arr)
正在做什么代码吗?
答案 0 :(得分:4)
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
调用{{ 1}},生成一个字符串,其中包含强制转换为字符串的数组中连接在一起的条目。)