1. 字符串中可以包含转义字符,这包括:
\n 换行 \t 制表 \b 退格 \r 回车 \f 换页 \\ 反斜杠 \'单引号 \" 双引号 \`反引号 \xnn以16进制编码表示的字符 \unn以16进制编码表示的unicode字符
2. 字符串的特点,简单来说就是字符串能够拼接
3.转换字符串
let age=11;
age.toString(); //默认以10进制模式转换为字符串
age.toString(2);
age.toString(16);
// 参数的取值范围 [2,36]
let bool = true;
bool.toString(bool);//"true"
4.模板字面量
//没有空格的,意料之中的
let str =`hello
world`;
console.log(str);
需要注意的是不要对齐上一行,不然前面会有很多空格,比如:
//手段对齐的后果,就是输出时,前面很多空格
let str =`hello
world`;
console.log(str);
5.字符串插量
以前,一般是这么做:
let value=5;
let allCode = value + " : " + '--' + (value*value);//使用+号拼接
现在,应这么做,插入的值都会使用toString()强制转换为字符串(不影响被定义的变量)
let value=5;
let str = `${value} is a code ${value*value}`;
甚至可以
let str=`${value} is a code ${`world`}`;
let foo = {toString: () => `world`};
console.log(`Hello, ${foo}`);
在插值表达式中可以调用函数和方法:
function capitalize(word) {
return `${word[0].toUpperCase()}${word.slice(1)}`;
}
console.log(`${capitalize('hello')}`);
6.模板字面量标签函数
标签函数会接受被插值记号后的模板和对每个表达式求值的结果,这句话听起来有点绕,简单来说就是接受${}符号里面的计算结果。
let a=6;
let b=9;
// function 某某函数名(strings, ...)
function simpleTag(strings, aVal, bVal, Sum) {
console.log(strings);
return aVal * bVal * Sum;
}
let c=simpleTag`${a}+${b}=${a+b}`;
console.log(c);
重点一:需要注意的是标签函数本身是一个常规函数,
是通过前缀 strings 识别,所以每个标签函数必须形如 function func(strings, . . . 参数)
因为表达式的数量是可变的,所以应该使用剩余操作符把它们收集到一个数组中:
let a=6;
let b=9;
// 剩余操作符 ...
function simpleTag(strings, ...all) {
console.log(strings);
let sum=0;
for(const k of all) {
sum+=k;
console.log(k);
}
return sum;
}
let c=simpleTag`${a}+${b}+${`9`}`;
console.log(c);
重点二:剩余操作符形如 ...某某参数名 的形式
有意思的是,这里输出的是 159,这是因为 ${`9`} 被解释为一个字符串,实际上是 '15' + '9' 拼接的结果。
7. 原始字符串
使用String.raw标签函数能够获取原始的字符串,而不是被转换后的字符。
console.log(String.raw`123\n123`);
这样子,就不会输出转义符。
实现一个与 String.raw 相同行为的标签函数
function printRaw(strings, ...all) {
return strings.raw.toString();
}
南无阿弥陀佛,祝你吉祥!