Day04 - 字符串詳解

作業(yè)

  1. 字符串是什么
  2. 字符串類型是什么
  3. 創(chuàng)建字符串的方法
  4. 創(chuàng)建字符串字面量的語(yǔ)法
  5. 字符串的特點(diǎn)
  • 字符串用法1:查詢字符串長(zhǎng)度
  • 用法2:連接字符串
  • 用法3:比較字符串
  • 用法4:查詢索引
  • 用法5:查詢字符
  • 用法6:查詢字符編碼
  • 用法7:提取字符
  • 字符串對(duì)象
  • 包裝對(duì)象

字符串是什么

定義
字符串就是使用引號(hào)括起來的字符序列漩绵。

字符串類型是什么

  • 字符串就是string
  • string是一種數(shù)據(jù)類型碍粥,用于表示js程序中的文本着帽。
  • string是一個(gè)不可修改的16位值的有序序列怖喻。
  • 每個(gè)字符對(duì)應(yīng)一個(gè)或多個(gè)16位存儲(chǔ)單元厉膀。
  • string的長(zhǎng)度表示字符編碼的個(gè)數(shù)驼壶,并非字符的個(gè)數(shù)粟焊。
'張三'
'hello world'

'\uD83D\uDE00' //??
'??'.length // 2

'e\u0301' //'é'
'é'.length // 2

'\ud83d\udc99' //??
'??'.length  //  2

創(chuàng)建字符串的方法

方法一:創(chuàng)建字符串字面量

字符串字面量

  • 字符串字面量指直接出現(xiàn)在程序中的字符串付魔,而不是以變量形式出現(xiàn)的字符串逢渔。
  • 字符串字面量是由單引號(hào)雙引號(hào)反引號(hào)括起來的字符序列肋坚。

用法1:使用引號(hào)定界

'hello world'
"hello world"
`hello world`

用法2:引號(hào)嵌套規(guī)則
外單內(nèi)雙 單引號(hào)定界的字符串中可以包含雙引號(hào),不能包含單引號(hào)

'<div class="box"></div>' //正確肃廓。外單內(nèi)雙
'<div class='box'></div>' //錯(cuò)誤智厌。定界錯(cuò)誤

外雙內(nèi)單:雙引號(hào)定界的字符串中可以包含單引號(hào),不能包含雙引號(hào)

"<div class='box'></div>" //正確盲赊。外雙內(nèi)單
"<div class="box"></div>" //錯(cuò)誤铣鹏。定界錯(cuò)誤

外反:反引號(hào)定界的字符串中可以包含單引號(hào)或雙引號(hào)

`<div class='box'></div>` //正確
`<div class="box"></div>` //正確

用法3:轉(zhuǎn)義符 - 即反斜線\
反斜線在JavaScript中有著特殊用途哀蘑。反斜線后加一個(gè)字符诚卸,該字符就不再表示該字符的字面意思了。

'It\'s true.' //正確绘迁。轉(zhuǎn)義符后面的單引號(hào)不再表示字符串定界符
"<div class=\"box\"></div>" //正確合溺。轉(zhuǎn)義符后面的雙引號(hào)不再表示字符串定界符

用法4:換行
使用單引號(hào)或雙引號(hào)定界的字符串不能換行。

'滾滾長(zhǎng)
江東逝水' //錯(cuò)誤缀台。單引號(hào)定界的字符串必須寫在一行內(nèi)

'滾滾長(zhǎng)\
江東逝水' //正確棠赛。反斜線后面的行結(jié)束符(不可見符號(hào))被轉(zhuǎn)義,即行結(jié)束符不再表示行結(jié)束

使用反引號(hào)定界的字符串可以換行

let str = ''
str += `<ul>
  <li>列表項(xiàng)</li>
</ul>
`

用法5:模版字符串
使用反引號(hào)定界的字符串也被稱為”模版字符串“膛腐。模版字符串可以包含js表達(dá)式睛约。

let name = '張三';
console.log(`Hello ${ name }`) // 'hello 張三'

方法二:創(chuàng)建字符串對(duì)象

String對(duì)象用于表示和操作字符序列。

創(chuàng)建字符串對(duì)象

String對(duì)象可以通過String()構(gòu)造函數(shù)創(chuàng)建哲身。

