只是想了解它是如何工作的:
function say(something) {
return something;
}
let name = `Reza`;
console.log(say `My name is`, name, '!');Run Code Online (Sandbox Code Playgroud)
它返回一个非常奇怪的输出.我认为这My name is是一个数组中的字符串,其他一切只是一个字符串(如果我错了,请纠正我).
我的问题是,有什么意义,何时使用这样的函数是有意义的?
如果有人能告诉我为什么My name is ${name}不工作(name返回为空字符串),我也会很高兴.
PS:我知道可以使用带括号的函数,它可以工作,但这不是我的问题.
为什么我的名字是$ {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 !Run Code Online (Sandbox Code Playgroud)
我们会收到这样的东西:
我想指出这${name}并不意味着什么,因为在内部tag function,我们没有做任何事情.
这是在Chrome devtools上运行代码后的结果:
让我们看看我们如何解释实际发生的事情.那么,你正在使用的是Tagged templates:
更高级的模板文字形式是标记模板.标签允许您使用函数解析模板文字.标记函数的第一个参数包含一个字符串值数组.
这就是我们array在结果中看到的原因:
例如,如果我们在Chrome devtools上运行此代码:
function say(something) {
return something;
}
console.log(say`anything`);
Run Code Online (Sandbox Code Playgroud)
在控制台选项卡上,我们将收到以下结果:
有关更多信息,请在此处阅读:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#Tagged_templates
正如我们所看到的,奇怪的raw属性,根据MDN - Raw字符串,它是:
特殊原始属性(在标记模板的第一个函数参数上可用)允许您在输入时访问原始字符串,而无需处理转义序列.
例如:
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'
Run Code Online (Sandbox Code Playgroud)
你正在使用console.log()方法,根据MDN-Console.log()我们有它的签名:
语法:Console.log()
console.log(obj1 [,obj2,...,objN]);
console.log(msg [,subst1,...,substN]);
参数
obj1 ... objN
要输出的JavaScript对象列表.每个对象的字符串表示按列出和输出的顺序附加在一起.
msg
包含零个或多个替换字符串的JavaScript字符串.
subst1 ... substN
用于替换msg中的替换字符串的JavaScript对象.这使您可以对输出格式进行额外控制.
在您的情况下,您将多个参数传递给Console.log()方法,因此它将像文档中所述那样工作:输出多个对象
| 归档时间: |
|
| 查看次数: |
360 次 |
| 最近记录: |