Соответствует возвращению строки вместо объекта - PullRequest
0 голосов
/ 22 марта 2010

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

1 Ответ

1 голос
/ 22 марта 2010

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

...