typora-copy-images-to: media ES5和字元串 一、ES5的語法 js在產生的時候,年代比較早,當時的web需求比較少,所以剛開始的js功能比較少,語法沒有特別嚴謹。隨著時代的發展和web應用的普及,js需要更多的功能,以及更嚴謹的語法,所以,js會有版本的升級。第一版的j ...
typora-copy-images-to: media
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、字元串比較
字元串能比較大小,中文漢字也是字元串,中文漢字也能比較大小:
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