嘿伙计们我是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
答案 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)
,它应该正常工作。