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"]