js高級(jí)程序設(shè)計(jì)第五章(部分整理)

引用類型

對(duì)象是某個(gè)特定的引用類型的實(shí)例

5.1 Object類型:大多數(shù)引用類型的值都是Object的實(shí)例

  • 對(duì)象屬性可以通過(guò)點(diǎn)或者方括號(hào)訪問(wèn)
alert(person["name"]);
alert(person.name);
//屬性中包含會(huì)導(dǎo)致語(yǔ)法錯(cuò)誤的字符
//或者屬性名使用關(guān)鍵字或者保留字,可以使用方括號(hào)表示法
alert(person["first name"]);

5.2 Array對(duì)象

  • Array instanceof Object //true
  • 數(shù)組每一項(xiàng)都可以保存任何數(shù)據(jù)類型,數(shù)組大小和長(zhǎng)度可以動(dòng)態(tài)調(diào)整

5.2.1 檢測(cè)數(shù)組: Array.isArray()

  • instanceof Array: 頁(yè)面存在多個(gè)框架,不同框架下有不同的全局環(huán)境則有不同版本的Array構(gòu)造函數(shù),一個(gè)框架的數(shù)組傳遞到另一個(gè)框架是此方法會(huì)失效
  • Array.isArray(): es6新增確定是否為數(shù)組能解決上面的問(wèn)題

5.2.2 轉(zhuǎn)換方法

5.2.3 棧方法:(先進(jìn)后出)

  • Array.push()添加任意數(shù)據(jù)到數(shù)組尾部,并返回?cái)?shù)組新長(zhǎng)度
  • Array.pop()移除數(shù)組最后一項(xiàng)并返回這一項(xiàng)的值

5.2.4 隊(duì)列方法:(先進(jìn)先出)

  • Array.push()同上
  • Array.shit()移除第一項(xiàng),并返回該項(xiàng)的值
  • Array.unshit()和push相反,在數(shù)組的前端添加任意數(shù)據(jù),并返回?cái)?shù)組新長(zhǎng)度

5.2.5 重排序方法

  • reverse() 反轉(zhuǎn)數(shù)組的順序,返回排序后的數(shù)組
  • sort() 數(shù)組從小到大排序(升序排序),返回排序后的數(shù)組。此方法對(duì)數(shù)字字符串比較無(wú)效如'10'在'5'前,可以加入自定義比較函數(shù)
function compare(val1, val2) {
  if(val1 < val2) {
    return 1; //1則調(diào)換
  }else if(val1 > val2){
     return -1;
  }else {
    return 0;
  }
}
var arr = [0, 1, 2];
arr.sort(compare);  //[2,1,0]

5.2.6 操作方法

  • Array.concat(arr1, arr2[,arr3.....]);合并多個(gè)數(shù)組,將這些數(shù)組合并且返回合并的數(shù)組。
  • Array.slice(start[, end]);接受一個(gè)或兩個(gè)參數(shù),即返回項(xiàng)的開(kāi)始和結(jié)束位置,返回按位置取得的數(shù)組(可以用負(fù)數(shù)即倒數(shù)第幾個(gè))
  • Array.splice(start, num, data):返回從原數(shù)組刪除的項(xiàng),沒(méi)有刪除則為空數(shù)組
    • start: 開(kāi)始位置
    • num: 刪除數(shù)組內(nèi)num項(xiàng)
    • data: 插入的數(shù)據(jù)
arr1.splice(0, 2); //刪除前兩項(xiàng)
arr1.splice(2, 0, 'red', 'green'); //從位置2開(kāi)始插入'red'和'green'
arr1.splice(2, 1, 'red', 'green'); //刪除當(dāng)前位置2的項(xiàng),后從位置2開(kāi)始插入

5.2.7 位置方法(返回值在數(shù)組中的位置索引)

  • 下面兩個(gè)方法都有2個(gè)參數(shù)要找的值和開(kāi)始位置(可選)
    • indexof(val [, start]);默認(rèn)從頭開(kāi)始,向后找
    • lastIndexOf(val [, start]);默認(rèn)從尾部開(kāi)始,向前找

