2013-08-03 4 views
2

Я работаю с библиотекой karma.js прямо сейчас. Я проходил там примерный проект и наткнулся на какой-то код, который я действительно не понимаю. Я уверен, что это достаточно просто, но объяснение будет очень полезно для понимания того, что делает lib. Из того, что я могу понять, это цикл через файлы в объекте __karma__ и выполнение некоторого соответствия регулярных выражений в операторе if с помощью /Spec\.js$/.Некоторые синтаксисы javascript, которые я не понимаю

for (var file in window.__karma__.files) { 
    if (/Spec\.js$/.test(file)) { 
     tests.push(file); 
    } 
} 

Если это соответствие регулярных выражений, вы можете перейти от строки непосредственно для доступа к объекту в javascript. Это действительно интересно.

Спасибо за помощь.

ответ

4

Это for-in петля. Он просматривает перечислимые свойства объекта. Так, например, если у вас есть:

var obj = { 
    a: 42, 
    b: 27 
}; 

... затем в течение цикла, file будет "a" на один проход и "b" на другой (но порядок не определен).

var в этом объявлении переменной. Обратите внимание, что в отличие от некоторых других языков, переменная не ограничена в области только циклом, объявление является функциональным.

Регулярное выражение, /Spec\.js$/, проверяет, чтобы увидеть, если строка заканчивается"Spec.js". В регулярном выражении $ соответствует «концу строки/ввода». Обратная косая черта необходима до ., потому что unescaped . соответствует любому символу.

Подробнее о for-in:

Подробнее о var:

+0

Как насчет регулярных выражений части? – jhamm

+0

@jhamm: Ах, пропустил этот бит. Добавлен. –

0

Вы действительно можете перейти непосредственно из буквального значения в доступе к его свойства в JavaScript:

/^regex$/.test(...) 

"a string".split(...) 

и т. д. все работает.

С номерами, однако вам необходимо специальное лечение:

(1).toString() 
Смежные вопросы