从javascript中的函数属性返回连接的字符串

时间:2016-06-24 09:02:47

标签: javascript string function

嘿伙计们我是Js新手。这是JsBin link formLetter测试应该通过。任何帮助将不胜感激。

TL; DR:

此:

var formLetter = function(recipient, msg, sender) {
  return "Hello " + recipient + ",\n" + "\n" + msg + "\n" + "\nSincerely," + "\n" + sender
  };
 console.log(formLetter("Hermione", "Luna","How are you?"));

应该返回:

"Hello Hermione,

 How are you?

 Sincerely,
 Luna"

但我得到了这个:

"Hello [object Object],

 undefined

 Sincerely,
 undefined"

编辑:很抱歉这个混乱。我正在研究一个JsBin中的不同问题。这是正确的JsBin与隔离 code

3 个答案:

答案 0 :(得分:1)

这是因为您只将一个对象传递给函数调用。此对象包含您所需的信息,而不是您提供的命名区域。

第一个参数recipient[object Object]告诉您它是一个对象。 undefined表示没有任何内容通过。这表示传递给函数调用的config或param对象的常见模式。因此,你所拥有的命名参数应该是作为第一个参数提供的对象的属性查找。

您的功能定义应该更像:

    var formLetter = function (letter) {
        // do something with letter
    };

在该函数调用的内部,您可以点击字母对象的属性以查看它们是否包含您需要的内容。在开发工具中执行console.log调试将有助于对其进行跟踪。

希望有所帮助。如果这还不足以让你走上正轨,请告诉我。很乐意提供帮助。

答案 1 :(得分:0)

该行:

var formLetter = function(recipient, msg, sender) {
  return "Hello " + recipient + ",\n" + "\n" + msg + "\n" + "\nSincerely," + "\n" + sender
};
在您的示例中,

在“sender”之后需要一个分号,如:

var formLetter = function(recipient, msg, sender) {
  return "Hello " + recipient + ",\n" + "\n" + msg + "\n" + "\nSincerely," + "\n" + sender;
};

您的未定义与使用anidated console.log

有关

你这样做:

console.log(longMessage.formLetter("Hermione", "Luna","How are you?"));

和(在JsBin中)你还有:

var longMessage = {
  formLetter: function(recipient, sender, msg) {
    console.log("Hello " + recipient + ",\n" + "\n" + msg + "\n" + "\nSincerely," + "\n" + sender);
  }
};

在您的问题示例中,您已将其更正。

请仔细检查您发布的代码。

答案 2 :(得分:0)

在jsbin中查看您的测试后,我注意到您在assert.deepEqual()方法中运行formLetter(letter)并将其与您创建的连接字符串进行比较。 问题是formLetter()需要三个字符串值,然后向它发送一个对象(字母)。这就是为什么你在第一个位置获得[Object object]而在其他位置未定义的原因。

您应该在断言中运行formLetter(letter.recipient, letter.msg, letter.sender),它应该正常工作。