5.2.8 迭代方法 //以下方法都不會(huì)改變?cè)瓟?shù)組每一項(xiàng)的值

  • every(item, index, array) 對(duì)每一項(xiàng)運(yùn)行指定函數(shù),如果數(shù)組的每一項(xiàng)都返回true,則返回true否則false
  • some(item, index, array) 對(duì)每一項(xiàng)運(yùn)行指定函數(shù),數(shù)組中任一項(xiàng)執(zhí)行函數(shù)后返回true,則返回true否則false
  • filter(item, index, array) 對(duì)每一項(xiàng)運(yùn)行指定函數(shù),返回該函數(shù)會(huì)返回true的項(xiàng)組成的數(shù)組
  • forEach(item, index, array) 對(duì)每一項(xiàng)運(yùn)行指定函數(shù),沒(méi)有返回值
  • map(item, index, array) 對(duì)每一項(xiàng)運(yùn)行指定函數(shù),返回每次調(diào)用的結(jié)果組成的數(shù)組

5.2.9 縮小方法

  • 4個(gè)參數(shù):前一個(gè)值,當(dāng)前值,項(xiàng)的索引,該數(shù)組對(duì)象。這個(gè)函數(shù)返回的任何值都會(huì)作為第一個(gè)參數(shù)自動(dòng)傳給下一項(xiàng)
  • reduce(prev, cur, index, arr) 數(shù)組第一項(xiàng)開(kāi)始從頭到尾
  • reduceRight(prev, cur, index, arr) 數(shù)組最后一項(xiàng)開(kāi)始到頭部
var arr = [1, 2, 3, 4, 5];
var sum = arr.reduce((prev, cur, index, arr)=> {
  return prev + cur;
})
alert(sum);//15

5.3 Date類型

5.4 RegExp類型: js通過(guò)RegExp類型來(lái)支持正則表達(dá)式

  • 創(chuàng)建方式:
    • var expression = /pattern/ attributes; //直接量語(yǔ)法
    • var expression = new RegExp(pattern, attributes);
  • 參數(shù)
    • pattern: 一個(gè)字符串,指定了正則表達(dá)式的模式或者其他正則表達(dá)式
    • attributes: 一個(gè)可選字符串,包含(g, i, m)分別是全局匹配(找到所有匹配并非找到第一個(gè)就停止),執(zhí)行大小寫不敏感, 執(zhí)行多行匹配(到達(dá)第一行末尾時(shí)仍會(huì)找下一行)
    • 拋出異常
      • SyntaxError : pattern非合法的正則表達(dá)式,或者attributes有g(shù), i, m之外的參數(shù)
      • TypeError : 若pattern是RegExp對(duì)象,但沒(méi)有省略attributes參數(shù)
    • 實(shí)例屬性: 獲取正則表達(dá)式各方面信息
      • global: boolean,表示是否設(shè)置g標(biāo)志
      • ignpreCase : boolean , 是否設(shè)置i
      • multiline : boolean 是否設(shè)置m
      • lastIndex: 整數(shù),開(kāi)始搜索下一個(gè)匹配項(xiàng)的字符位置,默認(rèn)0開(kāi)始(匹配一次后lastIndex會(huì)更新成上次匹配成功的地方)
      • source : 返回字面量形式的字符串模板
var re1 = /\[bc\]at/i;
 alert(re1.source); //"\[bc\]at"
var re2 = new RegExp("\\[bc\\]at", "i");
alert(re2.source); //"\[bc\]at"
+ RegExp對(duì)象方法
  - RegExp.compile() 編譯正則表達(dá)式
  - RegExp.exec() 檢索字符串指定的值,返回找到的值,并確定其位置
  - RegExp.test() 檢索字符串指定的值,返回true或者false

