基本類型值:指的是保存在棧內存中的簡單數據段;
引用類型值:指的是那些保存在堆內存中的對象,意思是,變量中保存的實際上只是一個指針,這個指針執行內存中的另外一個位置,由該位置保存對象;工具
基本類型值:按值訪問,操做的是他們實際保存的值;
引用類型值:按引用訪問,當查詢時,咱們須要先從棧中讀取內存地址,而後再順藤摸瓜地找到保存在堆內存中的值;引用類型的值保存在內存中,因爲js不容許直接訪問內存,在操做的時候,其實操做的是對象的引用spa
基本類型:undefined、null、Boolean、String、Number
引用類型:Function、Object、Array指針
基本類型變量的複製:從一個變量向另外一個變量複製時,會在棧中建立一個新值,而後把值複製到爲新變量分配的位置上;code
引用類型變量的複製:複製的是存儲在棧的指針,將指針複製到爲新變量分配的位置上,而這個指針副本與原指針執行的是存儲在堆中的對象。複製結束後,兩個變量指向的是同一個對象,所以操做其中的任何一個將會影響另外一個;對象
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操做符用於檢測引用類型,能夠檢測它究竟是什麼類型的實例string
若是變量是給定引用類型的實例,instanceof將會返回trueit
console.log(objects instanceof Object) // objects是不是Object的實例 console.log(arrays instanceof Array) // arrays是不是Array的實例
經過如下兩個例子解釋值傳遞與引用類型傳遞:io
var a = 1; function add(b) { b += 1; } add(a); console.log(a); // a == 1,a的值沒有發生變化
值傳遞的特性:
1.只將值進行傳遞,與原變量無關,值會被複制一份,保存在內存中另外一個不一樣的位置;
2.當咱們修改傳遞後的值時,修改的是內存中新的位置,而原變量不會被影響,仍是原來的值;
3.這種狀況每每出如今基本類型變量中;
var a = [1]; function add(b) { b.push(2); } add(a); console.log(a); // [1,2] 說明原始的a的值已經被改變了
引用傳遞的特性:
1.將內存地址進行傳遞,至關於把原變量完整的傳遞過來;2.當咱們修改傳遞後的值時,修改的是內存中原來的位置,會對原變量形成影響;3.這種狀況每每出如今對象中;