首先我們知道js資料型別分為基礎型別和引用型別,接下來我們談談基礎型別和引用型別的區別:
1.es5中基礎型別包括:number,string,null,undefined,boolean。es6新增了一種基礎型別symbol,基礎型別的儲存是存放在棧中,原因是基礎型別儲存的空間很小,存放在棧(stack)中方便查詢,且不易於改變
示例:var a = 10;
var b = a;
b = 20;
console.log(a); // 10值
2. 引用型別是指有多個值構成的對象,也就是物件型別比如:object,array,function,data等,js的引用資料型別是儲存在堆中(heap),也就是說儲存的變數處的值是乙個指標(point),指向儲存物件的記憶體位址。存在堆中的原因是:引用值的大小會改變,所以不能放在棧中,否則會降低變數查詢的速度
var obj1 = new object();
var obj2 = obj1;
obj2.name = "我有名字了";
console.log(obj1.name); // 我有名字了
3. 不同的記憶體分配機制導致了不同的訪問機制,js中不允許直接訪問儲存在堆記憶體中的物件,所以在訪問乙個物件時,首先得到這個物件在堆記憶體中的位址,然後在按照這個位址去獲取物件中的值,這就是按引用訪問,基礎型別則可以直接訪問到
4. 引數傳遞的不同(實參複製給形參的過程),首先我們知道所有函式都是按值來傳遞的,傳參不同也就是記憶體分配不同的原因,當我們把變數賦值給引數的時候,引數的改變和變數沒有關係,當我們把引用型別傳遞給引數的時候,此時我們傳遞的是引用型別的位址,所有當引數在函式內部改變的時候,會出現修改了函式外面值的情況
JS基礎 引用型別
引用型別 1.建立object 例項的方式有兩種。第一種是使用 new操作符後跟 object 建構函式,如下所示 var person new object person.name nicholas person.age 29 另一種是使用物件字面量表示法。物件字面量是物件定義的一種簡寫形式,目的...
js基礎 基本型別和引用型別
js 種有兩種變數型別 基本型別和引用型別。可能會讓你聯想到 堆疊 或者 指標 的概念。包括 number string boolean null undefined 1 基本型別理解 等於又開了一家一模一樣的店,之後店內的所有東西和之前的沒啥關係 function stores 說明 把乙個基本型...
JS的基礎型別與引用型別
兩種型別 1.ecmascript 變數包含兩種不同型別的值 基本型別值 引用型別值 2.基本型別值 指的是儲存在棧記憶體中的簡單資料段 3.引用型別值 指的是那些儲存在堆記憶體中的物件,意思是,變數中儲存的實際上只是乙個指標,這個指標執行記憶體中的另乙個位置,由該位置儲存物件 兩種訪問方式 4.基...