一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第 15 天,点击查看活动详情。
String类型
字符串表示:使用双引号(")、单引号(')或者反引号(`); 在JavaScript中,只要保证前后使用的引号一致就可以。
let str = 'fds"; // 错误案例
1、字符字面量
字符串数据类型包含一些字符字面量,用于表示非打印字符或有其他用途的字符
- 字符串的长度可以通过其 length 属性获取
- 转义序列表示且只算一个字符
let str = 'str \u03a3.'
console.log(str.length) // 6
console.log(str) // str Σ.
2、字符串特点
ECMAScript 中的字符串是不可变的(immutable),意思是一旦创建,它们的值就不能变了。
一旦创建不可变?那要想修改变量中的字符串值怎么办?
如果要修改变量字符串值,就只能先销毁原始字符串, 再把新的字符串保存在变量中。
let lang = "Java";
lang = lang + "Script";
变量 lang 一开始包含字符串"Java"。紧接着,lang 被重新定义为包含"Java"和"Script" 的组合,也就是"JavaScript"。整个过程首先会分配一个足够容纳 10 个字符的空间,然后填充上 "Java"和"Script"。最后销毁原始的字符串"Java"和字符串"Script",因为这两个字符串都没有用了。所有处理都是在后台发生的
3、转换为字符串
如何把一个值转换为字符串?
-
toString()方法null和undefined值没有toString()方法- 在对数值调用这个方法时, toString()可以接收一个底数参数; 默认返回数值十进制字符串表示
let num = 10; console.log(num.toString()) // 10 console.log(num.toString(2)) // 1010 -
String()转型函数- 在不确定值是不是null或undefined时,用String()转型函数
- 转换规则
如果值有 toString()方法,则调用该方法(不传参数)并返回结果。
如果值是 null,返回"null"。
如果值是 undefined,返回"undefined"。
-
加号操作符
给一个值加上一个空字符串""也可以将其转换为字符串
4、模板字面量
- ECMAScript 6 新增:``
- 保留换行字符,可以跨行定义字符串
var tempstr = 'abc
fdv'; // 语法错误
var tempstr = `abc
fdv`
console.log(tempstr.length) // 7
console.log(tempstr)
//'abc'
//'fdv'
5、字符串插值
- 模板字面量支持字符串插值
- 可以把模板字面量看成一种特殊的js表达式,只不过最后求值结果是字符串
- 模板字面量在定义时立即求值并转换为字符串
- js表达式通过
${ }插入字符串中
// 过去字符串插值,是通过+拼接的
let value = 666;
let str1 = 'value等于' + value
// 现在使用模板字面量
let str2 = `value等于${value}`
6、模板字面量标签函数
标签函数 会接收被插值记号分隔后的模板和对每个表达式求值的结果。
function simpleTag(strings, aexp, bexp, sumexp) {
console.log(strings);
console.log(aexp);
console.log(bexp);
console.log(sumexp);
return '啦啦啦';
}
let a = 2, b= 5;
let untaggedResult = `${ a } + ${ b } = ${ a + b }`;
let taggedResult = simpleTag`${ a } + ${ b } = ${ a + b }`;
console.log(untaggedResult) // '2 + 5 = 7'
7、原始字符串
使用默认的 String.raw 标签函数直接获取原始的模板字面量内容。
console.log(`\u00A9`); // ©
console.log(String.raw`\u00A9`); // \u00A9