js中數(shù)據(jù)類型包括原始類型和引用類型,其中原始類型(primitives types):undefined,null,boolean,number,string,Symbol(ES6新增);引用類型:Object類型。
1. 原始類型變量存儲(chǔ)
原始類型的變量存放在棧中,且是不可變的。例如:
var a = 10;
var b = a;
a = 20;
那么棧內(nèi)存的變化如下:

對(duì)于不可變性,如進(jìn)行操作:var a = 'str'; a.toUpperCase(); console.log(a); 變量a保持不變,依然為'str'。
2. 引用類型變量存儲(chǔ)
引用類型變量存儲(chǔ)在堆中,變量在棧中保存堆的引用地址。例如:
var obj = {name:'str'};
var obj1 = obj;
obj.name = 'str1';
console.log(obj1.name); //輸出'str1'
內(nèi)存的變化如下:

所以引用類型變量保存的是堆中的地址,一個(gè)對(duì)象改變導(dǎo)致另一個(gè)對(duì)象也跟著改變。
另外,變量在傳參時(shí)也是按照原始類型傳值,引用類型傳引用地址的方式傳遞參數(shù)。
var o = {name:'str'};
function fn(obj){
? obj.name = 'str1';
}
fn(o);
console.log(o.name);? ?//輸出‘str1’