转载

Node.js 4.0.0 新特性:模板字符串(Template Strings)

前两天 新发布的 Node.js 4.0.0 稳定版 ,总算让 Node.js 用上了新的 V8 4.5,也使得 V8 中的 ECMAScript 6 新特性终于来到了 Node.js,除了引入注目的类型数据、箭头函数一类,还有个模板字符串(Template Strings),使得广大 Node.js 程序员可以用原生的方法来进行相对复杂的字符串处理了。

蛮荒时代

在以前,如果要处理一个多行的字符串,你得:

// //n 是为了高亮插件的显示,实际应为 /n
console.log('鹅,鹅,鹅,//n/
曲项向天歌。//n/
白毛浮绿水,//n/
红掌拨清波。');

当然,老成一点的,还知道可以用数组进行组合。

console.log(['鹅,鹅,鹅,',
'曲项向天歌。',
'白毛浮绿水,',
'红掌波清波。'].join('//n'));

那如果要在字符串中插入变量呢?

var person = {name: 'Sid', location: 'Shanghai'};
console.log('person: ' + JSON.stringify(person) + ' is here');
// person:{"name":"Sid","location":"Shanghai"} is here

或者这样:

console.log('person:', person, 'is here');
// person: { name: 'Sid', location: 'Shanghai' } is here

没错,一个都没让人省心。

闪亮登场

模板字符串出场了,它就是为了解决上面这些问题。与变通字符串使用单双引号来包裹值不一样,模板字符串用的是

 ```js console.log(`  鹅,鹅,鹅,   曲项向天歌。  白毛浮绿水, 红掌波清波。`);

既然称之为模板,当然也就具有模板的一些功能:

var nameHe = 'Li Lei', nameShe = 'Han Meimei';
console.log(`
this is ${nameHe},
this is ${nameShe}`

, nameHe);
/*
this is Li Lei,
this is Han Meimei Li Lei
*/

还可以直接执行表达式:

var intA = 10;
console.log(`Math.sqrt(3):${Math.sqrt(3)}, intA^2: ${intA * intA}`);
// Math.sqrt(3):1.7320508075688772, intA^2: 100

此外,可以组织一个函数,来专门处理模版字符串,类似于这样:

function taggedTS() {
console.log('arguments:', arguments);
}

taggedTS `This is ${intA} and sqrt: ${Math.sqrt(intA)}`
/*
arguments: { '0': [ 'This is ', ' and sqrt: ', '' ],
'1': 10,
'2': 3.1622776601683795 }
*/

注意,虽然看起来像个普通的函数,但在调用的时候,不能使用括号,而是直接用函数名加模板字符串的方式。传入的参数,分为两部分,第一个是被动态的值所分隔的多个字符串,后面是对应的各个动态值的计算结果。

安全问题

与SQL注入一样,如果要把用户的输入直接作为模板字符串的内容,务必先进行仔细的检查,因为恶意的输入者,可能会通过猜测变量名,来获取你程序中比较危险的值。

正文到此结束
Loading...