const str = new String("hello world")
console.log(str) //返回 'hello world'

字符串的特點(diǎn)

特點(diǎn)1:字符串是不可變的

字符串是固定不變的辩涝,類似replace()toUpperCase()的方法都返回新字符串,原字符串本身并沒有發(fā)生改變勘天。字符串相當(dāng)于只讀數(shù)組怔揩。

let arr = [1,2,3]
arr[1] = 5
console.log(arr) //數(shù)組元素可以修改

let str = '123'
str[1] = 5
console.log(str) //字符串元素不可以修改

特點(diǎn)2:字符串是有索引的

  • 字符串的索引從0開始
  • 第一個(gè)字符的位置是0
  • 第二個(gè)字符的位置是1
  • 最后一個(gè)字符的位置: str[str.length - 1]

特點(diǎn)3:字符串是有長(zhǎng)度的

用法1:查詢字符串長(zhǎng)度

  • 字符串的長(zhǎng)度是指字符串中包含單個(gè)字符的個(gè)數(shù)棍丐。
  • 空字符串的長(zhǎng)度為0。
  • 可使用length屬性查詢字符的長(zhǎng)度沧踏。
var str = 'hello'
var len = str.length
console.log(len) //5

案例1

  1. 限制內(nèi)容字?jǐn)?shù)

用法2:連接字符串

方法1:使用加號(hào)操作符

  • 如果將加號(hào)(+)運(yùn)算符用于數(shù)字,表示兩數(shù)相加巾钉;
  • 如果將加號(hào)(+)運(yùn)算符用于字符串翘狱,則表示字符串連接。

方法2:string.concat()
concat() 方法將字符串參數(shù)連接到調(diào)用字符串并返回一個(gè)新字符串砰苍。

const str1 = 'Hello';
const str2 = 'World';

console.log(str1.concat(' ', str2));
// expected output: "Hello World"

console.log(str2.concat(', ', str1));
// expected output: "World, Hello"

語(yǔ)法

concat(str1)
concat(str1, str2)
concat(str1, str2, /* …, */ strN)

用法3: 比較字符串

在JS中潦匈,字符串是可以比較的,但是只能使用大于赚导、小于操作符比較茬缩。

const str1 = 'a'
const str2 = 'b'
if( str1 > str2){
    console.log(`${str1}大于${str2}`)
} else if(str2 > str1){
    console.log(`${str2}大于${str1}`)
} else {
    console.log(`${str1}等于${str2}`)
}

用法4: 查詢索引

string.indexOf()
indexOf() 方法返回指定字符串在調(diào)用字符串中第一次出現(xiàn)的位置。

  • 如果未找到吼旧,則返回-1凰锡。
  • 對(duì)大小寫敏感
  • 不能使用正則表達(dá)式

語(yǔ)法

indexOf(searchString)
indexOf(searchString, start)

  • searchString: 要搜索的子字符串
  • start: 搜索的開始位置。默認(rèn)是0

string.lastIndexOf()
Returns the index (position) of the last occurrence of a value in a string

string.search()
返回指定值或正則表達(dá)式匹配到的字符串的索引圈暗。

用法5: 查詢字符

string.charAt()
Returns the character at a specified index (position)
string.charCodeAt()
Returns the Unicode of the character at a specified index掂为。

案例

  1. 找出字符串中所有的數(shù)字
  2. QQ登錄檢測(cè)

用法6:查詢字符編碼

string.fromCharCode()
返回Unicode編碼對(duì)應(yīng)的字符。

案例

  1. 告白加密

用法7:提取字符

方法1String.prototype.slice()
定義:返回提取的字符串员串。(slice方法也可操作數(shù)組)

語(yǔ)法:

slice(indexStart)
slice(indexStart, indexEnd)

參數(shù):

  • indexStart: 提取的起始/包含位置(包含該位置的字符)勇哗。可以是負(fù)值寸齐。含頭
  • indexEnd : 可選欲诺。提取的結(jié)束/排除位置(不包含該位置的字符)∶祓校可以是負(fù)值扰法。不含尾

返回值: 提取的子字符串。

示例:

const str = '0123456789';

/*****沒有值*****/
//start=0 end=str.length-1
console.log(str.slice()); // "hello"
console.log(str.substring()); // "hello"

