ES6 特性: 模版字符串 Template String
正文
1. 特性:字符串拼接
原来使用 + 号拼接字符串 => 改为使用反引号与 ${} 表达式组合字符串
- ES5 以前
const greeting = 'Hello ' + name + '!';
- ES6 模版字符串
const greeting = `Hello ${name}!`
2. 特性:字符串模版作为函数
除了作为字符串之外,还可以将模版字符串接在函数后面,利用字符串模版作为函数的参数
- 语法
- 第一个参数为字符串字面量的类数组对象,还有一个
raw 属性保存所有字符串的原始字符 - 后续参数为不定长的表达式,使用
... 扩展运算符变为表达式数组
function fn(templates, ...expressions) {}
fn`blablabla`
const createGreeting = (name) => `Hello ${name}!`;
console.log(createGreeting('superfree'));
const createGreeting2 = ((strs, nameExp) => {
return (name) => `${strs[0]}${nameExp(name)}${strs[1]}`;
})`Hello ${(name) => name.toUpperCase()}!`;
console.log(createGreeting2('superfree'));
3. 应用:字符串表达式转对象
对于第二种的字符串表达式作为函数参数不仅能返回字符串,实际上能返回任意东西
const createObj = (strs, ...expressions) => {
console.log('strs', strs);
console.log('expressions', expressions);
const obj = {};
let i = expressions.length;
while (i-- > 0) {
obj[strs[i]] = expressions[i];
}
return obj;
};
const name = 'superfree';
const age = 21;
const obj = createObj`name${name}age${age}`;
console.log('obj', obj);
4. 应用:生成内联 CSS 样式(style 样式)
const createStyleFactory = (strs, ...expressions) => {
return (props) => {
let i = strs.length - 1;
let s = strs[i];
while (i-- > 0) {
s = strs[i] + expressions[i](props) + s;
}
return s;
};
};
const createStyle = createStyleFactory`
width: ${(props) => props.width};
height: ${(props) => props.height};
background: ${(props) => props.background || '#000'};
`;
console.log(createStyle({ width: 111, height: 222 }));
document
.querySelector('.block')
.setAttribute('style', createStyle({ width: '200px', height: '40px', background: '#f0f0f0' }));
其他资源
参考连接
完整代码示例
https://github.com/superfreeeee/Blog-code/tree/main/front_end/es6/es6_template_string
|