字符串用于存储和处理文本。
String的定义
var str=new String(‘hello world‘)
var str=String(‘hello world‘)
var str = "hello world";//字面量的方式
String的实例方法
DOM相关
<html>
<body>
<script type="text/javascript">
var txt="Hello World!"
document.write("<p>Big: " + txt.big() + "</p>")
document.write("<p>Small: " + txt.small() + "</p>")
document.write("<p>Bold: " + txt.bold() + "</p>")
document.write("<p>Italic: " + txt.italics() + "</p>")
document.write("<p>Blink: " + txt.blink() + " (does not work in IE)</p>")
document.write("<p>Fixed: " + txt.fixed() + "</p>")
document.write("<p>Strike: " + txt.strike() + "</p>")
document.write("<p>Fontcolor: " + txt.fontcolor("Red") + "</p>")
document.write("<p>Fontsize: " + txt.fontsize(16) + "</p>")
document.write("<p>Lowercase: " + txt.toLowerCase() + "</p>")
document.write("<p>Uppercase: " + txt.toUpperCase() + "</p>")
document.write("<p>Subscript: " + txt.sub() + "</p>")
document.write("<p>Superscript: " + txt.sup() + "</p>")
document.write("<p>Link: " + txt.link("http://www.baidu.com") + "</p>")
</script>
</body>
ECMA标准
toString
返回相应值的字符串
undefined和null没有返回值
var a=undefined
console.log(a.toString())//Cannot read property ‘toString‘ of undefined
console.log(null.toString())//Cannot read property ‘toString‘ of null
console.log(true.toString()) //"true"
console.log(12.3.toString()) // "12.3"
console.log((123).toString()) //"123" 整形需加()后才能调用toString
console.log([].toString()) //""
console.log({}.toString()) // "[object Object]"
valueOf
返回String类型的原始值
console.log(‘Hello World‘.valueOf()) //"Hello World"
charAt
返回一个字符串中指定位置的字符,编号从0开始,若传入个不存在的数值,就返回空字符串
var str = new String("Hello World!");
var newstr=str.charAt(2);
var newstr1=str.charAt(15);
console.log(newstr);//"l"
console.log(newstr1);//""
charCodeAt
返回一个字符串中指定位置字符的Unicode编码;若传入个不存在的位置数值,返回NaN
var str = new String("Hello World!");
var newstr=str.charCodeAt(5);
var newstr1=str.charCodeAt(15);
console.log(newstr);//32
console.log(newstr1);//NaN
toLowerCase
将字符串中的大写字母全部转换为对应的小写字母,与toLocaleLowerCase方法不同的是,后者按照本地方式把字符串转换为小写,(如土耳其语)具有地方特有的大小写映射。
var str = new String("Hello World!");
console.log(str.toLowerCase());//HELLO WORLD!
toUpperCase
将字符串中所有小写字母转换为对应的大写字母,与toLocaleUpperCase方法不同的是,后者按照本地方式把字符串转换为大写,(如土耳其语)具有地方特有的大小写映射。
var str = new String("Hello World!");
console.log(str.toUpperCase());//hello world!
replace
接受两个参数,将参数一的正则或字符串直接量替换为参数二:
var str = new String("Hello World!");
console.log(str.replace("Hello", "Hi"));//Hi World!
match
在字符串中查找指定的字符串。若查找成功,返回该字符串,否则返回null
var str = new String("Hello World!");
console.log(str.match("Hello")) //["Hello"]
console.log(str.match("Hi")) //null
search
返回查找正则表达式第一个匹配的位置
var str = new String("Hello World!");
console.log( ‘abcd‘.search(/\d+/) ) //-1
console.log(‘abcd1234‘.search(/\d+/))) //4
concat
返回拼接后的字符串,原字符串不变,可以同时连接多个字符串
javascript var str = new String("Hello World!"); var newstr=str.concat("Hi"); console.log(newstr);//"Hello World!Hi" console.log(str);//"Hello World!" var str = new String("Hello World!"); var newstr=str.concat("Hi","World"); console.log(newstr);//"Hello World!HiWorld" console.log(str);//"Hello World!"
indexOf
返回字符串中检索指定字符的位置,接收两个参数,第一个参数必徐,第二个为可选参数,指定检索开始的位置。若检索成功,则返回匹配子串的首字母下标,否则返回-1。
lastIndexOf从后往前开始查找一个字符串或字符,并返回找到的位置(从0开始计数)。若未找到,返回-1
参数是一个
var str = new String("Hello World!");
var newstr=str.indexOf("World");
console.log(newstr);//6
参数是二个
var str = new String("Hello World!");
var newstr=str.indexOf("World",7);
console.log(newstr);//-1
localeCompare
实例与参数进行比较,返回比较结果
若实例比参数大,返回0;若实例与参数相等,返回1;若实例比参数小,返回-1
var s=‘abc‘;
console.log(s.localeCompare(‘ab‘)); //1
console.log(s.localeCompare(‘abc‘)); // 0
console.log(s.localeCompare(‘abd‘)); // 1
split
用于将字符串分割,接受两个参数,第一个参数必需指定分割符,第二参数(可选)返回分割的几个子串数组
参数是一个
var str = new String("Hello World!");
var newstr=str.split(" ");
console.log(newstr);//["Hello", "World!"]
console.log(str);//"Hello World!"
参数是二个
var str = new String("Hello World!");
var newstr=str.split(" ",1);
console.log(newstr);//["Hello"]
console.log(str);//"Hello World!"
slice
返回从字符串第一个参数(必需表示起始位置)到第二个参数(可选表示结束前一个位置)的子串,原字符串不变
参数为一个
第一个参数(可为负数从后往前数),省略第二个参数,返回从0开始,一直到最后的字符
var str = ‘abcdefg‘;
console.log(str.slice(0));//"abcdefg"
console.log(str.slice(-3));//"efg"
参数为2个
第二个参数表示子串提取的结束位置索引(不包括此位置的字符);若为负数从后往前数
var str = ‘abcdefg‘;
console.log(str.slice(1, 3) ); // bc
console.log(str.slice(-3, -1) ); // ef
substr
返回从字符串第一个参数(必需表示开始位置)计算到第二个参数(可选表示长度)的子串,原字符串不变
参数为一个
第一个参数(可为负数从后往前数),省略第二个参数,返回从0开始,一直到最后的字符
var str = ‘abcdefg‘;
console.log( s.substr(0));//"abcdefg"
console.log( s.substr(-3));//"efg"
参数为2个
var str = ‘abcdefg‘;
console.log( str.substr(0, 3) ); // abc
console.log( str.substr(2, 4) ); // cdef
console.log( str.substr(-2, 3) ); // fg
substring
返回从字符串第一个参数(必需表示起始位置)到第二个参数(可选表示结束前一个位置)的子串,原字符串不变
参数为一个
第一个参数(若为负数视为0处理),省略第二个参数,返回从0开始,一直到最后的字符
var str = ‘abcdefg‘;
console.log(str.substring(0));//"abcdefg"
console.log(str.substring(-3));//"abcdefg"
参数为2个
第二个参数表示子串提取的结束位置索引(不包括此位置的字符);若为负数,返回空
var str = ‘abcdefg‘;
console.log(str.substring(0, 3) ); // abc
console.log( str.substring(2, 4) ); // cd
console.log( str.substring(-2, 3) ); // abc
console.log( str.substring(-3, -1) ); // ""
trim
从一个字符串的两端删除空白字符
var str= ‘ hello world ‘;
console.log(str.trim());//"hello world"
ES6方法
codePointAt
JavaScript 内部,字符以 UTF-16 的格式储存,每个字符固定为2
个字节。
对于那些需要4
个字节储存的字符(Unicode 码点大于0xFFFF
的字符),JavaScript 会认为它们是两个字符。
var s = "??";
s.length // 2
s.charAt(0) // ‘‘
s.charAt(1) // ‘‘
s.charCodeAt(0) // 55362
s.charCodeAt(1) // 57271
codePointAt
能够正确处理 4 个字节储存的字符,返回一个字符的码点。
let s = ‘??a‘;
s.codePointAt(0) // 134071
s.codePointAt(1) // 57271
s.codePointAt(2) // 97
codePointAt
方法是测试一个字符由两个字节还是由四个字节组成的最简单方法。
function is32Bit(c) {
return c.codePointAt(0) > 0xFFFF;
}
is32Bit("??") // true
is32Bit("a") // false
includes
返回布尔值,表示是否找到了参数字符串。
var str = ‘Hello world!‘;
var newstr=str.includes(‘Hello‘)
console.log(newstr)//true
第二个参数,表示开始搜索的位置。
var str = ‘Hello world!‘;
var newstr=str.includes(‘Hello‘,6)
console.log(newstr)//false
var newstr=str.includes(‘world‘,6)
console.log(newstr)//true
startsWith
返回布尔值,表示参数字符串是否在原字符串的头部。
var str = ‘Hello world!‘;
var newstr=str.startsWith(‘Hello‘)
console.log(newstr)//true
第二个参数,表示开始搜索的位置。
var str = ‘Hello world!‘;
var newstr=str.startsWith(‘Hello‘,6)
console.log(newstr)//false
var newstr=str.startsWith(‘world‘,6)
console.log(newstr)//true
endsWith
返回布尔值,表示参数字符串是否在原字符串的尾部。
var str = ‘Hello world!‘;
var newstr=str.endsWith(‘world!‘)
console.log(newstr)//true
第二个参数,表示前n
个字符。
var str = ‘Hello world!‘;
var newstr=str.endsWith(‘world‘,6)
console.log(newstr)//false
var newstr=str.endsWith(‘world‘,11)
console.log(newstr)//true
repeat
返回一个新字符串,表示将原字符串重复n
次。
‘x‘.repeat(3) // "xxx"
‘hello‘.repeat(2) // "hellohello"
‘na‘.repeat(0) // ""
参数如果是小数,会被取整。
‘na‘.repeat(2.9) // "nana"
如果repeat
的参数是负数或者Infinity
,会报错。
‘na‘.repeat(Infinity)
// RangeError
‘na‘.repeat(-1)
// RangeError
0 到-1 之间的小数,取整以后等于-0
,repeat
视同为 0。
‘na‘.repeat(-0.9) // ""
参数NaN
等同于 0。
‘na‘.repeat(NaN) // ""
如果repeat
的参数是字符串,则会先转换成数字。
‘na‘.repeat(‘na‘) // ""
‘na‘.repeat(‘3‘) // "nanana"
padStart
用于头部补全,padEnd()
用于尾部补全。
接受两个参数,第一个参数用来指定字符串的最小长度,第二个参数是用来补全的字符串。
如果原字符串的长度,等于或大于指定的最小长度,则返回原字符串。
‘xxx‘.padStart(2, ‘ab‘) // ‘xxx‘
‘xxx‘.padEnd(2, ‘ab‘) // ‘xxx‘
如果用来补全的字符串与原字符串,两者的长度之和超过了指定的最小长度,则会截去超出位数的补全字符串。
‘abc‘.padStart(10, ‘0123456789‘)
// ‘0123456abc‘
如果省略第二个参数,默认使用空格补全长度。
‘x‘.padStart(4) // ‘ x‘
‘x‘.padEnd(4) // ‘x ‘
padStart
的常见用途是为数值补全指定位数。下面代码生成 10 位的数值字符串。
‘1‘.padStart(10, ‘0‘) // "0000000001"
‘12‘.padStart(10, ‘0‘) // "0000000012"
‘123456‘.padStart(10, ‘0‘) // "0000123456"
String静态方法
fromCharCode
用于从码点返回对应字符,字符串中的每个字符都由单独的数字 Unicode 编码指定。
var str=String.fromCharCode(72,69,76,76,79)
console.log(str) //"HELLO"
fromCodePoint
ES6 提供了String.fromCodePoint
方法,可以识别大于0xFFFF
的字符,弥补了String.fromCharCode
方法的不足
console.log(String.fromCodePoint(0x20BB7))
// "??"
有多个参数,则它们会被合并成一个字符串返回。
console.log(String.fromCodePoint(0x78, 0x1f680, 0x79))
// "x??y"
String.raw
用来充当模板字符串的处理函数,返回一个斜杠都被转义(即斜杠前面再加一个斜杠)的字符串,对应于替换变量后的模板字符串。
String.raw`Hi\n${2+3}!`;
// "Hi\\n5!"
String.raw`Hi\u000A!`;
// ‘Hi\\u000A!‘
如果原字符串的斜杠已经转义,那么String.raw
不会做任何处理。
String.raw`Hi\\n`
// "Hi\\n"
String的应用
在 JavaScript 语言之中嵌入其他语言,如Vue中一段返回样式的代码:
if (this.borderHeavy) {
return `${bor} 2px ${solid} ${this.borderColor}`;
} else {
return `${bor} 1px ${solid} ${this.borderColor}`;
}