2010-03-22 6 views
0

Это простое сопоставление регулярного выражения возвращает строку вместо объекта на любом браузере, но последней светлячок ...Match возвращает строку вместо объекта

 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)); 

, насколько я знаю, эта функция матча предположим вернуть объект (массив). Кто-нибудь сталкивался с этой проблемой?

ответ

1

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, чтобы доказать, что объект фактически является массивом, но этот оператор имеет known issues при работе в межкадровых средах.

В третьей строке я использую Object.prototype.toString метод, который возвращает строку, содержащую внутреннее свойство [[Class]], это свойство представляет собой значение, которое указывает рода объекта, гораздо более безопасным способом, чтобы обнаружить, если объект является массив или нет.

Смежные вопросы