Сопоставление, возвращающее строку вместо объекта

StackOverflow https://stackoverflow.com/questions/2490470

Вопрос

Это простое сопоставление регулярных выражений возвращает строку вместо объекта во всех браузерах, кроме последней версии 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]] внутреннее свойство, это свойство представляет собой значение, которое указывает на добрый объекта, гораздо более безопасный способ определить, является ли объект массивом или нет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top