這是基礎(chǔ)版的第二天,數(shù)據(jù)類型就像是java中的內(nèi)置對象與數(shù)據(jù)類型一樣,對于語法的一個基礎(chǔ)架構(gòu)
JavaScript有6中數(shù)據(jù)類型 (ES6 又新增了 Symbol 和 BigInt 數(shù)據(jù)類型,先不講述)
- 數(shù)值 number
- 字符串 string
- 布爾值 boolean
- undefined 聲明定義未賦值
- null 聲明賦空值
- 對象 object
對象分為 函數(shù)function 數(shù)組array 對象object
數(shù)據(jù)類型判斷
- typeof (數(shù)組,null,object返回都是'object')
- instanceof (原本是判斷對象與構(gòu)造函數(shù)關(guān)系,所以右側(cè)必須是首字母大寫的類型)
- Object.prototype.toString.call() (原本的tostring方法返回[object Object]改變this指針,得到的[object 首字母大寫的類型])
null與undefined
之所以放在開頭講述就是因為下面的類型都是具象的,這兩個對于初學(xué)者比較抽象
- undefined
聲明未賦值
var x; (x是undefined類型,沒有值) - null
聲明且賦空值
var y = null; (y是null類型,且值為null,意思是空值)
注:
- 當(dāng)出現(xiàn)undefiend的時候要注意:
變量是否在相應(yīng)的作用域中有賦值
對象訪問時,上級的訪問是否存在 - 當(dāng)出現(xiàn)null的時候要注意:
是否是后端傳遞的,可能格式需要溝通轉(zhuǎn)換
布爾值與數(shù)值
-
布爾值boolean
只有true與false,主要就是邏輯判斷結(jié)果,對應(yīng)著計算機(jī)底層的01編制強(qiáng)烈建議,搞編程的朋友們,不要腦子中全是是非對錯,多一些輻射的可能性,可以讓你的生活更加充實!
-
數(shù)值number
- 正負(fù)0,是不同的,64位浮點數(shù)的符號位不同
- NaN,類型是number,但是數(shù)值不是數(shù)字
判斷方式只有 isNaN(),不等于自己 - 正負(fù)Infinity
數(shù)值正向溢出(overflow)瘾杭、負(fù)向溢出(underflow)
判斷方式只有isFinite()
注:
數(shù)字相關(guān)的方法:
- parseInt('參數(shù)',進(jìn)制)
- parseFloat(參數(shù)); 將參數(shù)轉(zhuǎn)換成小數(shù)勘畔,只認(rèn)識一個小數(shù)點
布爾值六大0值:
false 0 null undefined NaN ‘’(空字符串)
內(nèi)置的數(shù)學(xué)方法:
Math.floor(3.999) 向下取整 去掉小數(shù)部分
Math.ceil(3.001)) 向上取整 只要有小數(shù)就進(jìn)位
Math.max(1, 2, 36, 9) 取參數(shù)的最大值
Math.min(1, 2, 36, 9)) 取參數(shù)的最小值
Math.floor(Math.random() 取(0,1]的隨機(jī)數(shù)
字符串
轉(zhuǎn)義字符
1.\n :換行符
2.\t :制表符
3.' :單引號
4." :雙引號
5.\ :反斜杠字符串屬性
1.length長度
2.下標(biāo)(index)
str[index] str.charCodeAt(index)
3.字符串就是一個字符數(shù)組轉(zhuǎn)碼方式
1.Base64(原生攜帶的)
btoa():任意值轉(zhuǎn)為 Base64 編碼
atob():Base64 編碼轉(zhuǎn)為原來的值
2.Unicode(語法攜帶的)
str.charCodeAt(index) 字符轉(zhuǎn)unicode編碼
String.fromCharCode(unicode編碼值) Unicode編碼值轉(zhuǎn)字符串
注:
字符串常用方法:
1. 查找:
字符串.indexOf(要查找的字符, 查找的起始位置); 從左向右找
字符串.lastIndexOf(要查找的字符, 查找的起始位置); 從右向左找
- 截取:
字符串.substring(起始下標(biāo), 結(jié)束下標(biāo)),不含結(jié)束下標(biāo)
字符串.slice(起始下標(biāo), 結(jié)束下標(biāo))吴叶,不含結(jié)束下標(biāo),建議使用
字符串.substr(起始下標(biāo), 截取的個數(shù));,知道具體要截取的個數(shù),挺方便的 - 轉(zhuǎn)大小寫:
字符串.toUpperCase() 轉(zhuǎn)大寫
字符串.toLowerCase() 轉(zhuǎn)小寫 - 去首尾空格:
字符串.trim(),去除字符串左右空格,IE8及以下不支持(正則方式解決)
5.字符串拆分:
字符串.split(分隔符)
6.最強(qiáng)大的方法splice (刪除,添加,替換)
字符串.replace(被替換的字符, 新的字符串)衡创,返回被替換以后的字符串虚青,不影響原字符串
數(shù)組
- 數(shù)組屬性
1.length長度
2.下標(biāo)(index)
arr[index]
3.數(shù)組就是一個key為數(shù)字的對象 - 數(shù)組的特殊運算符
1.in
字符串 in 數(shù)組 ,判斷數(shù)組的key中是否含有該字符串
2.for( in )遍歷
借助for循環(huán)與in形成的迭代方式
注:
數(shù)組常用方法:
1. 棧操作:
數(shù)組.push(參數(shù)),向數(shù)組的尾部添加海诲,返回數(shù)組的長度
數(shù)組.unshift(參數(shù)), 向數(shù)組的頭部添加檩互,返回數(shù)組的長度
數(shù)組.pop()特幔,刪除數(shù)組最后一項,返回被刪除的項
數(shù)組.shift()闸昨,刪除數(shù)組第一項蚯斯,返回被刪除的項
- 最強(qiáng)大的splice方法 (刪除,添加,替換)
數(shù)組.splice(起始位置, 要刪除的個數(shù), 要添加的項...),會修改原數(shù)組饵较,也會返回新數(shù)組
增(n,0,添加項列表)
刪(n,m)
改(n,m,修改后的項)拍嵌;先刪再加就是修改 - 數(shù)組排序:
數(shù)組.sort() (可以自定義排序規(guī)則)
4.數(shù)組合并:
數(shù)組.concat(參數(shù), ...),將參數(shù)拼接到數(shù)組中循诉,返回新數(shù)組横辆,不影響原數(shù)組
5.數(shù)組項反轉(zhuǎn):
數(shù)組.reverse(),反轉(zhuǎn)數(shù)組打洼,返回反轉(zhuǎn)以后的數(shù)組龄糊,并修改原數(shù)組
6.數(shù)組查詢:
數(shù)組.indexOf(要查找的項[, 查找的起始位置])
數(shù)組.lastIndexOf(要查找的項[, 查找的起始位置])
7.數(shù)組截取:
數(shù)組.slice(起始下標(biāo), 結(jié)束下標(biāo)),數(shù)組截取募疮,不影響原數(shù)組炫惩,返回截取的新數(shù)組
8.數(shù)組類型判斷(類方法):
Array.isArray()
9.數(shù)組迭代方法:
數(shù)組.forEach(function (item, index, array) { });循環(huán)數(shù)組(沒有返回值),代替for循環(huán)
數(shù)組.map(function (item, index, array) { });循環(huán)數(shù)組阿浓,返回每次函數(shù)調(diào)用的結(jié)果組成的一個新數(shù)組(可以進(jìn)行邏輯與算術(shù)操作)
數(shù)組.filter(function (item, index, array) { });循環(huán)數(shù)組他嚷,返回每次函數(shù)調(diào)用的結(jié)果為true的項組成的一個新數(shù)組(過濾)
數(shù)組.every(function (item, index, array) { });循環(huán)數(shù)組,如果每次函數(shù)調(diào)用結(jié)果都為true,則返回true
數(shù)組.some(function (item, index, array) { });循環(huán)數(shù)組筋蓖,函數(shù)調(diào)用只要有一個為true卸耘,則結(jié)果為true
數(shù)組.find(function (item, index, array){}); 循環(huán)數(shù)組,條件返回true粘咖,則把對應(yīng)的item返回蚣抗,否則返回undefined
數(shù)組.findIndex(function (item, index, array){}); 循環(huán)數(shù)組,條件返回true瓮下,則把對應(yīng)的item的下標(biāo)返回翰铡,否則返回-1
10.數(shù)組轉(zhuǎn)字符串
數(shù)組.join('連接符'),數(shù)組按照連接符連接
11.數(shù)組求和
數(shù)組.reduce(function (
sum, // 累積變量讽坏,必須
newVal, // 當(dāng)前變量锭魔,必須
newIndex, // 當(dāng)前位置,可選
array // 原數(shù)組路呜,可選
) { .... })
對象
現(xiàn)實世界你唯唯諾諾,虛擬世界你桃花滿身,對象new一個就來了
對象屬性
1.屬性
對象.屬性 對象{屬性}
2.對象就是一個key-value的鍵值對集合對象的特殊運算符
1.in
字符串 in 對象 ,判斷對象的key中是否含有該字符串
2.for( in )遍歷
借助for循環(huán)與in形成的迭代方式
注:
對象常用方法:
1. 屬性查看(類級方法)
Object.keys(對象),返回一個屬性組成的數(shù)組
Object.getOwnPropertyNames(),返回一個屬性名組成的數(shù)組
- 屬性權(quán)限配置
Object.defineProperty(對象, 屬性, {配置內(nèi)容});
Object.getOwnPropertyDescriptor(obj,屬性名)方法可以獲取屬性描述對象
函數(shù)
-
函數(shù)兩種表現(xiàn)形式
1.函數(shù)聲明式:function xxx(){}
2.函數(shù)表達(dá)式:(本質(zhì)上是變量賦值)
let xxx = function(){}
函數(shù)提升
1.遇到function會提升到作用域頂部
2.函數(shù)與變量同名,函數(shù)會覆蓋變量
3.同名函數(shù),順序在后覆蓋順序在前-
函數(shù)的基本信息
1.函數(shù)參數(shù)
實參與形參一一對應(yīng),沒有傳遞則為undefined
形參可以有默認(rèn)值,實參可以有缺省值
形參個數(shù)未知,可以使用arguments- 函數(shù)返回值
函數(shù)的調(diào)用結(jié)果,用于后續(xù)的處理
- 函數(shù)返回值
- 函數(shù)作用域
先從函數(shù)中尋找變量,沒有再逐層往上尋找到全局,全局沒有就是undefined
注:
函數(shù)進(jìn)階:
1. 回調(diào)函數(shù): callback
通常是一種初步解決異步的方式
2. 自執(zhí)行函數(shù)(匿名函數(shù)): 做一些檢測等嵌入式操作(防止對于原代碼有影響)
(function () { })();
3.閉包
函數(shù)return嵌套函數(shù)
內(nèi)部函數(shù)可以讀取外部函數(shù)的變量迷捧、參數(shù)或者函數(shù)
這個內(nèi)部函數(shù)在包含它的外部函數(shù)外面被調(diào)用
function xxx(){
return function(){
}
}
注:
閉包能記住它的誕生環(huán)境,這些變量會一直存在內(nèi)存中
如果大量的數(shù)據(jù)被緩存胀葱,可能造成內(nèi)存泄漏漠秋,在使用閉包的時候要慎重。
閉包溝通函數(shù)內(nèi)部和外部的橋梁,緩存數(shù)據(jù)巡社,延伸變量的作用范圍膛堤。
4.回調(diào)函數(shù): 一些復(fù)雜的邏輯
自己調(diào)用自己,但必須有遞歸出口
function xxx(){
//遞歸出口判斷
if(){
xxx()
}
}