1. 转义字符

使用转义字符将字符串中的双引号和单引号正常输出

var myString = "hello \"world\"";
console.log(myString);    // hello "world"

字符串只能写在一行,分成多行需要使用转义字符

/*
    var myString = "hello
    world";
    错误的声明方式
*/
var myString = "hello\
world";

常用的转义符:① 换行符:\n ② 回车符:\r ③ 制表符:\t

2. 字符串的length属性

该属性不能通过赋值运算符重新赋值。

var myString = "hello world";
console.log(myString.length);    // 11
var myString2 = "你好";
console.log(myString2.length);    // 2,中文的长度也为1

3. Base64转码

有时,文本里面包含一些不可打印的符号,比如 ASCII 码0到31的符号都无法打印出来,这时可以使用 Base64 编码,将它们转成可以打印的字符。另一个场景是,有时需要以文本格式传递二进制数据,那么也可以使用 Base64 编码。

所谓 Base64 就是一种编码方法,可以将任意值转成 0~9、A~Z、a-z、+和/这64个字符组成的可打印字符。使用它的主要目的,不是为了加密,而是为了不出现特殊字符,简化程序的处理。

3.1 btoa()和atob()

btoa()方法用于将任意值转为 Base64 编码。

atob()方法用于将Base64 编码转为原来的值。

var myString = "hello world";
var temp = btoa(myString);
console.log(temp);    // hello world被转码为aGVsbG8gd29ybGQ=
console.log(atob(temp));    // 将aGVsbG8gd29ybGQ=恢复为hello world

注意,这两个方法不适合非 ASCII 码的字符,会报错。

// btoa("你好");
// 错误的

3.2 encodeURIComponent()和decodeURIComponent()

encodeURIComponent()方法用字符的UTF-8编码的转义序列表示字符。

decodeURIComponent()方法将UTF-8编码转换为字符。

var myString = "你好";
var temp = encodeURIComponent(myString);
console.log(temp);    // 你好被转码为%E4%BD%A0%E5%A5%BD
console.log(decodeURIComponent(temp));    // 将%E4%BD%A0%E5%A5%BD恢复为你好

3.3 同时使用3.1和3.2的方法

function b64Encode(str) {
  return btoa(encodeURIComponent(str));
  // 先将字符转换为UTF-8编码,再将UTF-8编码转换为Base64编码
}

function b64Decode(str) {
  return decodeURIComponent(atob(str));
  // 先将Base64编码转换为UTF-8编码,再将UTF-8编码转换为原字符
}

b64Encode('你好'); // "JUU0JUJEJUEwJUU1JUE1JUJE"
b64Decode('JUU0JUJEJUEwJUU1JUE1JUJE'); // "你好"

4. 字符串方法

var s1 = 'abc';
var s2 = new String('abc');    //创建一个字符串对象

typeof s1 // "string"
typeof s2 // "object"

s2.valueOf() // "abc"

4.1 charAt()

charAt方法返回指定位置的字符,参数是从0开始编号的位置。

var myString = "hello world!"
console.log(myString.charAt(0));    //h
console.log(myString.charAt(6));    //w,可见不会自动忽略空格

4.2 concat()

concat方法用于连接多个字符串,返回一个新字符串,不改变原字符串。

var string1 = "hello";
var string2 = "world";
var string3 = "!";
console.log(string1.concat(string2,string3));    // helloworld!
console.log(string1);    // hello,可见不改变原字符串

4.3 slice()

slice方法用于从原字符串取出子字符串并返回,不改变原字符串。它的第一个参数是子字符串的开始位置,第二个参数是子字符串的结束位置(不含该位置)。

var myString = "hello world";

// 两个参数的slice()
console.log(myString.slice(0,3));    // hel
console.log(myString.slice(0,7));    // hello w,可见不会忽略空格
console.log(myString);    // hello world,可见不会修改原字符串

// 一个参数的slice(),第二个参数默认为字符串结尾
console.log(myString.slice(0));    // hello world

4.4 substring()

substring方法用于从原字符串取出子字符串并返回,不改变原字符串,跟slice方法很相像。它的第一个参数表示子字符串的开始位置,第二个位置表示结束位置(返回结果不含该位置)。

var myString = "hello world";

// 两个参数的substring()
console.log(myString.substring(0,3));    // hel
console.log(myString.substring(0,7));    // hello w,可见不会忽略空格
console.log(myString);    // hello world,可见不会修改原字符串

// 一个参数的substring(),第二个参数默认为字符串结尾
console.log(myString.substring(0));    // hello world

//基本等同于slice方法

4.5 substr()

substr方法用于从原字符串取出子字符串并返回,不改变原字符串,跟slice和substring方法的作用相同。substr方法的第一个参数是子字符串的开始位置(从0开始计算),第二个参数是子字符串的长度。

var myString = "hello world";

// 两个参数的substr()
console.log(myString.substr(0,3));    // hel
console.log(myString.substr(1,7));    // ello wo,可见不会忽略空格
console.log(myString);    // hello world,可见不会修改原字符串

// 一个参数的substr(),第二个参数默认为起始位置到字符串的末尾的长度
console.log(myString.substr(6));    // world

4.6 indexOf()

indexOf方法用于确定一个字符串在另一个字符串中第一次出现的位置,返回结果是匹配开始的位置。如果返回-1,就表示不匹配。

var myString = "hello world";

// 一个参数的indexOf()
console.log(myString.indexOf("l"));    // 2,第一个l出现的位置
console.log(myString.indexOf("a"));    // -1,没有a出现
console.log(myString.indexOf("wo"));    // 6,第一个wo出现的位置

//两个参数的indexOf(),第二个参数表示匹配的开始位置
console.log(myString.indexOf("h",1));    // -1,第一个位置开始往后没有h出现

4.7 trim()

trim方法用于去除字符串两端的空格,返回一个新字符串,不改变原字符串。

该方法去除的不仅是空格,还包括制表符(\t、\v)、换行符(\n)和回车符(\r)。

var myString = "\thello world\n\r\v";

console.log(myString.trim(""));    // hello world
// 可见字符串左右的所有空白都被去除了

4.8 toLowerCase()、toUpperCase()

toLowerCase方法用于将一个字符串全部转为小写,toUpperCase则是全部转为大写。它们都返回一个新字符串,不改变原字符串。

console.log('Hello World'.toLowerCase());    // hello world
console.log('Hello World'.toUpperCase());    // HELLO WORLD

4.9 search()

search方法用于确定一个字符串在另一个字符串中第一次出现的位置,返回结果是匹配开始的位置。如果返回-1,就表示不匹配。

var myString = "hello world";

console.log(myString.search("l"));    // 2,第一个l出现的位置
console.log(myString.search("a"));    // -1,没有a出现
console.log(myString.search("wo"));    // 6,第一个wo出现的位置

//类似indexOf方法,但search方法还可用于正则

4.10 replace()

replace方法用于替换匹配的子字符串,一般情况下只替换第一个匹配(除非使用带有g修饰符的正则表达式)。

'aaa'.replace('a', 'b'); // "baa"

4.11 split()

split方法按照给定规则分割字符串,返回一个由分割出来的子字符串组成的数组。

如果分割规则为空字符串,则返回数组的成员是原字符串的每一个字符。

如果省略参数,则返回数组的唯一成员就是原字符串。

'a|b|c'.split('|'); // ["a", "b", "c"]
'a|b|c'.split(''); // ["a", "|", "b", "|", "c"]
'a|b|c'.split(); // ["a|b|c"]