摘要:寫在前面本文記錄的是我不熟悉或者我認(rèn)為值得注意的地方,并不是書上知識點(diǎn)的概括第章變量作用域和內(nèi)存問題對象是按引用傳遞的我理解的是傳值其實(shí)傳的是一個指針,該指針指向內(nèi)存中的某個對象。
寫在前面
本文記錄的是我不熟悉或者我認(rèn)為值得注意的地方,并不是書上知識點(diǎn)的概括
第4章 變量、作用域和內(nèi)存問題對象是按引用傳遞的(我理解的是傳值其實(shí)傳的是一個指針,該指針指向內(nèi)存中的某個對象)。舉例如下:
const a = {name: "aaa"} const b = a // 這時候a和b其實(shí)指向的是同一個對象 console.log(b.name) // aaa b.name = "bbb" console.log(b.name) // bbb console.log(a.name) // bbb 在改變b時a也被改變了
對于簡單的對象(屬性的值都為基本數(shù)據(jù)類型),賦值時采用const b = {...a}或者const b = Object.assign({}, a)可以使得b中的對象是一個新對象
Lodash提供了cloneDeep()函數(shù)用于深拷貝
對象按引用傳遞是因?yàn)檫@樣比較節(jié)約內(nèi)存(畢竟多個對象其實(shí)只存了一份嘛),弊端就是容易引起不被希望的變化。
JS具有自動垃圾回收機(jī)制,開發(fā)人員不用關(guān)心內(nèi)存使用問題,其原理是找出不再繼續(xù)使用的變量,釋放其占用的內(nèi)存
最常用的回收方式是標(biāo)記清除,另一個不太常見的是引用計數(shù)
在引用計數(shù)中,無法處理循環(huán)引用(對象a中包含指向b的指針,對象b中也包含指向a的指針),舉例如下
function problem() { const a = {} const b = {} a.obj = b b.obj = a }
可以通過在函數(shù)結(jié)尾斷開引用來解決循環(huán)引用的問題,如下
function problem() { const a = {} const b = {} a.obj = b b.obj = a // 別的啥啥操作 // 設(shè)為null即可 a.obj = null b.obj = null }
優(yōu)化內(nèi)存占用:無用的數(shù)據(jù)將其值設(shè)為null
第5章 引用類型引用類型的值(對象)是引用類型的一個實(shí)例
新對象是new操作符后面跟一個構(gòu)造函數(shù)來創(chuàng)建的
數(shù)組的sort()方法默認(rèn)是按從小到大排序,會根據(jù)每一項(xiàng)的toString()方法得到的字符串進(jìn)行排序。由于是比較的是字符串,在大多數(shù)情況下,排序結(jié)果不是我們期望的(比如"10"<"5"),我們需要自己去寫一個排序函數(shù)傳給sort()
數(shù)組的concat()可以接受多個參數(shù),如下
const a = [1, 2] const b = a.concat(3, [4, 5]) console.log(b) // [1, 2, 3, 4, 5]
數(shù)組的splice()用于在數(shù)組中插入一個或者多個值,如下
const a = [1, 4, 5] a.splice(1, 0, 2, 3) // 接收的參數(shù)依次為 index,要刪除的元素個數(shù),要插入的元素們 console.log(a) // [1, 2, 3, 4, 5]
所以數(shù)組的splice()也可用于替換數(shù)組中的某些項(xiàng),如下
const a = [1, 2, 3, 4, 5] a.splice(1, 2, 22, 33) console.log(a) // [1, 22, 33, 4, 5]
由于函數(shù)也是對象,所以函數(shù)名其實(shí)是一個指向函數(shù)對象的指針
定義一個函數(shù)可以用函數(shù)聲明 function funcName() {}或者函數(shù)表達(dá)式 const func = function() {}, 建議用函數(shù)表達(dá)式定義函數(shù),好處是定義之后不可被修改,也不會存在函數(shù)聲明提升
函數(shù)內(nèi)部有兩個特殊對象,arguments和this,arguments是一個類數(shù)組對象,包含著所有傳入函數(shù)中的參數(shù),this指向的是函數(shù)執(zhí)行的環(huán)境對象
字符串的toLocaleLowerCase()是針對地區(qū)作了特殊處理的(不同地區(qū)對于某些值的轉(zhuǎn)換規(guī)則會有些不一樣),相對于toLowerCase()來說更安全
完。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/89134.html
摘要:寫在前面本文記錄的是我不熟悉或者我認(rèn)為值得注意的地方,并不是書上知識點(diǎn)的概括。再就是畫圖這種。與瀏覽器沒有依賴關(guān)系。 寫在前面 本文記錄的是我不熟悉或者我認(rèn)為值得注意的地方,并不是書上知識點(diǎn)的概括。 第1章 JavaScript簡介 JS誕生時間:1995年(好年輕...) JS誕生背景:表單數(shù)據(jù)合法性由服務(wù)端驗(yàn)證的用戶體驗(yàn)不好,希望能在客戶端進(jìn)行驗(yàn)證 JS現(xiàn)在用處:如果沒有...
摘要:表示應(yīng)該立即下載腳本,但不應(yīng)妨礙頁面中的其他操作可選。表示通過屬性指定的代碼的字符集。表示腳本可以延遲到文檔完全被解析和顯示之后再執(zhí)行。實(shí)際上,服務(wù)器在傳送文件時使用的類型通常是,但在中設(shè)置這個值卻可能導(dǎo)致腳本被忽略。 第1章 JavaScript 簡介 雖然JavaScript和ECMAScript通常被人們用來表達(dá)相同的含義,但JavaScript的含義比ECMA-262要多得多...
摘要:包括元素的高度上下內(nèi)邊距上下邊框值,如果元素的的值為那么該值為。該值為元素的包含元素。最后,所有這些偏移量都是只讀的,而且每次訪問他們都需要重新計算。為了避免重復(fù)計算,可以將計算的值保存起來,以提高性能。 offsetHeight 包括元素的高度、上下內(nèi)邊距、上下邊框值,如果元素的style.display的值為none,那么該值為0。offsetWidth 包括元素的寬度、左...
摘要:技術(shù)的核心是對象即。收到響應(yīng)后,響應(yīng)的數(shù)據(jù)會自動填充對象的屬性,相關(guān)的屬性有作為響應(yīng)主體被返回的文本。收到響應(yīng)后,一般來說,會先判斷是否為,這是此次請求成功的標(biāo)志。中的版本會將設(shè)置為,而中原生的則會將規(guī)范化為。會在取得時報告的值為。 Ajax(Asynchronous Javascript + XML)技術(shù)的核心是XMLHttpRequest對象,即: XHR。雖然名字中包含XML,但...
摘要:貢獻(xiàn)者飛龍版本最近總是有人問我,把這些資料看完一遍要用多長時間,如果你一本書一本書看的話,的確要用很長時間。為了方便大家,我就把每本書的章節(jié)拆開,再按照知識點(diǎn)合并,手動整理了這個知識樹。 Special Sponsors showImg(https://segmentfault.com/img/remote/1460000018907426?w=1760&h=200); 貢獻(xiàn)者:飛龍版...
閱讀 4092·2021-11-24 09:38
閱讀 1533·2021-11-19 09:40
閱讀 2838·2021-11-18 10:02
閱讀 3774·2021-11-09 09:46
閱讀 1884·2021-09-22 15:27
閱讀 3171·2019-08-29 15:24
閱讀 1060·2019-08-29 12:40
閱讀 1743·2019-08-28 18:24