toString.call(array)的实际作用



我知道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,产生一个字符串,该字符串包含数组中被强制为字符串的连接在一起的条目)。

最新更新