什么toString.call(数组)实际上呢?

时间:2016-09-20 07:49:06

标签: javascript

我知道call和apply用于在javascript中显式设置 this 。 使用以下代码是为了检查它是 array 对象。它将控制 [object Array]

var arr = [];
console.log(toString.call(arr));

有人能让我了解 toString.call(arr) 正在做什么代码吗?

1 个答案:

答案 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.isArrayif (Array.isArray(arr))。)

您执行此操作而不仅仅是arr.toString()的原因是数组覆盖toString而不是使用他们从Object继承的数据(Array.prototype.toString调用{{ 1}},生成一个字符串,其中包含强制转换为字符串的数组中连接在一起的条目。)