摘要:兩種類型基本類型值引用類型值基本類型值指的是保存在棧內(nèi)存中的簡單數(shù)據(jù)段引用類型值指的是那些保存在堆內(nèi)存中的對象,意思是,變量中保存的實(shí)際上只是一個(gè)指針,這個(gè)指針執(zhí)行內(nèi)存中的另一個(gè)位置,由該位置保存對象兩種訪問方式基本類型值按值訪問,操作的是
兩種類型:基本類型值、引用類型值
基本類型值:指的是保存在棧內(nèi)存中的簡單數(shù)據(jù)段;
引用類型值:指的是那些保存在堆內(nèi)存中的對象,意思是,變量中保存的實(shí)際上只是一個(gè)指針,這個(gè)指針執(zhí)行內(nèi)存中的另一個(gè)位置,由該位置保存對象;
基本類型值:按值訪問,操作的是他們實(shí)際保存的值;
引用類型值:按引用訪問,當(dāng)查詢時(shí),我們需要先從棧中讀取內(nèi)存地址,然后再順藤摸瓜地找到保存在堆內(nèi)存中的值;引用類型的值保存在內(nèi)存中,由于js不允許直接訪問內(nèi)存,在操作的時(shí)候,其實(shí)操作的是對象的引用
基本類型:undefined、null、Boolean、String、Number
引用類型:Function、Object、Array
基本類型變量的復(fù)制:從一個(gè)變量向另一個(gè)變量復(fù)制時(shí),會(huì)在棧中創(chuàng)建一個(gè)新值,然后把值復(fù)制到為新變量分配的位置上;
引用類型變量的復(fù)制:復(fù)制的是存儲(chǔ)在棧的指針,將指針復(fù)制到為新變量分配的位置上,而這個(gè)指針副本與原指針執(zhí)行的是存儲(chǔ)在堆中的對象。復(fù)制結(jié)束后,兩個(gè)變量指向的是同一個(gè)對象,因此操作其中的任何一個(gè)將會(huì)影響另一個(gè);
兩種變量類型檢測typeof操作符是檢測基本類型的最佳工具
如果變量值是null或者對象,返回的是object
typeof null // "object" typeof undefined // "undefined" typeof 1 // "number" typeof "1" // "string" typeof true // "boolean" typeof {} // "object" typeof [] // "object" typeof function() {} // "function"
instanceof操作符用于檢測引用類型,可以檢測它到底是什么類型的實(shí)例
如果變量是給定引用類型的實(shí)例,instanceof將會(huì)返回true
console.log(objects instanceof Object) // objects是否是Object的實(shí)例 console.log(arrays instanceof Array) // arrays是否是Array的實(shí)例兩種變量類型傳遞(值傳遞、引用類型傳遞)
通過以下兩個(gè)例子解釋值傳遞與引用類型傳遞:
var a = 1; function add(b) { b += 1; } add(a); console.log(a); // a == 1,a的值沒有發(fā)生變化
值傳遞的特性:
1.只將值進(jìn)行傳遞,與原變量無關(guān),值會(huì)被復(fù)制一份,保存在內(nèi)存中另一個(gè)不同的位置;
2.當(dāng)我們修改傳遞后的值時(shí),修改的是內(nèi)存中新的位置,而原變量不會(huì)被影響,還是原來的值;
3.這種情況往往出現(xiàn)在基本類型變量中;
var a = [1]; function add(b) { b.push(2); } add(a); console.log(a); // [1,2] 說明原始的a的值已經(jīng)被改變了
引用傳遞的特性:
1.將內(nèi)存地址進(jìn)行傳遞,相當(dāng)于把原變量完整的傳遞過來;
2.當(dāng)我們修改傳遞后的值時(shí),修改的是內(nèi)存中原來的位置,會(huì)對原變量造成影響;
3.這種情況往往出現(xiàn)在對象中;
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/81686.html
摘要:一棧數(shù)據(jù)結(jié)構(gòu)與不同,中并沒有嚴(yán)格意義上區(qū)分棧內(nèi)存與堆內(nèi)存。引用數(shù)據(jù)類型的值是保存在堆內(nèi)存中的對象。不允許直接訪問堆內(nèi)存中的位置,因此我們不能直接操作對象的堆內(nèi)存空間。為了更好的搞懂變量對象與堆內(nèi)存,我們可以結(jié)合以下例子與圖解進(jìn)行理解。 showImg(https://segmentfault.com/img/remote/1460000009784102?w=1240&h=683); ...
摘要:前綴規(guī)范每個(gè)局部變量都需要有一個(gè)類型前綴,按照類型可以分為表示字符串。例如,表示以上未涉及到的其他對象,例如,表示全局變量,例如,是一種區(qū)分大小寫的語言。布爾值與字符串相加將布爾值強(qiáng)制轉(zhuǎn)換為字符串。 基本概念 javascript是一門解釋型的語言,瀏覽器充當(dāng)解釋器。js執(zhí)行時(shí),在同一個(gè)作用域內(nèi)是先解釋再執(zhí)行。解釋的時(shí)候會(huì)編譯function和var這兩個(gè)關(guān)鍵詞定義的變量,編譯完成后從...
摘要:但對于引用類型的數(shù)據(jù)主要是對象和數(shù)組,變量指向的內(nèi)存地址,保存的只是一個(gè)引用地址指針,只能保證這個(gè)引用地址指針是固定的,至于它指向的堆內(nèi)存中的存儲(chǔ)的值是不是可變的,就完全不能控制了。 基礎(chǔ)概念 變量是存儲(chǔ)信息的容器,這里需要區(qū)分一下:變量不是指存儲(chǔ)的信息本身,而是指這個(gè)用于存儲(chǔ)信息的容器,可以把變量想象成一個(gè)個(gè)用來裝東西的紙箱子 變量需要聲明,并且建議在聲明的同時(shí)進(jìn)行初始化,如下所...
摘要:語句中的塊語句對來說,將會(huì)指定對象添加到作用域鏈中。在嚴(yán)格模式下,初始化未經(jīng)聲明的變量會(huì)導(dǎo)致錯(cuò)誤。查詢標(biāo)識(shí)符搜索過程從作用域鏈的前端開始,向上逐級(jí)查詢與給定名字匹配的標(biāo)識(shí)符。 本文記錄了我在學(xué)習(xí)前端上的筆記,方便以后的復(fù)習(xí)和鞏固。 4.1基本類型和引用類型的值 ECMAScript變量可能包含兩種不同數(shù)據(jù)類型的值:基本類型值和引用類型值。基本類型指的是簡單的數(shù)據(jù)段,而引用類型值指那些可...
閱讀 1080·2021-11-25 09:43
閱讀 703·2021-11-22 14:45
閱讀 3830·2021-09-30 09:48
閱讀 1069·2021-08-31 09:41
閱讀 1977·2019-08-30 13:52
閱讀 1983·2019-08-30 11:24
閱讀 1351·2019-08-30 11:07
閱讀 958·2019-08-29 12:15