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