js字符串總結
ES5和字符串
一、ES5的語法
js在產生的時候,年代比較早,當時的web需求比較少,所以剛開始的js功能比較少,語法沒有特別嚴謹。隨著時代的發展和web應用的普及,js需要更多的功能,以及更嚴謹的語法,所以,js會有版本的升級。第一版的js是ECMA一開始統一了標準以后的版本。我們現在的所使用的語法,大多是ECMAScript版本3的語法,簡稱es3。到目前為止,已經有了es7,8,9,甚至es10 的版本了。近幾年,基本每年都會有新的版本更新。
每個版本的更新,都需要瀏覽器支持才能運行,但瀏覽器不會在js更新之后,立馬更新。所以有的版本出來之后,需要在很長時間之后,瀏覽器才會兼容他。到目前為止,我們公認,es5是兼容性最好的版本。
es5比起我們所正在使用的es3,語法沒有什么變化,增加了一個嚴格模式,還有一些數組的方法。
1、嚴格模式
1.1、概念
由于js的作用域和隱式聲明變量等語法會造成很多預想不到的錯誤,所以ES5中新增了一個嚴格模式的語法,用于嚴格規范代碼的書寫。
1.2、語法
使用語法:
"use strict";
使用說明:
要放在代碼的最前面,也就是在script標簽中的第一行或者某個函數中的第一行,否則會失效
嚴格模式可以規范當前script標簽或者當前函數中的代碼,不能規范別的script標簽中的代碼和別的函數
1.3、作用
不允許隱式聲明變量
禁止函數中的形參重名
禁止函數中的this代表window
1.4、好處
可以讓代碼更加規范
可以讓代碼運行起來更快,提高運行效率
二、字符串
1、字符串的重新認識
字符串定義:
var str = ''; var str = "";
1.1、字符串長度
字符串中字符的個數:字符串.length
1.2、字符串取下標
字符串中獲取某個字符的時候,可以根據下標來獲取:
var str = "abcdef"; var s = str[1] console.log(s) // 'b' var s1 = str[0] console.log(s1) // 'a'
所以字符串也是可以進行遍歷的:
var str = "abcdef"; for(var i=0;i<str.length;i++){ console.log(str[i],i) }
1.3、字符串只讀
那字符串是否也可以像數組一樣,通過下標更改其中的某個字符呢?
var str = 'abcdef'; str[str.length] = 'g' str[0] = 'g' console.log(str) // abcdef
操作后,字符串并沒有新增和更改。
因為字符串是只讀數據,只能讀,不能增刪改。
字符串可以進行比較,我們在前面的時候,有過這樣的比較:
console.log('12'>'5') // false console.log('12'<'5') // true
字符串可以比較,但是規則跟數字比較是不一樣的。
字符串比較的規則是逐字符進行比較,大小由阿斯克碼來決定。
2、阿斯克碼
2.1、概念
計算機內部只能識別2進制數據,不能識別字母等字符。
為了能讓計算機識別字符,科學家制定了一個對照表,當輸入一段2進制指令的時候,就能顯示成某個字符。
這個對照表叫做阿斯克碼表,其中包含了128個常用字符跟2進制的對照關系。
通過阿斯克碼表,我們可以得出一些字符串比較的規律:
字母比數字大
小寫字母比大寫字母大
字母越靠后越大
2.2、字符串比較
字符串能比較大小,中文漢字也是字符串,中文漢字也能比較大?。?/span>
console.log('我'>'你') // true
console.log('你'>'我') // false
中文漢字的大小由unicode來決定。
阿斯克碼總共128個,包含符號、大小寫英文字母、數字。阿斯克碼是由美國人創建的,所以對于英文的支持非常好。后來隨著計算機的普及,各個國家在使用計算機的時候,沒辦法使用本國文字,這樣用起來非常困難。所以眾多國家的科學家一起制定了一個更大的對照表,包含各個國家的文字符號,所以稱之為萬國碼,也叫作unicode。
其實unicode就是更大的阿斯克碼。
3、字符串方法
charCodeAt - 根據指定下標獲取對應的字符的阿斯克碼
var str = 'abcdef'; // 獲取下標為3的字符的阿斯克碼 var res = str.charCodeAt(0); // 參數為指定的下標 console.log(res); // 97
String.fromCharCode - 根據指定的阿斯克碼得到對應的字符
// 獲取98對應的字符 var res = String.fromCharCode(98); // 參數為指定的阿斯克碼 console.log(res); // b
indexOf - 查找字符或子字符串在大字符串中第一次出現的位置
var str = 'i love you'; // 找到o字符在str中第一次出現的位置 var s = str.indexOf('o'); // 參數為要查找的字符 console.log(s); // 3 var s = str.indexOf('o',4); // 參數2為開始查找的下標 console.log(s) // 8 var s = str.indexOf('a') // 查找a字符在字符串中第一次出現的下標 console.log(s) // -1 - 找不到就返回-1
lastIndexOf - 查找字符在字符串中最后一次出現的下標
var str = 'i love you'; // 找到o字符在str中最后一次出現的位置 var s = str.lastIndexOf('o'); console.log(s); // 8 var s = str.lastIndexOf('o',7) // 將下標7當做字符串末尾,查找字符o在字符串中最后一次出現的下標 console.log(s) // 3 var s = str.lastIndexOf('a') console.log(s) // -1 - 找不到就返回-1
slice - 截取字符串
var str = 'abcdef'; // 從下標1截取到下標4 var s = str.slice(1,4) // 參數1是開始截取的下標,參數2是截取的結束下標 console.log(s) // bcd - 結果中不包含結束下標對應的字符 var s = str.slice(1) // 省略第二個參數,默認能截取到字符串末尾 console.log(s) // bcdef var s = str.slice(-3,-1) // 下標可以使用負數表示,-3表示倒數第3個字符,-1表示倒數第1個字符 console.log(s) // def var s = str.slice(-1,-3) // 如果開始下標比結束下標大,會截取到空 console.log(s) // ''
split - 將字符串使用指定的分隔符分割為數組
var str = 'a-b-c-d'; var arr = str.split('-') // 參數為分隔符,使用-將字符串分割為一個數組 console.log(arr) // ['a','b','c','d'] var arr = str.split('-',3) // 參數2表示數組中要保留前幾個元素 console.log(arr) // ['a','b','c'] var str = 'abcd'; var arr = str.split() // 省略了分隔符,默認就不分割,將整個字符串當做一個元素放在數組中 console.log(arr) // ['abcd'] var arr = str.split('') console.log(arr) // ["a", "b", "c", "d"]
replace - 使用新字符串將字符串中某一部分替換掉
var str = '你的頭發還好嗎?'; str = str.replace('頭發','眉毛') // 參數1是被替換的字符串中的部分,參數2是新內容 console.log(str) // '你的眉毛還好嗎?' str = str.replace('','哈哈') // 參數1為空,就會將新內容添加到原字符串的最前面 console.log(str) // '哈哈你的眉毛還好嗎?' trim - 去除字符串兩端空白 var str = ' aaa '; str = str.trim() console.log(str) // 'aaa' - 左右兩端的空白被去掉了 str = str.trimLeft() // 去除左邊的空白 console.log(str) // 'aaa ' str = str.trimRight() // 去除右邊的空白 console.log(str) // ' aaa'
toUpperCase - 將字符串中字母轉為大寫
var str = 'i love you'; str = str.toUpperCase() console.log(str) // 'I LOVE YOU' toLowerCase - 將字符串中字母轉為小寫 var str = 'I LOVE YOU'; str = str.toLowerCase() console.log(str) // 'i love you'
substr - 截取字符串
var str = 'abcdef'; str = str.substr(1,3) // 參數1是開始截取的下標,參數2是截取的字符串長度 console.log(str) // bcd str = str.substr(1) // 省略參數2默認截取到字符串末尾 console.log(str) // bcdef str = str.substr(-4,2) // 開始截取的下標可以用負數表示 console.log(str) // 'cd' str = str.substr(1,20) // 長度超出最大下標,就相當于省略了參數2 console.log(str) // bcdef
substring - 截取字符串
var str = 'abcdef' str = str.substring(1,4) // 參數1是開始截取的下標,參數2是結束下標 console.log(str) // bcd - 結果不包含結束下標對應的字符 str = str.substring(1) // 省略參數2,默認截取到末尾 console.log(str) // bcdef str = str.substring(1,1) // 開始下標和結束下標相等就截取到空字符串 console.log(str) // '' str = str.substring(4,1) // 開始下標大于結束下標,就先交換兩個參數位置,然后再截取 console.log(str) // 'bcd' str = str.substring(-5,4) // 開始下標或結束下標是負數,就先替換為0,然后開始截取 console.log(str) // abcd
startsWith - 判斷字符串是否以某個字符或小字符串開頭
var str = 'abcdef' var bool1 = str.startsWith('a') // true var bool2 = str.startsWith('ab') // true var bool3 = str.startsWith('aa') // false
endsWith - 判斷字符串是否以某個字符或小字符串結尾
var str = 'abcdef' var bool1 = str.endsWith ('f') // true var bool2 = str.endsWith ('ef') // true var bool3 = str.endsWith ('ff') // false
includes - 判斷字符串中是否包含某個字符
var str = 'abcdef' var bool1 = str.endsWith ('cd') // true var bool2 = str.endsWith ('f') // true var bool3 = str.endsWith ('acd') // false