2

我现在正在使用 karma.js 库。我正在浏览那里的示例项目,遇到了一些我不太了解的代码。我相信这很容易,但解释将非常有助于理解 lib 正在做什么。据我所知,它是遍历__karma__对象中的文件,并在 if 语句中使用/Spec\.js$/.

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

如果那是正则表达式匹配,您可以直接从字符串中访问 javascript 中的对象。这真的很有趣。

谢谢您的帮助。

4

3 回答 3

4

那是一个for-in循环。它查看对象的可枚举属性。例如,如果您有:

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

...然后在循环中,file"a"在一次传递和"b"另一次传递(但未定义顺序)。

其中var只是声明一个变量。请注意,与其他一些语言不同,变量的范围不仅限于循环,声明是函数范围的。

正则表达式 ,/Spec\.js$/正在检查字符串是否以 .结尾 "Spec.js"。在正则表达式中,$匹配“行尾/输入”。之前需要一个反斜杠,.因为未转义的.字符匹配任何字符。

更多关于for-in

更多关于var

于 2013-08-03T10:33:27.900 回答
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

于 2013-08-03T10:35:07.097 回答
0

您确实可以直接从文字值进入 JavaScript 中访问其属性:

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

"a string".split(...)

等一切正常。

但是,对于数字,您需要特殊处理:

(1).toString()
于 2013-08-03T10:37:02.823 回答