Сопоставление, возвращающее строку вместо объекта
-
21-09-2019 - |
Вопрос
Это простое сопоставление регулярных выражений возвращает строку вместо объекта во всех браузерах, кроме последней версии Firefox...
text = "language. Filename: My Old School Yard.avi. File description: File size: 701.54 MB. View on Megavideo. Enter this, here:"
name = text.match(/(Filename:)(.*) File /);
alert(typeof(name));
насколько я это знаю, предполагается, что функция match возвращает объект (массив).Кто-нибудь сталкивался с этой проблемой?
Решение
Регулярное выражение match
метод действительно возвращает массив, но массивы в JavaScript - это просто объекты, которые наследуются от Array.prototype
, например:
var array = "foo".match(/foo/); // or [];, or new Array();
typeof array; // "object"
array instanceof Array; // true
Object.prototype.toString.call(array); // "[object Array]"
В typeof
оператор вернет "object"
потому что он не может отличить обычный объект от массива.
Во второй строке я использую instanceof
оператор, чтобы доказать, что объект на самом деле является массивом, но этот оператор имеет известные проблемы при работе в условиях перекрестного кадрирования.
В третьей строке я использую Object.prototype.toString
метод, который возвращает строку, содержащую [[Class]]
внутреннее свойство, это свойство представляет собой значение, которое указывает на добрый объекта, гораздо более безопасный способ определить, является ли объект массивом или нет.