摘要:比如,構(gòu)造函數(shù)返回的數(shù)組都是空位。方法方法方法方法方法方法方法方法對(duì)空位的處理則是明確將空位轉(zhuǎn)為。在這些情況下,迭代器關(guān)閉。
原型鏈相關(guān)
最詳盡的 JS 原型與原型鏈終極詳解
isNaN() 和 Number.isNaN() 的區(qū)別 isNaN()是 ES1 規(guī)范;
是全局方法;
如果參數(shù)不是一個(gè) Number 類型,會(huì)先嘗試將參數(shù)轉(zhuǎn)化為數(shù)值,然后對(duì)轉(zhuǎn)換后的結(jié)果進(jìn)行是否是 NaN 的判斷;
Number.isNaN()是 ES6(ES2015) 規(guī)范;
是 Number 對(duì)象的靜態(tài)方法;
只有參數(shù)為 NaN 是才會(huì)返回 true;
JavaScript 中的錯(cuò)誤類型SyntaxError 解析代碼時(shí)發(fā)生的語(yǔ)法錯(cuò)誤;
ReferenceError 對(duì)象是引用一個(gè)不存在的變量時(shí)發(fā)生的錯(cuò)誤;
RangeError 對(duì)象是一個(gè)值超出有效范圍時(shí)發(fā)生的錯(cuò)誤;
一個(gè)數(shù)組長(zhǎng)度為負(fù)數(shù);
Number 對(duì)象的方法參數(shù)超出范圍;
函數(shù)堆棧超過(guò)最大值;
TypeError 對(duì)象是變量或參數(shù)不是預(yù)期類型時(shí)發(fā)生的錯(cuò)誤;
比如:對(duì)字符串、布爾值、數(shù)值等原始類型的值使用 new 命令;
URIError 對(duì)象是 URI 相關(guān)函數(shù)的參數(shù)不正確時(shí)拋出的錯(cuò)誤;
主要涉及 encodeURI()、decodeURI()、encodeURIComponent()、decodeURIComponent()、escape()、unescape()
EvalError eval 函數(shù)沒(méi)有正確執(zhí)行時(shí)拋出的錯(cuò)誤;已經(jīng)不再使用;
Error
自定義錯(cuò)誤可以創(chuàng)建自定義錯(cuò)誤類,讓其集成 Error;
參考鏈接錯(cuò)誤處理機(jī)制
encodeURI 和 encodeURIComponent 的區(qū)別 encodeURI</>復(fù)制代碼
encodeURI("http://example.com/test space")
// http://example.com/test%20space
// 對(duì)整個(gè) URL 進(jìn)行編碼,而 URL 的特定標(biāo)識(shí)符不會(huì)被轉(zhuǎn)碼
encodeURIComponent
</>復(fù)制代碼
encodeURIComponent("http://example.com/test space")
// http%3A%2F%2Fexample.com%2Ftest%20space
// 對(duì)URL中的參數(shù)進(jìn)行編碼,因?yàn)閰?shù)也是一個(gè)URL,如果不編碼會(huì)影響整個(gè)URL的跳轉(zhuǎn)
參考鏈接
百分號(hào)編碼 Percent-encoding
[escape,encodeURI,encodeURIComponent有什么區(qū)別?
](https://www.zhihu.com/questio...
Array.from / 擴(kuò)展運(yùn)算符 ... / rest 參數(shù) ... 概念定義ES6 中的三個(gè)點(diǎn) ... 有兩個(gè)名字:rest 參數(shù) / 擴(kuò)展運(yùn)算符
當(dāng)用在函數(shù)定義時(shí)的形參前面是,稱為 rest 參數(shù)。當(dāng)函數(shù)調(diào)用時(shí),用于接收不確定數(shù)量的參數(shù);
當(dāng)與結(jié)構(gòu)賦值組合使用時(shí),稱為 rest 參數(shù),用于接收剩余的值,存儲(chǔ)在數(shù)組中;
當(dāng)用在字符串或數(shù)組前面時(shí),稱為擴(kuò)展運(yùn)算符,將數(shù)組或字符串進(jìn)行拆解;
Array.fromArray.from 是 Array 對(duì)象的一個(gè)靜態(tài)方法??梢酝ㄟ^(guò)一下方式來(lái)創(chuàng)建數(shù)組對(duì)象:
偽數(shù)組對(duì)象(擁有一個(gè) length 屬性和若干索引屬性的任意對(duì)象);
可迭代對(duì)象;
Array.from 還有一個(gè)可選參數(shù) mapFn,可以在最后生成的數(shù)組上再執(zhí)行一次 map 方法后再返回;也就是說(shuō) Array.from(obj, mapFn, thisArg) 相當(dāng)于 Array.from(obj).map(mapFn, thisArg)
擴(kuò)展運(yùn)算符 ...擴(kuò)展運(yùn)算符是一個(gè)運(yùn)算符,和 Array.from 最大的區(qū)別在于其只能從可迭代對(duì)象中進(jìn)行解構(gòu);
JavaScript 的迭代方法 forEach()讓數(shù)組中每一項(xiàng)做一些事,不能被 break;
返回值:undefined;
map()讓數(shù)組對(duì)每一項(xiàng)進(jìn)行某種計(jì)算后產(chǎn)生一個(gè)新數(shù)組;
返回值:一個(gè)新數(shù)組;
filter()篩選出數(shù)組中符合條件的項(xiàng),組成新數(shù)組;
返回值:一個(gè)新數(shù)組;
reduce()對(duì)累加器和數(shù)組中的每個(gè)元素(從左到右)應(yīng)用一個(gè)函數(shù),將其減少為單個(gè)值;
返回值:函數(shù)累計(jì)處理的結(jié)果;
every()檢測(cè)數(shù)組中的每一項(xiàng)是否都符合條件;
返回值:布爾值;
some()檢測(cè)數(shù)組中是否有任意項(xiàng)符合條件;
返回值:布爾值;
對(duì)數(shù)組空位的處理數(shù)組的空位指,數(shù)組的某一個(gè)位置沒(méi)有任何值。比如,Array構(gòu)造函數(shù)返回的數(shù)組都是空位。
ES5 對(duì)空位的處理
forEach(), filter(), reduce(), every() 和some()都會(huì)跳過(guò)空位。
map()會(huì)跳過(guò)空位,但會(huì)保留這個(gè)值
join()和toString()會(huì)將空位視為undefined,而undefined和null會(huì)被處理成空字符串。
</>復(fù)制代碼
// forEach方法
[,"a"].forEach((x,i) => console.log(i)); // 1
// filter方法
["a",,"b"].filter(x => true) // ["a","b"]
// every方法
[,"a"].every(x => x==="a") // true
// reduce方法
[1,,2].reduce((x,y) => return x+y) // 3
// some方法
[,"a"].some(x => x !== "a") // false
// map方法
[,"a"].map(x => 1) // [,1]
// join方法
[,"a",undefined,null].join("#") // "#a##"
// toString方法
[,"a",undefined,null].toString() // ",a,,"
ES6 對(duì)空位的處理
ES6 則是明確將空位轉(zhuǎn)為undefined。
Array.from 方法會(huì)將數(shù)組的空位,轉(zhuǎn)為 undefined,也就是說(shuō),這個(gè)方法不會(huì)忽略空位;
擴(kuò)展預(yù)算符 ... 也會(huì)將空位轉(zhuǎn)為 undefined;
</>復(fù)制代碼
Array.from(["a",,"b"]);
// ["a", undefined, "b"]
[...["a",,"b"]]
// ["a", undefined, "b"]
copyWithin() 會(huì)連空位一起拷貝;
</>復(fù)制代碼
[,"a",,"b"].copyWithin(2,0)
// [,"a",,"a"]
fill() 將會(huì)視空位為正常的數(shù)組位置;
</>復(fù)制代碼
new Array(3).fill("a");
// ["a", "a", "a"]
for...of 循環(huán)也會(huì)遍歷空位;
</>復(fù)制代碼
let arr = [, ,];
for (let i of arr) {
console.log(1);
}
// 1
// 1
上面代碼中,數(shù)組arr有兩個(gè)空位,for...of并沒(méi)有忽略它們。如果改成map方法遍歷,空位是會(huì)跳過(guò)的。
但是,for...in 是會(huì)直接跳過(guò)空位,不會(huì)進(jìn)行遍歷的,需要特別留意;
entries()、keys()、values()、find()和findIndex()會(huì)將空位處理成undefined。
</>復(fù)制代碼
// entries()
[...[,"a"].entries()] // [[0,undefined], [1,"a"]]
// keys()
[...[,"a"].keys()] // [0,1]
// values()
[...[,"a"].values()] // [undefined,"a"]
// find()
[,"a"].find(x => true) // undefined
// findIndex()
[,"a"].findIndex(x => true) // 0
參考鏈接
數(shù)組的擴(kuò)展
javaScript 循環(huán)語(yǔ)句的對(duì)比 for for...in會(huì)跳過(guò)空值;
將會(huì)遍歷對(duì)象自身的所有可枚舉屬性以及對(duì)象從其構(gòu)造函數(shù)原型中繼承的屬性;
for...in 語(yǔ)句以原始插入順序迭代對(duì)象的可枚舉屬性,不能依賴于迭代的表面有序性;
for...in 不應(yīng)該用于迭代 Array,一是其順序不確定,二是其會(huì)迭代所有對(duì)象和對(duì)象構(gòu)造函數(shù)原型鏈里的可迭代屬性;
for...of不會(huì)跳過(guò)空值;
在可迭代對(duì)象(包括 Array,Map,Set,String,TypedArray,arguments 對(duì)象等等)上創(chuàng)建一個(gè)迭代循環(huán),調(diào)用自定義迭代鉤子,并為每個(gè)不同屬性的值執(zhí)行語(yǔ)句,這里特別留意,Object 不是一個(gè)可迭代對(duì)象;
對(duì)于for...of的循環(huán),可以由break, continue, throw 或return終止。在這些情況下,迭代器關(guān)閉。
for...of 語(yǔ)句遍歷可迭代對(duì)象定義要迭代的數(shù)據(jù);
ES6 中的 Class 一個(gè)問(wèn)題,為何 SubClass.__proto__ === SuperClass?可能的回答:__proto__ 屬性與 ES6 classes 的繼承
再一個(gè)問(wèn)題,ES6 中的 Class到底更接近之前的 Object 還是 Fcnction?經(jīng)過(guò)測(cè)試,確定是 Function;
super的一些小知識(shí)點(diǎn)根據(jù)調(diào)用位置的不同,super 關(guān)鍵字的含義不同;
在子類的構(gòu)造函數(shù)中使用 super(),super代表了父類的構(gòu)造函數(shù),此時(shí),父類構(gòu)造函數(shù)中的 this 指向的是子類;
在子類的實(shí)例方法中使用 super,super指向父類的 prototype 對(duì)象,調(diào)用父類方法時(shí),調(diào)用的是父類的原型鏈上的方法;此時(shí),該方法中的 this 指向的是子類的實(shí)例;
在子類的靜態(tài)方法中使用 super,super指向父類 ,調(diào)用父類方法時(shí),調(diào)用的是父類的靜態(tài)方法;此時(shí),該方法中的 this 指向的是子類;
原生構(gòu)造函數(shù)的繼承對(duì)原生構(gòu)造函數(shù)使用 apply 不會(huì)更改其 this,也就是說(shuō),原生構(gòu)造函數(shù)的 this 無(wú)法綁定,從而導(dǎo)致拿不到內(nèi)部屬性;
究其原因,是因?yàn)?ES5 中的構(gòu)造函數(shù)是先新建子類的實(shí)例對(duì)象 this,再將父類的屬性添加到子類上,由于父類的內(nèi)部屬性無(wú)法獲取,導(dǎo)致無(wú)法繼承原生的構(gòu)造函數(shù);
ES6 允許繼承原生構(gòu)造函數(shù)定義子類,ES6 是先新建父類的實(shí)例對(duì)象 this,然后再用子類的構(gòu)造函數(shù)修飾 this,使得父類的所有行為都可以繼承;
注意:繼承 Object 的子類,會(huì)有一個(gè)行為差異;ES6 改變了 Object 構(gòu)造函數(shù)的行為,一旦發(fā)現(xiàn) Object 方法不是通過(guò) new Object() 這種形式調(diào)用,ES6 規(guī)定 Object 構(gòu)造函數(shù)忽略參數(shù);
修飾器呃,待續(xù)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/95357.html
摘要:然而,雖然先生對(duì)無(wú)所不知,被譽(yù)為世界的愛因斯坦,但他的語(yǔ)言精粹并不適合初學(xué)者學(xué)習(xí)。即便如此,在后面我還是會(huì)建議把當(dāng)做補(bǔ)充的學(xué)習(xí)資源。但目前為止,依然是學(xué)習(xí)編程的好幫手。周正則表達(dá)式,對(duì)象,事件,閱讀權(quán)威指南第,,,章。 既然你找到這篇文章來(lái),說(shuō)明你是真心想學(xué)好JavaScript的。你沒(méi)有想錯(cuò),當(dāng)今如果要開發(fā)現(xiàn)代網(wǎng)站或web應(yīng)用(包括互聯(lián)網(wǎng)創(chuàng)業(yè)),都要學(xué)會(huì)JavaScript。而面對(duì)泛...
摘要:想學(xué)好前端,真的要主動(dòng),然后對(duì)所有的英文文檔耐心一點(diǎn)。在年月日,國(guó)際組織發(fā)布了的第六版,該版本正式名稱為,但通常被稱為或者。自此,每年發(fā)布一次新標(biāo)準(zhǔn)。但保留了用于依賴注入的構(gòu)造函數(shù)參數(shù)類型。必須在構(gòu)造函數(shù)中聲明屬性,而不是在類的代碼體中。 從 TypeScript 到 ES6 到 ES5 在我初學(xué)前端的很長(zhǎng)一段時(shí)間,不愿意碰git,不愿意碰框架,總是嫌麻煩,連ES6也沒(méi)有怎么去弄明白...
摘要:手把手教你做個(gè)人火的時(shí)候,隨便一個(gè)都能賺的盆滿缽滿,但是,個(gè)人沒(méi)有服務(wù)端,沒(méi)有美工,似乎就不能開發(fā)了,真的是這樣的嗎秘密花園經(jīng)典的中文手冊(cè)。涵蓋前端知識(shí)體系知識(shí)結(jié)構(gòu)圖書推薦以及入門視頻教程,全的簡(jiǎn)直不要不要的了。 JavaScript 實(shí)現(xiàn)點(diǎn)擊按鈕復(fù)制指定區(qū)域文本 html5 的 webAPI 接口可以很輕松的使用短短的幾行代碼就實(shí)現(xiàn)點(diǎn)擊按鈕復(fù)制區(qū)域文本的功能,不需要依賴 flash。...
摘要:變量有兩種不同的數(shù)據(jù)類型基本類型,引用類型。知識(shí)一基本類型值就是簡(jiǎn)單的數(shù)據(jù)段引用類型值保存的是對(duì)象的引用,不是實(shí)際的對(duì)象。 ECMAScirpt 變量有兩種不同的數(shù)據(jù)類型:基本類型,引用類型。 基本的數(shù)據(jù)類型有:undefined,boolean,number,string,null. 基本類型的訪問(wèn)是按值訪問(wèn)的,就是說(shuō)你可以操作保存在變量中的實(shí)際的值。JavaScript中除了上面的...
摘要:缺點(diǎn)不符合開閉原則,如果要改東西很麻煩,繼承重寫都不合適。預(yù)防低水平人員帶來(lái)的風(fēng)險(xiǎn)。開閉原則,高拓展性。這里的訂閱者稱為觀察者,而被觀察者稱為發(fā)布者,當(dāng)一個(gè)事件發(fā)生,發(fā)布者會(huì)發(fā)布通知所有訂閱者,并常常以事件對(duì)象形式傳遞消息。 介紹 最近開始給自己每周訂個(gè)學(xué)習(xí)任務(wù),學(xué)習(xí)結(jié)果反饋為一篇文章的輸出,做好學(xué)習(xí)記錄。 這一周(02.25-03.03)我定的目標(biāo)是《JavaScript 模式》...
摘要:特意對(duì)前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 特意對(duì)前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 本以為自己收藏的站點(diǎn)多,可以很快搞定,沒(méi)想到一入?yún)R總深似海。還有很多不足&遺漏的地方,歡迎補(bǔ)充。有錯(cuò)誤的地方,還請(qǐng)斧正... 托管: welcome to git,歡迎交流,感謝star 有好友反應(yīng)和斧正,會(huì)及時(shí)更新,平時(shí)業(yè)務(wù)工作時(shí)也會(huì)不定期更...
閱讀 689·2021-11-25 09:43
閱讀 2959·2021-11-24 10:20
閱讀 1013·2021-10-27 14:18
閱讀 1084·2021-09-08 09:36
閱讀 3391·2021-07-29 14:49
閱讀 1789·2019-08-30 14:07
閱讀 2942·2019-08-29 16:52
閱讀 3055·2019-08-29 13:12
极致性价比!云服务器续费无忧!
Tesla A100/A800、Tesla V100S等多种GPU云主机特惠2折起,不限台数,续费同价。
NVIDIA RTX 40系,高性价比推理显卡,满足AI应用场景需要。
乌兰察布+上海青浦,满足东推西训AI场景需要