/*****一個(gè)值*****/ 
//end=str.length-1
console.log(str.slice(2)); //"llo"
console.log(str.substring(2)); //"llo"
//if start == nagative, end = str.length-1
console.log(str.slice(-2));// "lo"
console.log(str.substring(-2));// "Hello"
//if start >= str.length 則返回空字符串
console.log(str.slice(5)); //""
console.log(str.substring(5)); //""
//if start == undefined ||NaN||null start = 0
console.log(str.slice(undefined)); // "hello"
console.log(str.substring(undefined)); // "hello"
console.log(str.slice(NaN)); // "hello"
console.log(str.substring(NaN)); // "hello"
console.log(str.slice(null)); // "hello"
console.log(str.substring(null)); // "hello"

/*****兩個(gè)值*****/
//正值
console.log(str.slice(2, 4));//"ll"
console.log(str.substring(2, 4));//"ll"
//負(fù)值
console.log(str.slice(-4, -2)); // "el"
console.log(str.substring(-4, -2)); // ""
//if end <= start 則返回空字符串
console.log(str.slice(4, 2));//""
console.log(str.substring(4, 2));//"ll"
console.log(str.slice(-2, -4));//""
console.log(str.substring(-2, -4));//""

案例2

  1. 截取粘貼的文本
  2. 駝峰轉(zhuǎn)換

substr()

Extracts a number of characters from a string, from a start index (position)

String.prototype.substring()

substring()方法返回提取的字符串海铆。

語(yǔ)法

substring(indexStart)
substring(indexStart, indexEnd)
  • indexstart:提取字符串的起始(包含)位置,不可以是負(fù)值迹恐。含頭
  • indexend: 提取字符串的結(jié)束(排除)位置,不可以是負(fù)值卧斟。不含尾

返回值:新字符

示例:

const str = '0123456789';

/*****沒有值*****/
//start=0 end=str.length-1
console.log(str.slice()); // "hello"
console.log(str.substring()); // "hello"

/*****一個(gè)值*****/ 
//end=str.length-1
console.log(str.slice(2)); //"llo"
console.log(str.substring(2)); //"llo"
//if start == nagative, end = 0
console.log(str.slice(-2));// "lo"
console.log(str.substring(-2));// "Hello"
//if start >= str.length 則返回空字符串
console.log(str.slice(5)); //""
console.log(str.substring(5)); //""
//if start == undefined ||NaN||null start = 0
console.log(str.slice(undefined)); // "hello"
console.log(str.substring(undefined)); // "hello"
console.log(str.slice(NaN)); // "hello"
console.log(str.substring(NaN)); // "hello"
console.log(str.slice(null)); // "hello"
console.log(str.substring(null)); // "hello"

/*****兩個(gè)值*****/
//正值
console.log(str.slice(2, 4));//"ll"
console.log(str.substring(2, 4));//"ll"
//負(fù)值
console.log(str.slice(-4, -2)); // "el"
console.log(str.substring(-4, -2)); // ""
//if end <= start 則交換start和end
console.log(str.slice(4, 2));//""
console.log(str.substring(4, 2));//"ll"
console.log(str.slice(-2, -4));//""
console.log(str.substring(-2, -4));//""

檢測(cè)字符串

includes()

返回字符串是否包含指定值

endsWith()

檢測(cè)字符串是否以指定值結(jié)尾

startsWith()

檢測(cè)字符串是否以指定字符開頭殴边。

案例

  1. 替換字符

檢索字符串

match()

在字符串中搜索值或正則表達(dá)式,并返回匹配項(xiàng)珍语。

repeat()

返回具有多個(gè)字符串副本的新字符串锤岸。

replace()

返回指定值或正則表達(dá)式替換后的字符串。

字符串轉(zhuǎn)數(shù)組

String.prototype.split()

split()方法通過分隔符把字符串分隔為一個(gè)數(shù)組板乙。

語(yǔ)法

split()
split(separator)
split(separator, limit)

  • separator: 分隔符是偷,即分隔字符的模式拳氢。分隔符可以是:
    • 字符串
    • RegExp
  • limit: (可選) 指定返回?cái)?shù)組的長(zhǎng)度。非負(fù)整數(shù)蛋铆。
    • 如果是0馋评,則返回空數(shù)組。

示例:

const str = 'hello world'

