考虑以下代码:
var age = 3;
console.log("I'm " + age + " years old!");
除了使用字符串拼接,还有其他方式将变量的值插入到字符串中吗?
考虑以下代码:
var age = 3;
console.log("I'm " + age + " years old!");
除了使用字符串拼接,还有其他方式将变量的值插入到字符串中吗?
const age = 3
console.log(`I'm ${age} years old!`)
P.S. 请注意使用反引号:``
。
如果适用的话,使用ECMAScript 2015的模板字符串字面量。
根据ECMAScript 5规范,没有直接的方法来实现,但是在ECMAScript 6中有模板字符串,在规范草案起草期间也被称为准文字面量。像这样使用它们:
> var n = 42;
undefined
> `foo${n}bar`
'foo42bar'
您可以在 {}
内使用任何有效的 JavaScript 表达式。例如:
> `foo${{name: 'Google'}.name}bar`
'fooGooglebar'
> `foo${1 + 3}bar`
'foo4bar'
> `foo
... bar`
'foo\n bar'
注意: 我使用io.js v2.4.0来评估上述所有模板字符串。您也可以使用最新的Chrome测试上述示例。
注意: ES6规范现已最终确定, 但尚未被所有主流浏览器实现。
根据Mozilla开发者网络页面所述,基本支持将从以下版本开始实施: Firefox 34,Chrome 41,Internet Explorer 12。如果您是Opera,Safari或Internet Explorer用户,并且现在对此感到好奇,此测试平台可用于玩耍,直到每个人都获得对此的支持。
Douglas Crockford的《JavaScript救急手册》中包含了一个String.prototype.supplant
函数。该函数简短易用,使用方法非常熟悉:
String.prototype.supplant = function (o) {
return this.replace(/{([^{}]*)}/g,
function (a, b) {
var r = o[b];
return typeof r === 'string' || typeof r === 'number' ? r : a;
}
);
};
// Usage:
alert("I'm {age} years old!".supplant({ age: 29 }));
alert("The {a} says {n}, {n}, {n}!".supplant({ a: 'cow', n: 'moo' }));
如果你不想改变String的原型,你可以将其适配为独立的,或者放置在其他命名空间中,或者做其他的处理。
" {0} 说 {1},{1},{1}!".supplant(['cow', 'moo'])
- Robert Massa小心警告:避免使用任何不允许您转义其自身分隔符的模板系统。例如,使用此处提到的supplant()
方法将无法输出以下内容。
"由于我的{age}变量,我今年3岁了。"
简单插值可能适用于小型独立脚本,但通常会带有这种设计缺陷,限制任何严肃使用。我更喜欢DOM模板,如:
<div> I am <span id="age"></span> years old!</div>
使用jQuery操作:$('#age').text(3)
或者,如果您只是厌倦了字符串拼接,还有另一种语法:
var age = 3;
var str = ["I'm only", age, "years old"].join(" ");
Array.join()
的速度比直接使用(+
方式)连接要慢,因为浏览器引擎(包括 V8,其中包括 Node.js 和几乎所有运行 JS 的内容)已经对其进行了巨大的优化,并且明显更偏向于直接连接。 - pilausupplant
的您的“谨慎提示”是没有必要的:"I am 3 years old thanks to my {age} variable.".supplant({}))
将返回给定的字符串。如果给定了 age
,可以使用 {{age}}
来打印 {
和 }
。请让我知道您是否需要任何其他帮助。 - le_m// JavaScript
let stringValue = 'Hello, my name is {name}. You {action} my {relation}.'
.replace(/{name}/g ,'Inigo Montoya')
.replace(/{action}/g ,'killed')
.replace(/{relation}/g,'father')
;
' VBScript
dim template = "Hello, my name is {name}. You {action} my {relation}."
dim stringvalue = template
stringValue = replace(stringvalue, "{name}" ,"Luke Skywalker")
stringValue = replace(stringvalue, "{relation}","Father")
stringValue = replace(stringvalue, "{action}" ,"are")
始终如一
* COBOL
INSPECT stringvalue REPLACING FIRST '{name}' BY 'Grendel Mother'
INSPECT stringvalue REPLACING FIRST '{relation}' BY 'Son shoulder'
INSPECT stringvalue REPLACING FIRST '{action}' BY 'made a gaping mortal-making wound upon.'
// JavaScript
let template = 'Hello, my name is {name}. You {action} my {relation}.'
let values = {
name: 'Inigo Montoya',
action: 'killed',
relation, 'father',
};
let output = template;
for(let entry of Object.entries(values)){
output = output.replace('{'+output[0]+'}',output[1]);
}
console.log(output);
如果你真的想要用大锤砸开一个坚果,你可以使用Prototype的模板系统:
var template = new Template("I'm #{age} years old!");
alert(template.evaluate({age: 21}));
最简单的方法是
`my string ${VARIABLE}`
一个效率较低的方式是:
function format(str, ...params) {
for(const param of params)
str = str.replace("%", param);
return str;
}
可以与...一起使用
format("My % string", "interpolation")
console.log
输出中进行插值,那么只需要:console.log("Eruption 1: %s", eruption1);
^^
%s
被称为“格式说明符”。console.log
内置了这种插值支持。使用ES6 模板字符串
并使用任何可用的转换器(如babel)将其转译为ES5。
const age = 3;
console.log(`I'm ${age} years old!`);
Show GRAPH of : AIP001-_sma
(在字符串1周围使用反引号,无法在此处显示)。 - Marcos