Javascript中的基礎類型與引用類型

兩種類型:基本類型值、引用類型值

基本類型值:指的是保存在棧內存中的簡單數據段;
引用類型值:指的是那些保存在堆內存中的對象,意思是,變量中保存的實際上只是一個指針,這個指針執行內存中的另外一個位置,由該位置保存對象;工具

兩種訪問方式:

基本類型值:按值訪問,操做的是他們實際保存的值;
引用類型值:按引用訪問,當查詢時,咱們須要先從棧中讀取內存地址,而後再順藤摸瓜地找到保存在堆內存中的值;引用類型的值保存在內存中,因爲js不容許直接訪問內存,在操做的時候,其實操做的是對象的引用spa

兩種數據類型:

基本類型:undefined、null、Boolean、String、Number
引用類型:Function、Object、Array指針

圖片描述

兩種類型複製

基本類型變量的複製:從一個變量向另外一個變量複製時,會在棧中建立一個新值,而後把值複製到爲新變量分配的位置上;code

圖片描述

引用類型變量的複製:複製的是存儲在棧的指針,將指針複製到爲新變量分配的位置上,而這個指針副本與原指針執行的是存儲在堆中的對象。複製結束後,兩個變量指向的是同一個對象,所以操做其中的任何一個將會影響另外一個;對象

圖片描述

兩種變量類型檢測

  1. typeof操做符是檢測基本類型的最佳工具圖片

  2. 若是變量值是null或者對象,返回的是object內存

typeof null                 // "object"
typeof undefined            // "undefined"
typeof 1                    // "number"
typeof "1"                  // "string"
typeof true                 // "boolean"
typeof {}                   // "object"
typeof []                   // "object"
typeof function() {}        // "function"
  1. instanceof操做符用於檢測引用類型,能夠檢測它究竟是什麼類型的實例string

  2. 若是變量是給定引用類型的實例,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.這種狀況每每出如今對象中;

相關文章
相關標籤/搜索