const arr1 = str.split()
console.log(arr1)//['hello world']

const arr2 = str.split('')
console.log(arr2) //['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']

const arr3 = str.split(' ')
console.log(arr3) //['hello', 'world']

const arr4 = str.split('o')
console.log(arr4) //['hell', ' w', 'rld']

const arr5 = str.split('l')
console.log(arr5) //['he', '', 'o wor', 'd']

大小寫轉(zhuǎn)換

toLowerCase()

返回轉(zhuǎn)換為小寫字母的字符串刺啦。

toUpperCase()

返回轉(zhuǎn)換為大寫字母的字符串留特。

案例

  1. 駝峰轉(zhuǎn)換

toLocaleLowerCase()

返回轉(zhuǎn)換為本地語(yǔ)言的小寫字母的字符串。

toLocaleUpperCase()

返回轉(zhuǎn)換為本地語(yǔ)言的大寫字母的字符串玛瘸。

去空白

trim()

Returns a string with removed whitespaces

trimEnd()

Returns a string with removed whitespaces from the end

trimStart()

Returns a string with removed whitespaces from the start

valueOf()

用于把字符串對(duì)象轉(zhuǎn)換成字符串直接量蜕青。

toString()

返回字符串直接量或字符串對(duì)象。

包裝對(duì)象

包裝對(duì)象是指存取字符串的屬性時(shí)創(chuàng)建的臨時(shí)對(duì)象糊渊,被稱為包裝對(duì)象右核。

思考:字符串既然不是對(duì)象,為什么它會(huì)有屬性和方法呢渺绒?

var str = 'hello'
var len = str.length
console.log(len) // 返回5

原因:只要引用了字符串str的屬性贺喝,JavaScript就會(huì)將字符串值通過調(diào)用new String(str)的方式臨時(shí)轉(zhuǎn)換成對(duì)象,這個(gè)對(duì)象就是包裝對(duì)象宗兼,它繼承了字符串的方法搜变,并用來處理屬性的引用,一旦屬性引用結(jié)束针炉,包裝對(duì)象就會(huì)被立刻銷毀挠他。

思考:可以為包裝對(duì)象的屬性賦值嗎?

var str1 = 'hello world'
console.log(typeof str1) //string
console.log(str1.length) //調(diào)用包裝對(duì)象讀取str1的length屬性篡帕,隨即銷毀
str1.attr = 100//試圖為包裝對(duì)象的屬性賦值殖侵,則會(huì)忽略這個(gè)操作
console.log(str1.attr) // 返回undefined

var str2 = new String("hello world")
console.log(typeof str2) //object
str2.attr = 200
console.log(str2.attr) // 返回200

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市镰烧,隨后出現(xiàn)的幾起案子拢军,更是在濱河造成了極大的恐慌,老刑警劉巖怔鳖,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件茉唉,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡结执,警方通過查閱死者的電腦和手機(jī)度陆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來献幔,“玉大人懂傀,你說我怎么就攤上這事±校” “怎么了蹬蚁?”我有些...
    開封第一講書人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵恃泪,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我犀斋,道長(zhǎng)贝乎,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任叽粹,我火速辦了婚禮糕非,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘球榆。我一直安慰自己,他們只是感情好禁筏,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開白布持钉。 她就那樣靜靜地躺著,像睡著了一般篱昔。 火紅的嫁衣襯著肌膚如雪每强。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,071評(píng)論 1 285
  • 那天州刽,我揣著相機(jī)與錄音空执,去河邊找鬼。 笑死穗椅,一個(gè)胖子當(dāng)著我的面吹牛辨绊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播匹表,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼门坷,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了袍镀?” 一聲冷哼從身側(cè)響起默蚌,我...
    開封第一講書人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎苇羡,沒想到半個(gè)月后绸吸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡设江,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年锦茁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片叉存。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蜻势,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鹉胖,到底是詐尸還是另有隱情握玛,我是刑警寧澤够傍,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站挠铲,受9級(jí)特大地震影響冕屯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜拂苹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一安聘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瓢棒,春花似錦浴韭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至连霉,卻和暖如春榴芳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背跺撼。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工窟感, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人歉井。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓柿祈,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親哩至。 傳聞我的和親對(duì)象是個(gè)殘疾皇子谍夭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容