какова роль «массива объектов» здесь?

#javascript

Вопрос:

Какова роль «массива объектов» здесь:

 var  is_array = function(input){
    if(toString.call(input)==="[object array]")//what is role of "object array" here?
       return true   
    return false
}
console.log(is_array('welcome'))
console.log(is_array([1,2,3,4,5])) 

Комментарии:

1. Что это может быть, основываясь на остальной части кода? Что произойдет, если вы запустите «toString.call» с различными типами данных? Посмотрим, сможешь ли ты справиться с этим. Это просто строка: то, что она означает , можно обнаружить в консоли через несколько минут.

Ответ №1:

Код предназначен для определения того, является ли аргумент массивом. Исторически сложилось так, что существует несколько способов сделать это, хотя в наши дни эта Array.isArray функция действительно делает все эти трюки устаревшими.

Прежде всего, он действительно должен проверить наличие «[массива объектов]» (с большой буквы «А»). Я полагаю, это была опечатка в вашем вопросе?

В любом случае, здесь хитрость заключается в использовании глобальной функции toString , которая является toString методом глобального объекта ( globalThis.toString ). Вы можете подумать , что могли бы просто позвонить input.toString() , но эта функция была переопределена прототипом массива и не возвращает тот же результат. Он вернет элементы массива в виде строки, разделенной запятыми. Однако глобальная toString функция, по сути, будет делать то, что Object.toString делает: предоставлять универсальную строку в формате «[тип объекта]».

С помощью call этого мы можем предоставить объект, который должен быть строковым. И таким образом мы получаем «[массив объектов]», что является хорошим признаком того, что у нас есть массив.

Опять же, в настоящее время предпочтительным методом является просто вызов Array.isArray(input) .

Комментарии:

1. Это ответ на ваш вопрос? Не могли бы вы дать обратную связь?