我正在使用karma.js库。我正在浏览示例项目并遇到一些我不太了解的代码。我确信它很容易,但解释将有助于理解lib正在做什么。根据我的理解,它循环遍历__karma__
对象中的文件,并在if语句中使用/Spec\.js$/
进行某种正则表达式匹配。
for (var file in window.__karma__.files) {
if (/Spec\.js$/.test(file)) {
tests.push(file);
}
}
如果这是正则表达式匹配,您可以直接从字符串转到javascript中的对象。这真的很有趣。
感谢您的帮助。
答案 0 :(得分:4)
这是一个for-in
循环。它查看对象的可枚举属性。例如,如果你有:
var obj = {
a: 42,
b: 27
};
...然后在循环内,file
一次传递"a"
,另一传递"b"
(但未定义顺序)。
其中的var
只是声明一个变量。请注意,与其他一些语言不同,变量的不范围仅限于循环,声明在函数范围内。
正则表达式/Spec\.js$/
正在检查字符串是否以 "Spec.js"
结尾。在正则表达式中,$
匹配“行尾/输入”。 .
之前需要反斜杠,因为未转义的.
匹配任何字符。
有关for-in
的更多信息:
有关var
的更多信息:
答案 1 :(得分:0)
/Spec\.js$/
不是字符串,而是正则表达式文字。基本上做的是:
var re = new RegExp('Spec\.js$');
re.test(file)
有关详细信息,请参阅有关正则表达式的MDN文章:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
答案 2 :(得分:0)
您确实可以直接从文字值转到在JavaScript中访问其属性:
/^regex$/.test(...)
"a string".split(...)
等。一切正常。
但是有了数字,你需要特殊的待遇:
(1).toString()