多行字符串文字和测试

时间:2011-09-27 16:33:02

标签: javascript

var multiply = function (a, b) {
  //An internal comment
  return a * b;
};
var stupid = "function (a, b) {
  return a * b;
  }"
expect(multiply.toString()).toBe(stupid);

测试通过,但是firefox给了我这个:

unterminated string literal
[Break On This Error] var stupid = "function (a, b) { 

更改代码以使用\行终止符会阻止测试通过。

Expected 'function (a, b) { 
    return a * b; 
}' to be 'function (a, b) {return a * b;}'.

如果您转义多行字符串文字,则测试失败。

使用换行符,测试仍未通过:

var stupid = "function (a, b) {\n
    return a * b;\n
}"
expect(multiply.toString()).toBe(stupid);

3 个答案:

答案 0 :(得分:2)

没有反斜杠,这是一个语法错误。有关in this HTML transcription的字符串文字the spec的更多信息。

有了它们,请记住后续行中的所有前导空格都包含在字符串中。

另外:您的expect电话不可靠。首先,Function#toString从未在任何地方标准化(当然不是ECMAScript标准)。其次,它在不同引擎上的工作方式不同(有些会包含注释,有些则不包含;有些会重新格式化代码[例如,function之后可能没有空格],其他则不会;等等。 )。

答案 1 :(得分:1)

你的考试没有通过;它给出了语法错误。
Javascript不支持(未转义)多行字符串文字。

对于\转义,它没有通过,因为你的字符串没有换行符。

Javsacript来源

"1\
2"

评估为"12"。转义的换行符被忽略;它们不会成为换行符。
您需要添加\n个字符。

答案 2 :(得分:1)

你必须使用

var stupid = "function (a, b) {" +
  + "return a * b;" +
  + "}";

因为javascript不支持多行字符串文字,因为SLaks指出