Как получить все элементы со строковыми значениями из массива?
У нас есть массив со смешанными типами данных:
var massiv = [ {'ff':'ff'}, 123, [], "stroka1", [456], "stroka3", {'dd':'rr'}, "stroka2", 567, "stroka5", 183, "stroka6", true, false, "stroka4"]
Нам нужно вытащить из этого массива только строковые элементы. Как это сделать?
Воспользуемся методом filter() и в качестве условия будем использовать свойство конструктора, в котором был создан каждый элемент массива. Если элемент был создан конструктором класса String, то мы закидываем его в новый массив. Если нет, то проходим мимо.
Условие такое:
i.constructor.name == "String"
Любой элемент массива будет принадлежать какому-то классу. По другому быть не может. Любой класс имеет свой собственный конструктор, поэтому у любого элемента массива можно получить название класса.
massiv.filter(i => i.constructor.name == "String")

После такой фильтрации мы получим только строковые значения в новом массиве. Любые числа, массивы, объекты, булевы и т.п. будут отброшены.
Мы выполнили задачу и отобрали все строки в массиве!
Информационные ссылки
Стандарт ECMAScript — Раздел «22.1 String Objects» — https://tc39.es/ecma262/#sec-string-objects
Стандарт ECMAScript — Раздел «23.1.3.7 Array.prototype.filter ( callbackfn [ , thisArg ] )» — https://tc39.es/ecma262/#sec-array.prototype.filter