一些我不理解的javascript语法

时间:2013-08-03 10:30:59

标签: javascript karma-runner

我正在使用karma.js库。我正在浏览示例项目并遇到一些我不太了解的代码。我确信它很容易,但解释将有助于理解lib正在做什么。根据我的理解,它循环遍历__karma__对象中的文件,并在if语句中使用/Spec\.js$/进行某种正则表达式匹配。

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

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

感谢您的帮助。

3 个答案:

答案 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()