ES5/String
嚴格模式(了解)
- 我們都知道
js
是一個相對不很嚴謹?shù)恼Z言 - 而且開發(fā)的時候泌枪,一些代碼也不是很嚴格要求
- 而嚴格模式就是對開發(fā)的時候寫的一些內容做了要求
開啟嚴格模式
-
想開啟嚴格模式吞加,直接在代碼最開始的位置寫上字符串
use strict
<script> 'use strtic' // 下面代碼書寫就要按照嚴格模式來書寫 </script>
嚴格模式的規(guī)則
-
聲明變量必須有
var
關鍵字'use strtic' var num = 100 num2 = 200 // 這個就會報錯
- 之前了解過弛槐,在聲明變量的時候茎截,如果沒有
var
關鍵字知牌,那么按照作用域的規(guī)則會自動定義成全局變量 - 嚴格模式下不可以,會報錯
- 之前了解過弛槐,在聲明變量的時候茎截,如果沒有
-
函數(shù)的行參不可以重復
'use strtic' function fn(p1, p1) {} // 直接就會報錯
- 在非嚴格模式下站超,函數(shù)兩個行參一樣荸恕,是不會報錯的,只不過就是相當于在函數(shù)內部只有一個變量了
- 但是在嚴格模式下會報錯
-
聲明式函數(shù)調用的時候函數(shù)內部沒有 this
'use strtic' function fn() { console.log(this) // undefined } fn()
- 本身死相,全局聲明式函數(shù)在調用的時候融求,函數(shù)內部的
this
是指向window
的 - 在嚴格模式下,是沒有
this
的
- 本身死相,全局聲明式函數(shù)在調用的時候融求,函數(shù)內部的
ES5 中常見的數(shù)組常用方法
- 之前我們講過的數(shù)組常用方法都是
ES3
的方法 - 今天來說一些
ES5
中的方法
indexOf
indexOf
用來找到數(shù)組中某一項的索引-
語法:
indexOf(你要找的數(shù)組中的項)
var arr = [1, 2, 3, 4, 5] // 使用 indexOf 找數(shù)組中的某一項 var index = arr.indexOf(3) console.log(index) // 2
- 我們要找的是數(shù)組中值為 3 的那一項
- 返回的就是值為 3 的那一項在該數(shù)組中的索引
-
如果你要找的內容在數(shù)組中沒有算撮,那么就會返回 -1
var arr = [1, 2, 3, 4, 5] // 使用 indexOf 超找數(shù)組中的某一項 var index = arr.indexOf(10) console.log(index) // -1
- 你要找的值在數(shù)組中不存在双肤,那么就會返回 -1
forEach
和
for
循環(huán)一個作用,就是用來遍歷數(shù)組的-
語法:
arr.forEach(function (item, index, arr) {})
var arr = [1, 2, 3] // 使用 forEach 遍歷數(shù)組 arr.forEach(function (item, index, arr) { // item 就是數(shù)組中的每一項 // index 就是數(shù)組的索引 // arr 就是原始數(shù)組 console.log('數(shù)組的第 ' + index + ' 項的值是 ' + item + '钮惠,原始數(shù)組是', arr) })
-
forEach()
的時候傳遞的那個函數(shù)茅糜,會根據(jù)數(shù)組的長度執(zhí)行 - 數(shù)組的長度是多少,這個函數(shù)就會執(zhí)行多少回
-
map
-
和
forEach
類似素挽,只不過可以對數(shù)組中的每一項進行操作蔑赘,返回一個新的數(shù)組var arr = [1, 2, 3] // 使用 map 遍歷數(shù)組 var newArr = arr.map(function (item, index, arr) { // item 就是數(shù)組中的每一項 // index 就是數(shù)組的索引 // arr 就是原始數(shù)組 return item + 10 }) console.log(newArr) // [11, 12, 13]
filter
和
map
的使用方式類似,按照我們的條件來篩選數(shù)組-
把原始數(shù)組中滿足條件的篩選出來,組成一個新的數(shù)組返回
var arr = [1, 2, 3] // 使用 filter 過濾數(shù)組 var newArr = arr.filter(function (item, index, arr) { // item 就是數(shù)組中的每一項 // index 就是數(shù)組的索引 // arr 就是原始數(shù)組 return item > 1 }) console.log(newArr) // [2, 3]
- 我們設置的條件就是
> 1
- 返回的新數(shù)組就會是原始數(shù)組中所有
> 1
的項
- 我們設置的條件就是
創(chuàng)建字符串(了解)
我們創(chuàng)建字符串也分為兩種方法 字面量 和 構造函數(shù)
-
字面量:
var str = 'hello'
-
構造函數(shù)創(chuàng)建
var str = new String('hello')
ASCII 字符集(了解)
- 我們都知道缩赛,計算機只能存儲
0101010
這樣的二進制數(shù)字 - 那么我們的
a ~ z
/A ~ Z
/$
/@
/… 之類的內容也有由二進制數(shù)字組成的 - 我們可以簡單的理解為耙箍,
a ~ z
/A ~ Z
/$
/@
/… 之類的內容都有一個自己的編號,然后在計算機存儲的時候酥馍,是存儲的這些編號辩昆,我們看的時候,也是通過這些編號在解析成我們要看到的內容給我們看到 - 上面的就是 ASCII 對照表旨袒,我們只需要知道他是這么存儲的就好
unicode 編碼
- 我們看到了汁针,
ASCII
只有這128
個字符的編碼結構 - 但是因為
ASCII
出現(xiàn)的比較早,而且是美國發(fā)明的砚尽,早先時候這些內容就夠用了 - 因為存儲一些英文的內容施无,傳遞一些英文的文章什么的都夠用了
- 那么對于這個世界來說肯定是不夠用的
- 因為我們的漢字沒有辦法存儲,包括一些其他國家的語言也沒有辦法存儲
- 所以就出現(xiàn)了
unicode
編碼必孤,也叫(萬國碼猾骡,統(tǒng)一碼) -
unicode
對照表就是一個和ASCII
一樣的對照表,只不過變得很大很大敷搪,因為存儲的內容特別的多 - 而且包含了世界上大部分國家的文字兴想,所以我們的文字和字符現(xiàn)在在存儲的時候,都是按照
unicode
編碼轉換成數(shù)字進行存儲 - 我們的
UTF-8
就是一種8 位的 unicode
字符集
字符串的常用方法
- 我們操作字符串赡勘,也有一堆的方法來幫助我們操作
- 字符串和數(shù)組有一個一樣的地方嫂便,也是按照索引來排列的
charAt
-
charAt(索引)
是找到字符串中指定索引位置的內容返回var str = 'Jack' // 使用 charAt 找到字符串中的某一個內容 var index = str.charAt(2) console.log(index) // c
- 因為字符串也是按照索引進行排列的,也是同樣從 0 開始
- 所以索引 2 的位置就是
c
-
如果沒有對應的索引狮含,那么就會返回 空字符串
var str = 'Jack' // 使用 charAt 找到字符串中的某一個內容 var index = str.charAt(10) console.log(index) // ''
- 這個字符串根本沒有索引 10 的位置
- 所以就會返回一個空字符串
''
charCodeAt
-
charCodeAt(索引)
就是返回對應索引位置的unicode
編碼var str = 'Jack' // 使用 charAt 找到字符串中的某一個內容 var index = str.charCodeAt(0) console.log(index) // 74
- 因為
J
在unicode
對照表里面存儲的是 74,所以就會返回 74
- 因為
indexOf
-
indexOf
就是按照字符找到對應的索引var str = 'Jack' // 使用 indexOf 找到對應的索引 var index = str.indexOf('J') console.log(index) // 0
- 因為字符
J
在字符串Jack
中的索引位置是 0 - 所以會返回 0
- 因為字符
substring
substring
是用來截取字符串使用的-
語法:
substring(從哪個索引開始曼振,到哪個索引截止)
几迄,包含開始索引,不包含結束索引var str = 'hello' // 01234 // 使用 substring 截取字符串 var newStr = str.substring(1, 3) console.log(newStr) // el
- 從索引 1 開始冰评,到索引 3 截止映胁,包含前面的索引不包含后面的索引
- 所以返回的是 el
substr
substr
也是用來截取字符串的-
語法:
substr(從哪個索引開始,截取多少個)
var str = 'hello' // 01234 // 使用 substr 截取字符串 var newStr = str.substr(1, 3) console.log(newStr) // ell
- 這個方法和
substring
不一樣的是甲雅,第二個參數(shù)是截取多少個 - 從索引 1 開始解孙,截取 3 個,所以得到的是
ell
- 這個方法和
toLowerCase 和 toUpperCase
-
這兩個方法分別使用用來給字符串轉成 小寫字母 和 大寫字母 的
var str = hello // 使用 toUpperCase 轉換成大寫 var upper = str.toUpperCase() console.log(upper) // HELLO // 使用 toLowerCase 轉換成小寫 var lower = upper.toLowerCase() console.log(lower) // hello
強化練習
隨機生成一個五位以內的數(shù)抛人,然后輸出該數(shù)共有多少位弛姜,每位分別是什么
敏感詞過濾
// 比如我要過濾 "SM"
var str = 'asdasdSMasdasdasdSMsdasdasdSMsadasd'
// 需要結果
// asdasd**asdasdasd**sdasdasd**
數(shù)字字母混合驗證碼
已知字符串“a,a,b,c,c,d”汁政,統(tǒng)計每個字符出現(xiàn)的次數(shù)趴久,結果顯示 a 2、b 1塘辅、c 2、d1荠商,去掉重復的字符寂恬,使結果顯示 abcd