5.5 function類型:函數(shù)實(shí)際上是對(duì)象,函數(shù)名實(shí)際也是指向?qū)ο蟮闹羔?,一個(gè)函數(shù)可能多個(gè)名字
5.5.1 沒(méi)有重載
5.5.2 函數(shù)聲明與函數(shù)表達(dá)式
+ 解析器會(huì)優(yōu)先讀取函數(shù)聲明,并使其在執(zhí)行任何代碼前可用(可訪問(wèn)),二函數(shù)表達(dá)式則必須等到解析器執(zhí)行到其所在代碼,才會(huì)被真正解析執(zhí)行

//正常運(yùn)行
alert(get1(10));
function get1(num) {
  return num;
}
//產(chǎn)生錯(cuò)誤
alert(get2(10));
var get2 = function(num) {
  return num;
}

5.5.3 作為值的函數(shù): 函數(shù)可以作為參數(shù)傳遞
+ 若訪問(wèn)函數(shù)的指針而不執(zhí)行的話,必須去掉函數(shù)名后面的那對(duì)圓括號(hào)
5.5.4 函數(shù)內(nèi)部屬性: this 和 arguments
+ arguments:主要用于保存函數(shù)參數(shù),但還有個(gè)callee的屬性,該屬性是一個(gè)指針,指向擁有這個(gè)arguments對(duì)象的函數(shù)

//arguments.callee可以減少遞歸時(shí)和函數(shù)名的耦合
function factorial(n) {
  if (n<=1) { return 1 }
  else { return num * arguments.callee(n-1) }
}
  • this: 引用的是函數(shù)據(jù)以執(zhí)行的環(huán)境對(duì)象
    • 函數(shù)中this到底取何值,是函數(shù)真正被調(diào)用是決定的,定義時(shí)決定不了
  • caller: es6新的函數(shù)對(duì)象屬性: 保存著調(diào)用當(dāng)前很熟的函數(shù)引用
    5.5.5 函數(shù)屬性和方法:函數(shù)是對(duì)象,故函數(shù)也有屬性和方法。
  • 每個(gè)函數(shù)都有兩個(gè)屬性
    • length: 函數(shù)希望接收的命名參數(shù)個(gè)數(shù)
    • prototype:
  • 每個(gè)函數(shù)都包含兩個(gè)非繼承而來(lái)的方法: apply(), call()
    • 作用: 在特定作用域中調(diào)用函數(shù)
    • apply(obj, 參數(shù)數(shù)組): 一個(gè)是在其中運(yùn)行函數(shù)的作用域,另外一個(gè)是參數(shù)數(shù)組(可以是Array實(shí)例也可以是arguments對(duì)象)即需要傳入的參數(shù)。
    • call(obj[, 參數(shù)1, 參數(shù)2...]): 大體同上區(qū)別是參數(shù)要直接傳遞給函數(shù),即逐個(gè)列舉出
    • function.bind(obj): es5新增,創(chuàng)建一個(gè)函數(shù)實(shí)例,其this會(huì)綁定到傳給bind(obj)的object
//二者僅第二參數(shù)不同,
//此中this都為window,因?yàn)楹瘮?shù)sum的執(zhí)行環(huán)境是window
function sum(n1, n2) { return n1 + n2 }
//call
function callSum(n1, n2) {
  return sum.call(this, n1, n2)
}
//apply()
function applySum(n1, n2) {
  return sum.apply(this, arguments)
}
function applySum(n1, n2) {
  return sum.call(this, [n1, n2])
}
//bind()
window.color = 'red';
var o = {color: 'blue'};
function say() {console.log(this.o)}
var newSay = say().bind(o);
newSay(); //輸出 blue 新的函數(shù)實(shí)例的執(zhí)行環(huán)境(this)已經(jīng)是傳給bind的o

5.6 基本封裝類型:每個(gè)包裝類型都映射到對(duì)應(yīng)的基本類型

  • 基本類型: undefined null boolean number string Symbol(new in es6)
  • 引用類型: object

待續(xù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容