Не могу понять, зачем в данной функции использовать Object.prototype для того, чтобы проверить input и определить String ли это?
В чем разница использования Object.prototype.toString.call(input) и использования toString.call(input)?
var isString = function (input) {
// Почему здесь используют Object.prototype,
// когда можно просто использовать метод toString.call(input) ?
if (Object.prototype.toString.call(input) === '[object String]') {
return true;
} else {
return false;
}
}
console.log(isString('w3resource'));
console.log(isString([0, 1, 2, 4]));
console.log(isString({name: "Nureke", age: 24}));
Обычно, потомки переопределяют toString от объекта.
Это, в сущности, разные методы.
Например, Array.prototype.toString собирает элементы массива через запятую.
А Object.prototype.toString с помощью внутренних колдунств, определяет тип и выводит его в определённом формате.
Т. е. если нужно определить тип - берём метод прототипа объекта и, обязательно, устанавливаем this, без него объект не будет ожидаемо работать.
toString.call(input) === Object.prototype.toString, так что вызовы обычно эквивалентны (спасибо @Grundy за правку).
Однако, если кто-то сделает var toString = 42; в глобальной области, но будет плохо.
P. S. Зачем if? Сравнение уже возвращает булево значение.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости