一吠勘、介紹
這節(jié)課呢看幼,我們來了解的是JavaScript String數(shù)據(jù)類型幌陕。
我們?cè)跀?shù)據(jù)類型中已經(jīng)簡單的介紹了String數(shù)據(jù)類型,下面我們來詳細(xì)的了解一下String類型搏熄。
JavaScript 字符串用于存儲(chǔ)和處理文本心例。
二、知識(shí)點(diǎn)介紹
1止后、JavaScript字符串
2、創(chuàng)建string對(duì)象方式
3瓜喇、String訪問及查找方式
4乘寒、字符方法
三、上課對(duì)應(yīng)視頻的說明文檔
1烂翰、JavaScript 字符串
字符串可以存儲(chǔ)一系列字符,如 "John Doe"甘耿。
字符串可以是插入到引號(hào)中的任何字符瞧捌。你可以使用單引號(hào)或雙引號(hào):
實(shí)例
var carname = "Volvo XC60";
var carname = 'Volvo XC60';
你可以使用索引位置來訪問字符串中的每個(gè)字符:
實(shí)例
var character = carname[7];
字符串的索引從 0 開始姐呐,這意味著第一個(gè)字符索引值為 [0],第二個(gè)為 [1], 以此類推。
你可以在字符串中使用引號(hào)头谜,字符串中的引號(hào)不要與字符串的引號(hào)相同:
實(shí)例
var answer = "It's alright";
var answer = "He is called 'Johnny'";
var answer = 'He is called "Johnny"';
你也可以在字符串添加轉(zhuǎn)義字符來使用引號(hào):
實(shí)例
var x = 'It\'s alright';
var y = "He is called \"Johnny\"";
1.1鸠澈、字符串長度
可以使用內(nèi)置屬性 length 來計(jì)算字符串的長度:
實(shí)例
var txt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var sln = txt.length;
1.2、特殊字符
在 JavaScript 中际度,字符串寫在單引號(hào)或雙引號(hào)中涵妥。
因?yàn)檫@樣蓬网,以下實(shí)例 JavaScript 無法解析:
"We are the so-called "Vikings" from the north."
字符串 "We are the so-called " 被截?cái)唷?/p>
如何解決以上的問題呢?可以使用反斜杠 (\) 來轉(zhuǎn)義 "Vikings" 字符串中的雙引號(hào)吵取,如下:
"We are the so-called \"Vikings\" from the north."
反斜杠是一個(gè)轉(zhuǎn)義字符锯厢。 轉(zhuǎn)義字符將特殊字符轉(zhuǎn)換為字符串字符:
轉(zhuǎn)義字符 (\) 可以用于轉(zhuǎn)義撇號(hào)脯倒,換行盔憨,引號(hào)讯沈,等其他特殊字符。
下表中列舉了在字符串中可以使用轉(zhuǎn)義字符轉(zhuǎn)義的特殊字符:
1.3问慎、字符串可以是對(duì)象
通常如叼, JavaScript 字符串是原始值穷劈,可以使用字符創(chuàng)建: var firstName = "John"
但我們也可以使用 new 關(guān)鍵字將字符串定義為一個(gè)對(duì)象: var firstName = new String("John")
實(shí)例
var x = "John";
var y = new String("John");
typeof x // 返回 String
typeof y //? 返回 Object
不要?jiǎng)?chuàng)建 String 對(duì)象。它會(huì)拖慢執(zhí)行速度社证,并可能產(chǎn)生其他副作用:
實(shí)例
var x = "John";? ? ? ? ? ? ?
var y = new String("John");
(x === y) // 結(jié)果為 false评凝,因?yàn)?x 是字符串奕短,y 是對(duì)象
=== 為絕對(duì)相等,即數(shù)據(jù)類型與值都必須相等谬返。
字符串屬性和方法
原始值字符串日杈,如 "John", 沒有屬性和方法(因?yàn)樗麄儾皇菍?duì)象)。
原始值可以使用 JavaScript 的屬性和方法翰蠢,因?yàn)?JavaScript 在執(zhí)行方法和屬性
時(shí)可以把原始值當(dāng)作對(duì)象啰劲。
字符串方法我們將在下一章節(jié)中介紹蝇裤。
1.4、字符串屬性
屬性 描述
constructor 返回創(chuàng)建字符串屬性的函數(shù)
length 返回字符串的長度
prototype 允許您向?qū)ο筇砑訉傩院头椒?/p>
方法 描述
charAt() 返回指定索引位置的字符
charCodeAt() 返回指定索引位置字符的 Unicode 值
concat() 連接兩個(gè)或多個(gè)字符串恋拍,返回連接后的字符串
fromCharCode() 將 Unicode 轉(zhuǎn)換為字符串
indexOf() 返回字符串中檢索指定字符第一次出現(xiàn)的位置
lastIndexOf() 返回字符串中檢索指定字符最后一次出現(xiàn)的位置
localeCompare() 用本地特定的順序來比較兩個(gè)字符串
match() 找到一個(gè)或多個(gè)正則表達(dá)式的匹配
replace() 替換與正則表達(dá)式匹配的子串
search() 檢索與正則表達(dá)式相匹配的值
slice() 提取字符串的片斷藕甩,并在新的字符串中返回被提取的部分
split() 把字符串分割為子字符串?dāng)?shù)組
substr() 從起始索引號(hào)提取字符串中指定數(shù)目的字符
substring() 提取字符串中兩個(gè)指定的索引號(hào)之間的字符
toLocaleLowerCase() 根據(jù)主機(jī)的語言環(huán)境把字符串轉(zhuǎn)換為小寫狭莱,只有幾種語言(如土耳其語)具有地方特有的大小寫映射
toLocaleUpperCase() 根據(jù)主機(jī)的語言環(huán)境把字符串轉(zhuǎn)換為大寫,只有幾種語言(如土耳其語)具有地方特有的大小寫映射
toLowerCase() 把字符串轉(zhuǎn)換為小寫
toString() 返回字符串對(duì)象值
toUpperCase() 把字符串轉(zhuǎn)換為大寫
trim() 移除字符串首尾空白
valueOf() 返回某個(gè)字符串對(duì)象的原始值
1.5默怨、字符串方法
2匙睹、創(chuàng)建String對(duì)象方式
聲明:String對(duì)象的方法也可以在所有基本字符串值中訪問到济竹。
調(diào)用構(gòu)造函數(shù)String():
var str = new String();
var str = new String('hello world');//初始化str,str.length = 11;
3、String訪問及查找的方式
3.1訪問(通過索引)
3.1.1谆棺、charAt()或[]
1個(gè)參數(shù),參數(shù)為字符位置,返回字符
var strValue = new String('hello world');
console.log(strValue.charAt(1));//e
console.log(strValue[1]);//e,IE7及以下版本使用這種方式改淑,會(huì)返回undefined
3.1.2浴讯、charCodeAt()
1個(gè)參數(shù),參數(shù)為字符位置,返回字符編碼
var strValue = new String('hello world');
console.log(strValue.charCodeAt(1));//101
3.2、查找位置
3.2.1仰猖、indexOf()
第一個(gè)參數(shù)為指定子字符串奈籽,第二個(gè)參數(shù)為檢索位置。返回索引躏升,如果沒有找到則返回-1
var str = 'hello world'
str.indexOf('l');//2,返回找到的第一個(gè)字符的位置
str.indexOf('l',6);//9
3.2.2狼忱、lastIndexOf()
與indexOf()的區(qū)別在于,lastIndexOf()是從字符串的末尾向前搜索子字符串
4佃却、字符方法
4.1饲帅、擴(kuò)展字符串
concat()
接受任意數(shù)量參數(shù),用于將一個(gè)或多個(gè)字符串拼接起來染坯,返回拼接得到新的字符串副本丘逸。
var str = new String('hello');
var result = str.concat(' world');
console.log(result);//hello world
typeof result//"string"
4.2、獲取子字符串方法
slice(),substr(),substring()仲锄,這三個(gè)方法都會(huì)返回被操作字符串的子字符串副本儒喊,而且也都接受1或2個(gè)參數(shù)币呵,前閉后開[)
4.2.1、slice()
var str = 'hello';
str.slice(0,2);//"he",第一個(gè)參數(shù)指定字符串開始的位置芯义,第二個(gè)參數(shù)表示字符串到哪里結(jié)束
str.slice(-3);//"llo",o代表-1妻柒,依次倒數(shù),-3代表倒數(shù)第三個(gè)的l
str.slice(-2,-1);//"l",同理绑警,-2代表倒數(shù)第二個(gè)l,-1代表倒數(shù)第一的o
4.2.2央渣、substring()
var str = 'hello';
str.substring(0,2);//"he",此時(shí)的參數(shù)意義同str.slice(0,2)
str.substring(-3);//"hello",substring()方法會(huì)把所有負(fù)值參數(shù)轉(zhuǎn)換為0
str.substring(-3,-2);//"",同上
4.2.3芽丹、substr()
var str = 'hello';
str.substr(1,2);//"el",第一個(gè)參數(shù)指定字符串的開始位置,第二個(gè)參數(shù)指定的則是返回的字符個(gè)數(shù)
str.substr(-3);//"llo",此時(shí)的參數(shù)意義同str.slice(-3)
str.substr(-3,-1);//"",substr()方法會(huì)將負(fù)的第二個(gè)參數(shù)轉(zhuǎn)換為0
substr()方法傳遞負(fù)值時(shí)在IE中存在問題暖庄,它會(huì)返回原始的字符串楼肪,IE9修復(fù)了這個(gè)問題
4.3春叫、將字符串轉(zhuǎn)換為數(shù)組
split()
基于指定的分隔符(可以是字符串,也可以是RegExp對(duì)象)將字符串分割成多個(gè)子字符串价匠,并將結(jié)果放在一個(gè)數(shù)組中呛每,可接受可選的第二個(gè)參數(shù),用于指定數(shù)組的大小洋腮,返回?cái)?shù)組手形。
var color = 'blue,red,orange';
color.split();//["red,blue,orange"],長度為1
color.split(',');//["blue", "red", "orange"],長度為3
var color = 'blue-red-orange';
color.split('-');//["blue", "red", "orange"]库糠,長度為3
color.split(',',2);//["blue", "red"]
4.4、字符串大小寫轉(zhuǎn)換
toLowerCase(),toUpperCase()
var str = 'hello';
str.toUpperCase();//"HELLO"
str.toLowerCase();//"hello"
4.5贷屎、刪除字符串空格方法
trim()
刪除字符串中前置以及后綴的所有空格艘虎,然后返回結(jié)果副本顷帖。
var str = ' hello world ';
str.trim()//"hello world"
4.6、字符串的模式匹配方法
4.6.1榴嗅、match()
參數(shù):只接受一個(gè)參數(shù)陶舞,要么是一個(gè)正則表達(dá)式,要么是一個(gè)RegExp()對(duì)象唠粥。
返回:數(shù)組晤愧。數(shù)組中的第一項(xiàng)是與整個(gè)模式匹配的字符串,之后的每一項(xiàng)(如果有)保存著正則表達(dá)式捕獲組匹配的字符串
本質(zhì)上與調(diào)用exec()相同只厘。
var text = 'cat, bat, sat, fat';
var pattern = /.at/;
var matches = text.match(pattern);
matches // ["cat"]
matches.input // "cat, bat, sat, fat"
matches.index // 0
4.6.2舅巷、search()
參數(shù):與match()方法相同。
返回:字符串中第一個(gè)匹配項(xiàng)的索引赋元,如果沒有匹配項(xiàng)飒房,則返回-1情屹。
search()方法始終從前向后找
var text = 'cat, bat, sat, fat';
var pattern = /at/;
text.search(pattern) // 1
4.6.3、replace()
參數(shù):接收兩個(gè)參數(shù)椅文,第一個(gè)參數(shù)可以是一個(gè)RegExp對(duì)象或者一個(gè)字符串(這個(gè)字符串不會(huì)轉(zhuǎn)換成正則表達(dá)式)惜颇,第二個(gè)參數(shù)可以是一個(gè)字符串或者一個(gè)函數(shù)凌摄。
如果第一個(gè)參數(shù)是字符串,那么只會(huì)替換第一個(gè)子字符串痴怨。要想替換所有子字符串器予,唯一的辦法就是提供一個(gè)正則表達(dá)式乾翔,而且要指定全局標(biāo)志(g)標(biāo)志。
如果第二個(gè)參數(shù)是字符串萌丈,那么還可以使用一些特殊的字符序列,將正則表達(dá)式操作得到的值插入到結(jié)果字符串中肪笋。
也可以是函數(shù)乾颁,傳遞給函數(shù)的參數(shù)依次是模式的匹配項(xiàng)艺栈,模式的匹配項(xiàng)在字符串中的位置湿右,和原始字符串。在正則表達(dá)式定義了多個(gè)捕獲組的情況下吭狡,傳遞給函數(shù)的參數(shù)依次是模式的匹配項(xiàng)丈莺,第一個(gè)捕獲組的匹配項(xiàng)缔俄,以此類推,但最后兩個(gè)參數(shù)分別是模式的匹配項(xiàng)在字符串中的位置和原始字符串蟹略。
var text = 'xxx-love-xxx';
var pattern = /xxx/g;
var result = text.replace(pattern,'2')
result// "2-love-2"
text.replace(/(xxx)-\w{4}-(xxx)/g,'I love YOU');//"I love YOU"
var text = 'xxx-love-xxx';
var pattern1 = /xxx/g;
var result = text.replace(pattern1,'$$')
result// "$-love-$"
var result = text.replace(pattern1,'$&2')
result//"xxx2-love-xxx2"
var result = text.replace(pattern1,'$\'')
result//"-love-xxx-love-"