объект Функция и объект Array - Object.prototype.toString.call

Может ли кто-нибудь объяснить эту функцию b ( a ) { return "[object Function]" == Object . прототип . toString . call ( a ) } s?

function c(a) {
    return "[object Array]" == Object.prototype.toString.call(a)
}

А также

toString

javascript,

2

Ответов: 2


2 принят

Вы занимаете метод Object.prototypeот Functionвыяснить , если значение , которое вы передаете в любой из функций является экземпляром Functionконструктора или Arrayконструктор.

Использование toStringнепосредственно из прототипа объекта переопределит toStringна Array.prototype и Function.prototype, которые имеют разные типы поведения.

function b(a) {
    return "[object Function]" == Object.prototype.toString.call(a)
}

console.log(
  Object.prototype.toString.call(b),
  b(b)
)


1

Когда вы вызываете toStringфункцию, она возвращается [object Function].
Когда вы вызываете toStringмассив, он возвращается [object Array].

Первая функция проверяет, является ли все, что передается, функция

function b(a) {
    return "[object Function]" == Object.prototype.toString.call(a)
}

var x = b('s'); // false
var y = b(function() {}); // true

console.log(x, y)

Вторая проверяет, не передается ли какой-либо массив массивом

function c(a) {
    return "[object Array]" == Object.prototype.toString.call(a)
}

var x = c('s'); // false
var y = c([1,2,3]); // true

console.log(x, y)

Потому что Object.prototype.toStringвсегда используются, даже строки и числа могут быть проверены таким образом , как это не просто называть собственные значения toStringметоды

JavaScript,
Похожие вопросы