[JavaScript] 数据类型- String

163 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第 15 天,点击查看活动详情

String类型

字符串表示:使用双引号(")、单引号(')或者反引号(`); 在JavaScript中,只要保证前后使用的引号一致就可以。

let str = 'fds"; // 错误案例

1、字符字面量

字符串数据类型包含一些字符字面量,用于表示非打印字符或有其他用途的字符

image.png

  • 字符串的长度可以通过其 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()方法

    1. nullundefined 值没有 toString()方法
    2. 在对数值调用这个方法时, toString()可以接收一个底数参数; 默认返回数值十进制字符串表示
    let num = 10;
    console.log(num.toString()) // 10
    console.log(num.toString(2)) // 1010
    
    
  • String()转型函数

    1. 在不确定值是不是null或undefined时,用String()转型函数
    2. 转换规则 如果值有 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'

image.png

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'

image.png

7、原始字符串

使用默认的 String.raw 标签函数直接获取原始的模板字面量内容。

console.log(`\u00A9`); // ©
console.log(String.raw`\u00A9`); // \u00A9