为什么我的名字是 ${name} 不起作用(名称返回为空
字符串)。
这是因为你必须从字符串值数组中取出My name is的值并返回
试试这个:
function say(something) {
var str0 = something[0]
return str0;
}
let name = `Reza`;
console.log(say`My name is${name}`, name, '!'); // My name is Reza !
我们会收到这样的东西:
我想指出${name} 根本没有任何意义,因为在tag function 内部,我们没有对它做任何事情。
这是在 Chrome 开发工具上运行代码后的结果:
让我们看看如何解释实际发生的情况。那么,你使用的是Tagged templates:
模板字面量的更高级形式是标记模板。标签允许您使用函数解析模板文字。标记函数的第一个参数包含一个字符串值数组。
这就是我们在结果中看到array 的原因:
例如,如果我们在 Chrome devtools 上运行此代码:
function say(something) {
return something;
}
console.log(say`anything`);
在控制台选项卡上,我们将收到以下结果:
更多信息,你可以在这里阅读:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#Tagged_templates
我们可以看到,奇怪的raw属性,根据MDN - Raw strings,它是:
标记模板的第一个函数参数上提供的特殊原始属性允许您在输入原始字符串时访问它们,而无需处理转义序列。
例如:
function tag(strings) {
console.log(strings.raw[0]);
}
tag`string text line 1 \n string text line 2`;
// logs "string text line 1 \n string text line 2" ,
// including the two characters '\' and 'n'
而你使用的是console.log()方法,根据MDN-Console.log()我们有它的签名:
语法:Console.log()
console.log(obj1 [, obj2, ..., objN]);
console.log(msg [, subst1, ..., substN]);
参数
obj1 ... objN
要输出的 JavaScript 对象列表。的字符串表示
这些对象中的每一个都按列出的顺序附加在一起,并且
输出。
msg
包含零个或多个替换字符串的 JavaScript 字符串。
subst1 ... substN
用于替换其中的替换字符串的 JavaScript 对象
味精。这使您可以更好地控制输出格式。
在您的情况下,您将多个参数传递给 Console.log() 方法,因此它将按照此处文档所述工作:Outputting multiple objects