1.字符串与数组
~字符串可以被视为字符数组,可以使用数组的运算符,用来返回某一字符
const str='hello';
str[0] // h
str[str.length-1] //o
~但字符串与数组的相似也经此而已。实际上无法改变单个字符。
const str='hello';
str[1]='x'
str /hello/
delete str[0]
str /hello/
~字符串的length属性
length属性返回字符串长度,但是属性是无法改变的
var s = 'hello';
s.length // 5
s.length = 3;
s.length // 5
s.length = 7;
s.length // 5
2.Base64转码
~所谓Base64就是一种编码方法,可以将任意值转变为 0-9 A-z +和/ 这64个字符组成的打印字符。使用它的主要目的不是加密,而是为了不出现特殊字符,简化程序处理
~JavaScript原生提供两个Base64方法
btoa() //将任意值转化为Base64编码
atob() //将Base64编码转化为原来的值
var string=btoa('Hello World!');
btoa(string) // "SGVsbG8gV29ybGQh"
atob('SGVsbG8gV29ybGQh') // "Hello World!"
注意这两个方法不适用于非ASCII码的字符(比如中文),会报错
btoa('你好') //报错
如果想要将非ASCII码字符转化为base64,必须中间插入一个转码环节,再使用这两个方法
function base64Encode(data){
return btoa(encodeURIComponent(data))
}
function base64Decode(date){
return decodeURIComponent(atob(date))
}
console.log(base64Encode('你好')) //JUU0JUJEJUEwJUU1JUE1JUJE
console.log(base64Decode('JUU0JUJEJUEwJUU1JUE1JUJE')) //你好
String 对象
~字面量与构造函数创建的不同
let str=new String('ss')
let str2='12'
console.log(str,typeof str,typeof str2) //'ss' 'object' 'string'
静态方法
~String.charCodeAt()
charCodeAt()
方法返回字符串指定位置的 Unicode 码点(十进制表示),相当于String.fromCharCode()
的逆操作。
'abc'.charCodeAt(1) // 98
'abc'.charCodeAt() // 97 没有传下标,就是第一个字符
~String.fromCharCode()
该方法的参数是一个或多个数值,代表 Unicode 码点,返回值是这些码点组成的字符串。
String.fromCharCode() // ""
String.fromCharCode(97) // "a"
String.fromCharCode(104, 101, 108, 108, 111)
// "hello"
~.charAt()
charAt返回指定下标的字符,参数从0开始
let str=new String('string')
str.charAt(1) //t
str.charAt(str.length-1) //g
~concat()
concat可以用来字符串和数组合并,返回一个新的不改变原来的变量
'aa'.concat('bb') //'aabb'
该方法可以接收多个参数
'aa'.concat('bb','cc') // 'aabbcc'
如果参数不是字符串,会先将其转化为字符串,再连接
''.concat(1,2,3) //'123'
~slice()
slice()方法用于截取字符串,不会改变原字符串。第一个参数是开始的位置,第二个参数是结束的位置,不填第二个截取到结尾
let str='ssdaadad'
str.slice(2,3) //d
str.slice(2) //daadad
如果参数为负值,表示从结尾开始计算
‘JavaSricpt’.clice(-1) //t
‘JavaSricpt’.clice(-4,-2) //ic
‘JavaSricpt’.clice(0,-6) //Java
~substring()
和slice基本一样,不改变原值,第一个参数开始,第二个参数结束
~substr()
和slice基本一样,不改变原值,第一个参数开始,第二个参数字符串的长度
'java'.substr(2,2) //va
~indexOf()
用来确定一个字符串在另一个字符串中出现的位置,返回的结果是匹配的位置。如果返回-1则表示匹配不到
'java'.indexOf('a') //1
'java'.indexOf('b') //-1
indexOf还可以接收第二个参数,表示从哪里开始匹配
'java'.indexOf('a',2) //3
lastIndexOf() 用法和它一样,区别是从尾部开始匹配
'hello world'.lastIndexOf('o') // 7
lastIndexOf
的第二个参数表示从该位置起向前匹配
'hello world'.lastIndexOf('o', 6) // 4
~trim()
trim()方法用来去除字符串两端的空格,返回一个新字符串,不改变原字符串
' hi hh '.trim()
~toLowerCase() toUpperCase
toLowerCase()方法用来将字符串全部转为小写,toUpperCase()则是全部转为大写。他们都返回一个新字符串,不改变原数据
'sssx'.toUpperCase() // SSSX
'XXX'.toLowerCase() //xxx
~match()
match() 方法用来确定原字符串是否匹配某个子字符串,返回一个数组,成员为匹配到的第一个字符串还有下标和原字符串,没有匹配到返回null
'cat tiger dog'.match('dog') //['dog']
~search()
search()方法基本等同于match(),只返回下标,没有匹配到返回 -1
~replace()
replace()方法用于替换匹配到的字符串,一般情况下只替换掉第一个匹配到的,(多次替换使用待有/g的正则表达式)
~split()
split()方法用来将分割字符串,返回一个分割出来的数组
'a|b|c'.split('|') //[a,b,c]
'abc'.split('') //[a,b,c]
如果不传递参数的话,将会返回一个原字符串的数组
'hi hellow'.slipt() //hi hellow
如果满足匹配规则的两个部分,紧邻着(被分割的部分中间没有其他字符),则返回数组中有一个空字符串
'a||b'.split() //[a,'',b]
如果满足匹配规则的字符串出现在开头或者结尾,则在返回的数组中在开头或结尾有字符串
'|a|b'.split('|') //['',a,b]
'a|b|'.split('|') //[a,b,'']
split方法接收的第二个参数,限定返回数组的最大长度
'a|b|c'.split('|', 0) // []
'a|b|c'.split('|', 1) // ["a"]
'a|b|c'.split('|', 2) // ["a", "b"]
'a|b|c'.split('|', 3) // ["a", "b", "c"]
'a|b|c'.split('|', 4) // ["a", "b", "c"]
~localeCompare()
localeCompare()方法用来比较两个字符串的‘大小’,长返回1 等于返回0 小于返回-1
'apple'.localeCompare('banana') // -1
'apple'.localeCompare('apple') // 0
该方法考虑到了自然语言的顺序。距离来说,一般情况下,大写字母应该大于小写字母
'B' > 'a' // false
上面代码中,字母B
小于字母a
。因为 JavaScript 采用的是 Unicode 码点比较,B
的码点是66,而a
的码点是97。
但是,localeCompare
方法会考虑自然语言的排序情况,将B
排在a
的前面。
'B'.localeCompare('a') // 1
上面代码中,localeCompare
方法返回整数1,表示B
较大。
localeCompare
还可以有第二个参数,指定所使用的语言(默认是英语),然后根据该语言的规则进行比较。
'ä'.localeCompare('z', 'de') // -1
'ä'.localeCompare('z', 'sv') // 1
上面代码中,de
表示德语,sv
表示瑞典语。德语中,ä
小于z
,所以返回-1
;瑞典语中,ä
大于z
,所以返回1
。