前言
string 是一個(gè)或多個(gè)可能由字母躲撰,數(shù)字或符號(hào)組成的字符序列,在JavaScript中可以通過(guò)索引訪問(wèn)字符串中任意字符击费,并且字符串有很多可用的方法和屬性。
在本教程中桦他,我們將了解字符串和String
對(duì)象之間的區(qū)別蔫巩,如何為字符串建立索引,如何訪問(wèn)字符串中的字符以及日常工作中經(jīng)常使用字符串的屬性和方法快压。
字符串和字符串對(duì)象
為了測(cè)試兩者之間的差異圆仔,我們將初始化一個(gè)字符串和一個(gè)字符串對(duì)象。
// Initializing a new string primitive
const stringPrimitive = 'A new string.'
// Initializing a new String object
const stringObject = new String('A new string.')
可以使用typeof
來(lái)確定值的類(lèi)型蔫劣。
typeof stringPrimitive
string
在第二個(gè)示例中坪郭,我們使用new String()
創(chuàng)建一個(gè)字符串對(duì)象并將其分配給變量。
typeof stringObject
object
字符串是如何索引的
在字符串中每個(gè)字符都對(duì)應(yīng)一個(gè)字符索引脉幢,從0
開(kāi)始歪沃。
我們可以新建一個(gè)字符串How are you?
。
H | o | w | a | r | e | y | o | u | ? | ||
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
第一個(gè)字符是H
,對(duì)應(yīng)著0
索引嫌松。最后一個(gè)字符是?
沪曙,對(duì)應(yīng)著11
。即使是空格字符在3
和7
也是有索引的萎羔。
訪問(wèn)字符
下面我們將演示如何訪問(wèn)字符
'How are you?'
使用括號(hào)表示法液走,我們可以訪問(wèn)字符串中任何字符。
'How are you?'[5]
r
我們也可以通過(guò)用索引為參數(shù)的chartAt()
方法贾陷,訪問(wèn)字符串中任何字符缘眶。
'How are you?'.charAt(5)
r
反之,我們也可以通過(guò)字符為參數(shù)的indexOf()
方法髓废,獲取當(dāng)前字符的索引巷懈。
'How are you?'.indexOf('o')
1
盡管o
在How are you
字符串中出現(xiàn)兩次,但是indexof(‘o’)
只會(huì)返回第一個(gè)o
字符的索引
lastIndexOf('o')
就可以用來(lái)返回最后一個(gè)o
字符的索引瓦哎。
'How are you?'.lastIndexOf('o')
9
這些方法砸喻,我們也可以以字符串為參數(shù)柔逼,它會(huì)返回第一個(gè)字符的索引。
'How are you?'.indexOf('are')
4
反之割岛,slice()
方法以開(kāi)始和結(jié)束索引為參數(shù)愉适,返回一個(gè)字符串。
'How are you?'.slice(8, 11)
you
可能你會(huì)觀察到11
就是?
癣漆,但是?
并沒(méi)有輸出维咸。原因是結(jié)束索引11
不包含,只到它前一個(gè)10
。
'How are you?'.slice(8)
you?
簡(jiǎn)而言之惠爽,charAt()
和slice()
將幫助根據(jù)索引號(hào)返回字符串值癌蓖,而indexOf()
和lastIndexOf()
則相反,根據(jù)提供的字符串字符返回索引號(hào) 婚肆。
字符串長(zhǎng)度
使用length
屬性租副,可以返回一個(gè)字符串的長(zhǎng)度。
'How are you?'.length
12
這里面有個(gè)注意點(diǎn)较性,length
屬性返回的是從1
開(kāi)始到12
結(jié)束的實(shí)際長(zhǎng)度12
用僧,而不是從0
開(kāi)始到11
結(jié)束的索引長(zhǎng)度11
。
大小寫(xiě)轉(zhuǎn)化
在JavaScript中有兩個(gè)自帶的方法toUpperCase()
和toLowerCase()
赞咙,這個(gè)看字面就可以理解的责循。
'How are you?'.toUpperCase()
HOW ARE YOU?
'How are you?'.toLowerCase()
how are you?
值得注意的是,這些方法不會(huì)更改原始字符串攀操。
分割字符串
JavaScript方法使用指定的分隔符字符串將一個(gè)String
對(duì)象分割成子字符串?dāng)?shù)組院仿,以一個(gè)指定的分割字串來(lái)決定每個(gè)拆分的位置。
const originalString = 'How are you?'
// 通過(guò)一個(gè)空字符分割字符串成數(shù)組
const splitString = originalString.split(' ')
console.log(splitString)
[ 'How', 'are', 'you?' ]
有了分割后返回的數(shù)組速和,我們就可以操作這數(shù)組中的值歹垫。
splitString[1]
are
如果沒(méi)有傳入?yún)?shù), split()
會(huì)把字符串分割成每個(gè)字符。
去除空格
JavaScript的trim()
方法可以把字符串的兩端空格刪除健芭,但不能刪除中間的空格县钥。空格可以是制表符慈迈。
const tooMuchWhitespace = ' How are you? '
const trimmed = tooMuchWhitespace.trim()
console.log(trimmed)
How are you?
查找和替換字符串值
我們可以在字符串中搜索值若贮,然后使用replace()
方法將其替換為新值。 第一個(gè)參數(shù)將是要找到的值痒留,第二個(gè)參數(shù)將是要替換為的值谴麦。
const originalString = 'How are you?'
// Replace the first instance of "How" with "Where"
const newString = originalString.replace('How', 'Where')
console.log(newString)
Where are you?
我們還可以在replace()
第一個(gè)參數(shù)中使用正則表達(dá)式。 例如伸头,replace()
僅影響第一個(gè)值匾效,但是我們可以使用g
(全局)標(biāo)志來(lái)字符串中所有待替換值,而可以使用i
(不區(qū)分大小寫(xiě))標(biāo)志來(lái)忽略大小寫(xiě)恤磷。
const originalString = "Javascript is a programming language. I'm learning javascript."
// Search string for "javascript" and replace with "JavaScript"
const newString = originalString.replace(/javascript/gi, 'JavaScript')
console.log(newString)
JavaScript is a programming language. I'm learning JavaScript.
想要練習(xí)更多的正則表達(dá)式可以訪問(wèn)Regexr 這個(gè)網(wǎng)站面哼。