String类型的定义:由零个或多个16为的Unicode字符春组成的字符序列。
1. 声明字符串:
字符串由**单引号(’)或多引号(")**表示,且由哪种引号开头就必须以哪种引号结尾,下面两种写法都是正确的:
var name1 = “张三”;
var name2 = ‘李四’;
2. 其他类型转字符串的方法
想把一个值转换成字符串有三种方式:
第一种是几乎每个值有的**toString()**方法(除了undefined和null);
第二种是String()函数,可以将任何类型的值转换成字符串型(包括undefined和null);
第三种是隐式转换,要把某个值转换成字符串,可以使用加号把这个值与一个字符串(" ")连接在一起。
3. 字符串常用的属性和方法
length属性
length:获取字符串的长度
let myString = "hello kitty";
myString.length; // 输出11
indexOf()方法
indexOf(searchvalue,fromindex) :在字符串中查找子字符串,如果存在则返回指定的子字符串值在字符串中首次出现的位置,否则返回-1
其中searchvalue(必需)规定需检索的字符串值。
fromindex:可选的整数参数。规定在字符串中开始检索的位置。合法取值是 0 到 stringObject.length - 1。如省略该参数,则将从字符串的首字符开始检索。
let myString = "hello kitty";
myString.indexOf('kitty'); // 6
myString.indexOf('Hello'); //-1
myString.indexOf('hello'); //0
myString.indexOf('hello',3); //-1
lastIndexOf()方法
lastIndexOf() 方法可返回一个指定的字符串值最后出现的位置,在一个字符串中的指定位置从后向前搜索。
let myString = "hello kitty";
myString.lastIndexOf('hello') // 0
myString.lastIndexOf('world') // -1
myString.lastIndexOf('kitty') // 6
myString.lastIndexOf('kitty',3) // -1
slice()方法
slice(start,end) 方法可提取字符串的某个部分,并以新的字符串返回被提取的部分。
start 要抽取片断的起始下标。如果是负数,则规定从字符串的尾部开始算起的位置。-1 指字符串的最后一个字符,-2 指倒数第二个字符,以此类推。
end 要抽取片段的结尾下标。若未指定此参数,则要提取的是从 start 到原字符串结尾的字符串。如果是负数,则从字符串的尾部开始算起的位置。
let myString = "hello kitty";
myString.slice(0,5) // "hello"
myString.slice(6) // "kitty"
myString.slice(3,-1) // "lo kitt"
subbstring()方法
subbstring(start,stop) 方法用于提取字符串中介于两个指定下标之间的字符
start:非负整数,规定截取子串的起始位置。stop:可选,非负整数,截取子串的结束位置,但不包括stop处的字符串
let myString = "Hello kitty";
myString.substring(1,5) // "ello"
myString.substring(3) // "lo kitty"
substr()方法
substr:(start开始位置索引,end需要返回的字符个数) 截取后不改变原来字符串,返回一个新的字符串
不写第二个参数表示直到最后)
var str='abcdefg';
str.substr(1) //bcdefg
str.substr(1,1) //b
charAt()方法
charAt() 方法返回指定索引的字符
let myString = "Hello kitty";
//charAt
myString.charAt(6) // "k"
myString.charAt(7) // "i"
concat()方法
concat() 方法用于连接两个或多个字符串。返回连接后的新字符串。
let str = "aabbcc"
let str2 = " ccddeeff"
myString.concat(str) // "Hello kittyaabbcc"
myString.concat(str,str2) // "Hello kittyaabbcc ccddeeff"
split()方法
split() 方法用于把一个字符串分割成字符串数组
let myString = "Hello kitty";
myString.split(""); // ["H", "e", "l", "l", "o", " ", "k", "i", "t", "t", "y"]
myString.split(" "); // ["Hello", "kitty"]
【引申】:数组变成字符串
arr.join(分隔符) 以,连接
arr.join(’’) 无缝连接
arr.join(’-’) 以-连接
arr.join(’’ + str + ‘’) 以表达式连接
replace()方法
replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
let myString = "Hello kitty";
myString.replace(/kitty/,"world") // "Hello world"
let name = "Doe, John";
name.replace(/(\w+)\s*, \s*(\w+)/, "$2 $1"); // "John Doe"
match()方法
match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。
let myString = "hello kitty";
myString.match("hello"); //hello
myString.match("Hello"); //null
match方法:只接受一个参数,由字符串或RegExp对象指定的一个正则表达式
match() 方法根据正则表达式在字符串中搜索匹配项,并将匹配项作为 Array 对象返回。
let text = "The rain in SPAIN stays mainly in the plain";text.match(/ain/g) // 返回数组 [ain,ain,ain]如果正则表达式不包含 g 修饰符(执行全局搜索),match() 方法将只返回字符串中的第一个匹配项。
String.search()search() 方法在字符串中搜索指定值并返回匹配的位置:
let str = "Please locate where 'locate' occurs!";str.search("locate") // 返回 7search() 与indexOf() 的区别
search() 方法不能接受第二个起始位置参数。
indexOf() 方法不能采用强大的搜索值(正则表达式)。
toUpperCase()方法 , toLowerCase()方法
toUpperCase() 方法用于把字符串转换为大写。
toLowerCase() 方法用于把字符串转换为小写。
let myName = "My Name IS HAnmeimei"
myName.toLowerCase(); // "my name is hanmeimei"
myName.toUpperCase(); // "MY NAME IS HANMEIMEI"
str.charAt(index)方法, str.charCodeAt(index)方法 ,String.fromCharCode(num1,num2,…,numN)方法
str.charAt(index); 方法返回指定索引位置处的字符。如果超出有效范围的索引值返回空字符串,index为字符串下标,index取值范围[0,str.length-1]
var str = "fuck"
console.log(str.charAt(3))//k
console.log(str.charAt(9)//""空字符串
str.charCodeAt(index); 返回子字符串的unicode编码,index取值范围同上
var stringValue = 'hello world';alert(stringValue.charCodeAt(1)); // '101'
String.fromCharCode(num1,num2,…,numN); 根据unicode编码返回字符串
var n = String.fromCharCode(65); // A
repeat()方法
repeat方法返回一个新字符串,表示将原字符串重复n次。参数如果是小数,会被取整。如果repeat的参数是负数或者Infinity,会报错。但是,如果参数是 0 到-1 之间的小数,则等同于 0,这是因为会先进行取整运算。0 到-1 之间的小数,取整以后等于-0,repeat视同为 0。参数NaN等同于 0。如果repeat的参数是字符串,则会先转换成数字。
'na'.repeat(2.9) // "nana"
'na'.repeat(Infinity)
// RangeError
'na'.repeat(-1)
// RangeError
'na'.repeat(-0.9) // ""
'na'.repeat(NaN) // ""
'na'.repeat('na') // ""
'na'.repeat('3') // "nanana"
padStart()方法 , padEnd()方法
ES2017 引入了字符串补全长度的功能。如果某个字符串不够指定长度,会在头部或尾部补全。padStart()用于头部补全,padEnd()用于尾部补全。padStart()和padEnd()一共接受两个参数,第一个参数是字符串补全生效的最大长度,第二个参数是用来补全的字符串。如果原字符串的长度,等于或大于最大长度,则字符串补全不生效,返回原字符串。如果省略第二个参数,默认使用空格补全长度。
'x'.padStart(5, 'ab') // 'ababx'
'x'.padStart(4, 'ab') // 'abax'
'x'.padEnd(5, 'ab') // 'xabab'
'x'.padEnd(4, 'ab') // 'xaba'
padStart()的常见用途是为数值补全指定位数。下面代码生成 10 位的数值字符串。
'1'.padStart(10, '0') // "0000000001"
'12'.padStart(10, '0') // "0000000012"
'123456'.padStart(10, '0') // "0000123456"
另一个用途是提示字符串格式。
'12'.padStart(10, 'YYYY-MM-DD') // "YYYY-MM-12"
'09-12'.padStart(10, 'YYYY-MM-DD') // "YYYY-09-12"
trimStart()方法 ,trimEnd()方法
String.trimStart()和String.trimEnd():去掉开头结尾空格文本
把头尾的空格文本去掉,来规避展示的不受控情况。自ES5来,String.prototype.trim() 被用于去除头尾上的空格、换行符等,现在通过 trimStart(),trimEnd() 来头和尾进行单独控制。trimLeft()、trimRight() 是他们的别名
const string = ' Hello ES2019! ';
string.trimStart();
// 'Hello ES2019! '
string.trimEnd();
// ' Hello ES2019!'
includes() 方法
includes() 方法用来判断一个数组是否包含一个指定的值,如果是返回 true,否则false。
语法:arr.includes(searchElement, fromIndex)
[1, 2, 3].includes(2); // true
[1, 2, 3].includes(4); // false
[1, 2, 3].includes(3, 3); // false,查看从第 3 个索引位置是否包含 "3"
[1, 2, 3].includes(3, -1); // true,查看从倒数第1 个索引位置是否包含 "3"
[1, 2, NaN].includes(NaN); // true
startsWith() 方法
startsWith() 方法用于检测字符串是否以指定的子字符串开始。如果是以指定的子字符串开头返回 true,否则 false。
注意:startsWith() 方法对大小写敏感。
语法:string.startsWith(searchvalue, start)
var str = "Hello world, welcome to the Runoob.";
var n = str.startsWith("world", 6);//查看从第 6 个索引位置是否以 "world" 开头
endsWith()方法
endsWith()方法确定字符串是否以指定字符串的字符结尾。true如果字符串以字符结尾,则返回此方法,否则返回false。注意:endsWith()方法区分大小写。语法:string.endsWith(searchvalue, length)
var str = "Hello world, welcome to the universe.";
var n = str.endsWith("universe.");//检查字符串是否以“universe”结尾
var str = "Hello world, welcome to the universe.";var n = str.endsWith("world", 11);//检查字符串是否以“world”结尾,假设字符串长度为11个字符
|
|