字符串方法和屬性:
和數(shù)組一樣,字符串也有自己的方法,來幫助我們處理字符串
原始值,比如“Bill Gates”,無法擁有屬性和方法(因?yàn)樗鼈儾皇菍?duì)象)。
但是通過 JavaScript,方法和屬性也可用于原始值,因?yàn)樵趫?zhí)行方法和屬性時(shí) JavaScript 將原始值視為對(duì)象。
字符串長度length:
-
length屬性返回字符串長度
//聲明一個(gè)變量,然后將一個(gè)字符串賦值給它
var text = "hello word";
//聲明一個(gè)變量用來接收length返回的值
var sln = text.length
console.log(sln);
//輸出結(jié)果為:10
總結(jié): 可以看到字符串的長度包含了字符串中的所有內(nèi)容,空格也包含在內(nèi)
查找字符串中的某個(gè)字符:
查找字符首次出現(xiàn)的位置indexOf():
-
indexOf()方法返回字符串中指定文本首次出現(xiàn)的索引(位置)
//聲明一個(gè)變量,然后將一個(gè)字符串賦值給它
var text = "hello word";
//聲明一個(gè)變量用來接收indexOf()返回的值
var sln = text.indexOf("o");
console.log(sln);
//輸出結(jié)果為:4
查找字符最后一次出現(xiàn)的位置lastIndexOf():
- lastIndexOf() 方法返回指定文本在字符串中最后一次出現(xiàn)的索引:
//聲明一個(gè)變量,然后將一個(gè)字符串賦值給它
var text = "hello word";
//聲明一個(gè)變量用來接收lastIndexOf()返回的值
var sln = text.lastIndexOf("o");
console.log(sln);
//輸出結(jié)果為:7
我們?cè)囍樵円粋€(gè)不存在的元素
//聲明一個(gè)變量,然后將一個(gè)字符串賦值給它
var text = "hello word";
//聲明一個(gè)變量用來接收lastIndexOf()返回的值
var sln = text.lastIndexOf("z");
var sln1 = text.indexOf("z");
console.log(sln);
console.log(sln1);
//輸出結(jié)果為:-1
這兩種方法都可以傳入第二個(gè)參數(shù)
//聲明一個(gè)變量,然后將一個(gè)字符串賦值給它
var text = "hello word";
//聲明一個(gè)變量用來接收lastIndexOf()返回的值
var sln = text.lastIndexOf("o",5);//從參數(shù)位置往后查
var sln1 = text.indexOf("l",3);//從參數(shù)位置往前查
console.log(sln);
console.log(sln1);
//輸出結(jié)果為:4 3
總結(jié):
1、字符串可以使用索引,它里面的每個(gè)元素都有相應(yīng)的索引
2、字符串的索引與數(shù)組相同,都是從0開始計(jì)數(shù),且字符串中所有元素都擁有索引,包括空格
3、如果未找到字符,indexOf() 和lastIndexOf()均返回 -1。
4、兩個(gè)方法都可以傳入?yún)?shù)作為查詢起始位置,不同的是,indexOf()方法是從參數(shù)位置向尾部查,而lastIndexOf()方法是從參數(shù)位置向頭部查詢
截取部分字符串:
在字符串方法中有三種截取字符串片段的方法:
slice()方法:
-
slice()提取字符串的某個(gè)部分并在新字符串中返回被提取的部分
看著是不是很熟悉?沒錯(cuò)這就是在數(shù)組中用過的方法,它在字符串中同樣有效
//創(chuàng)建一個(gè)變量并賦值給他一個(gè)字符串
var text = "I love you";
//創(chuàng)建一個(gè)變量用來接收截取到的片段
var str = text.slice(2,6);
console.log(str);//輸出結(jié)果:love
console.log(text);//輸出結(jié)果:I love you
總結(jié):
1、很明顯,與數(shù)組一樣,slice()方法設(shè)置的兩個(gè)參數(shù)分別是開始位置和終止位置,截取的片段從起始索引開始,在終止索引之前結(jié)束.
2、slice()方法將截取到的字符串作為返回值返回,但是并不會(huì)改變?cè)址?br>
3、若忽略第二個(gè)參數(shù),則將截取字符串剩余部分
注意: 與數(shù)組索引一樣,字符串的操作同樣可以將索引設(shè)為負(fù)值,反向查詢
substring()方法:
-substring()類似于slice(),但是substring()方法不能接受負(fù)值索引
//創(chuàng)建一個(gè)變量并賦值給他一個(gè)字符串
var text = "I love you";
//創(chuàng)建一個(gè)變量用來接收截取到的片段
var str = text.substring(2,6);
console.log(str);//輸出結(jié)果:love
console.log(text);//輸出結(jié)果:I love you
總結(jié):
1、它的作用與slice()方法一樣,設(shè)置的兩個(gè)參數(shù)同樣是開始和結(jié)束位置,且并不會(huì)改變?cè)址?br>
2、唯一的區(qū)別就是不能傳負(fù)值,不然負(fù)值將成為0
3、它截取兩個(gè)位置之間的字符,所以對(duì)實(shí)參的先后順序沒有要求.但一般都是按照開始在前結(jié)束在后的習(xí)慣
substr():
-
substr()方法類似于slice(),但是substr()的第二個(gè)參數(shù)是截取字符串的長度(數(shù)量).
//創(chuàng)建一個(gè)變量并賦值給他一個(gè)字符串
var text = "I love you";
//創(chuàng)建一個(gè)變量用來接收截取到的片段
var str = text.substr(2,4);
console.log(str);//輸出結(jié)果:love
console.log(text);//輸出結(jié)果:I love you
//注意,我將實(shí)參換為了 2、4
總結(jié):
1、 同樣是截取字符串,它的兩個(gè)參數(shù)第一個(gè)是開始位置,第二個(gè)是截取長度
2、如果省略第二個(gè)字符,則截取剩下的所有部分
3、第一個(gè)參數(shù)可以傳負(fù)值,從尾部開始計(jì)算位置,但是第二個(gè)參數(shù)不能為負(fù)
4、substr()并不會(huì)改變?cè)址?/p>
連接字符串:
concat():
這個(gè)方法也是和數(shù)組的一樣,前面綁定字符串的變量名,將要拼接進(jìn)來的字符串作為參數(shù)傳進(jìn)來
//創(chuàng)建一個(gè)變量并賦值給他一個(gè)字符串
var text = "I love you";
//創(chuàng)建一個(gè)變量用來接收新的字符串
var str = text.concat("我愛你");
console.log(str);//輸出結(jié)果:I love you我愛你
console.log(text);//輸出結(jié)果:I love you
//新添加的字符串被拼接到了源字符串的后面
還記得嗎?我們?cè)谥暗臅r(shí)候說過,加號(hào)(+)在作用于字符串的時(shí)候是有拼接的作用的,它和concat()方法是等效的,所以我們會(huì)常用加號(hào)(+).
另外,是不是發(fā)現(xiàn)所有的字符串方法都不會(huì)對(duì)原字符串產(chǎn)生影響?我們引用w3school的話:
所有字符串方法都會(huì)返回新字符串。它們不會(huì)修改原始字符串。
正式地說:字符串是不可變的:字符串不能更改,只能替換。
提取字符串字符:
有兩個(gè)提取字符串字符的安全方法:
返回指定位置的字符charAt():
- charAt() 方法返回字符串中指定下標(biāo)(位置)的字符串:
//創(chuàng)建一個(gè)變量并賦值給他一個(gè)字符串
var text = "I love you";
//創(chuàng)建一個(gè)變量用來接收字符
var str = text.charAt(5);
console.log(str);//輸出結(jié)果:e
返回指定位置的Unicode編碼charCodeAt():
- charCodeAt() 方法返回字符串中指定索引的字符 unicode 編碼:
//創(chuàng)建一個(gè)變量并賦值給他一個(gè)字符串
var text = "I love you";
//創(chuàng)建一個(gè)變量用來接收截取到的片段
var str = text.charCodeAt(5);
console.log(str);//輸出結(jié)果:101
將字符串分割并轉(zhuǎn)化為數(shù)組:
- 可以通過 split() 將字符串分割并轉(zhuǎn)換為數(shù)組:
split();其中的參數(shù)傳的是分割字符:
//創(chuàng)建一個(gè)變量并賦值給他一個(gè)字符串
var text = "I love you";
//創(chuàng)建一個(gè)變量用來接收數(shù)組
var str = text.split(" ");
console.log(str);
//輸出結(jié)果:["I", "love", "you"]
實(shí)參傳的是一個(gè)空格,分割的時(shí)候就以空格為分割字符,從空格處分割開
//創(chuàng)建一個(gè)變量并賦值給他一個(gè)字符串
var text = "I love you";
//創(chuàng)建一個(gè)變量用來接收數(shù)組
var str = text.split("");
console.log(str);
//輸出結(jié)果:["I", " ", "l", "o", "v", "e", " ", "y", "o", "u"]
實(shí)參傳的是一個(gè)空串,分割的時(shí)候就會(huì)把每一個(gè)字符都分開,包括空格
//創(chuàng)建一個(gè)變量并賦值給他一個(gè)字符串
var text = "I love you";
//創(chuàng)建一個(gè)變量用來接收數(shù)組
var str = text.split("o");
console.log(str);
//輸出結(jié)果:["I l", "ve y", "u"]
實(shí)參傳的是o,字符串便從o處被分割
刪除字符串兩端的空白符:
trim()方法,此方法不適用于IE8或更低版本,如果想支持IE8,可搭配正則表達(dá)式replace()方法代替:
//創(chuàng)建一個(gè)變量并賦值給他一個(gè)字符串
var text = " I love you ";
//創(chuàng)建一個(gè)變量用來接收新字符串
var str = text.trim();
console.log(str);
//輸出結(jié)果: I love you
字符串兩端的字符已被去除
轉(zhuǎn)換大小寫:
通過toUpperCase()把字符串轉(zhuǎn)換為大寫
//創(chuàng)建一個(gè)變量并賦值給他一個(gè)字符串
var text = "I love you";
//創(chuàng)建一個(gè)變量用來接收新字符串
var str = text.toUpperCase();
console.log(str);
//輸出結(jié)果: I LOVE YOU
通過toLoweCase把字符串轉(zhuǎn)換為小寫:
//創(chuàng)建一個(gè)變量并賦值給他一個(gè)字符串
var text = "I LOVE YOU";
//創(chuàng)建一個(gè)變量用來接收新字符串
var str = text.toUpperCase();
console.log(str);
//輸出結(jié)果: I love you
還有幾個(gè)需搭配正則表達(dá)式
- 這幾個(gè)都需要搭配著正則表達(dá)式來用,所以等講到正則再講這個(gè)
match() 正則匹配
replace() 正則替換
search()
JS中字符串方法有很多,如果上面沒有你需要的,請(qǐng)看這里
數(shù)學(xué)方法和屬性:
這里先介紹一些常用的數(shù)學(xué)方法:Math對(duì)象,它們都是被封裝好的工具,他們很簡單,直接拿來使用就好:
圓周率Math.PI:
- 直接返回圓周率
console.log(Math.PI);
//輸出:
3.141592653589793
返回參數(shù)的絕對(duì)值:
- 使用Math.abs();取絕對(duì)值
console.log(Math.abs(-5));
//輸出結(jié)果為5
數(shù)字的取整
四舍五入Math.round():
- 將傳入的數(shù)字進(jìn)行四舍五入并返回:
console.log(Math.round(2.6));
//輸出3
console.log(Math.round(3.2));
//輸出3
向上去整Math.ceil();
- 若輸入的值小數(shù)點(diǎn)后不等零,則向上舍入,比如1.2向上舍入等于2
console.log(Math.ceil(3.2));
//輸出結(jié)果為:4
向下取整Math.floor():
- 若輸入的值小數(shù)點(diǎn)后不等于零,則舍棄掉小數(shù)點(diǎn)后的數(shù),如3.9向下舍入等于3
console.log(Math.floor(3.9))
//輸出結(jié)果為:3
獲取最大或最小值:
獲取最小值Math.min():
- 使用Math.min()查找參數(shù)列表里的最小值:
var numMin = Math.min(0,15,30,-5,21,350,-70,55)
console.log(numMin);
//輸出結(jié)果為-70
獲取最大值Math.max():
- 使用Math.max()查找參數(shù)列表里的最大值:
var numMax = Math.max(0,15,30,-5,21,350,-70,55)
console.log(numMax);
//輸出結(jié)果為350
創(chuàng)建隨機(jī)數(shù):
創(chuàng)建隨機(jī)數(shù)這個(gè)方法在JS能用到的地方很多,所以這個(gè)是很重要的:
-
Math.random()返回介于 0(包括) 與 1(不包括) 之間的隨機(jī)數(shù):
console.log(Math.random());
//輸出:0.392782796677708
//輸出:0.9383646077609944
//輸出:0.7952964314955755
可以看到,沒錯(cuò)輸出的值都是不同的,位數(shù)也不同,但是這樣的隨機(jī)數(shù)不是我們想要的
怎么才能得到我們想要的隨機(jī)數(shù)呢?我們來看一下:
//我想獲得0-10之間的隨機(jī)數(shù)怎么辦
var num = Math.floor(Math.random()*11);
//創(chuàng)建一個(gè)隨機(jī)數(shù)并乘以11,且向下取整
console.log(num);
//輸出的值:3 10 1 7 8 ...
可以看到,因?yàn)殡S機(jī)數(shù)的值默認(rèn)是0-1之間的小數(shù),所以我們乘以10,就變成了0-10之間的數(shù)了,但是小數(shù)怎么辦呢?我們給他取整
單向上取整的話,就會(huì)變成1-10,單向下取整的話,就會(huì)變成0-9,若是采用四舍五入的方法的話就是0-10.
所以采用向上取整,就要乘以9,向下取整,就要乘以11