一、JavaScript有六種數(shù)據(jù)類型:
*數(shù)值型
*字符串型
*布爾型
* Null
* Undefined
*對象
我們可以按照這六種數(shù)據(jù)類型按照存儲方式分為兩類
1.原始類型:存儲的是值本身
*數(shù)值型
*字符串型
*布爾型
* Null
* Undefined
2.引用類型:儲存的是一個(gè)引用
*對象
二媒至、原始類型與引用類型的差異
//a相當(dāng)于把自己的值復(fù)制了一份給b,所以當(dāng)a的值改變的時(shí)候不會影響b的值的改變
????????????? /*var a='hello world';
????????????? var b=a;
????????????? var a='hello javascript';
????????????? console.log(a);//hello javascript
????????????? console.log(b);//hello world*/
??????? 案例中值得類型為字符串傀蚌,接下來把字符串換成對象
?????????????????var obj1={
????????????????? name:'jack',
????????????????? age:18
?????????????????}
?????????????????var obj2=obj1;
?????????????????obj1.name='rose';
?????????????????console.log(obj1.name);//rose
?????????????????console.log(obj2.name);//rose
//我們發(fā)現(xiàn)當(dāng)obj1的值改變能庆,obj2中的值也跟著變化砖瞧。因?yàn)橐妙愋痛鎯Φ氖且粋€(gè)地址屯蹦,而不是值本身。兩個(gè)對象引用的是同一個(gè)地址脐区。所有當(dāng)一個(gè)改變時(shí)愈诚,另一個(gè)也會跟著變
三、原始類型與引用類型比較的區(qū)別
接下來我們來看一下原始類型與引用類型比較的時(shí)候有什么來區(qū)別
????????????????????????var str1 = 'hello world';
var str2 = 'hello world';
console.log(str1 == str2); ????//true
var obj1 = {name:'xiaoming'};
var obj2 = {name:'xiaoming'};
console.log(obj1 == obj2); ????//false
四牛隅、原始類型與引用類型傳參的區(qū)別demo11
原始類型:
???????????????????????var str='hello world';
???????????????????????function fun(s){
s='hello javascript';
???????????????????????}
???????????????????????fun(str);
???????????????????????console.log(str);
在上面的代碼中我們將變量str傳給函數(shù)fun炕柔,在fun內(nèi)部將參數(shù)將另一個(gè)字符串賦值給參數(shù),然后在函數(shù)外面輸出str,發(fā)現(xiàn)str的值并沒有變
引用類型:
??????????????????????????var obj={name:'jack',age:18};
??????????????????function fun(o){
???????????????????????o.name='rose';
??????????????????}
???????????????????fun(obj);
???????????????????console.log(obj);
將參數(shù)換成引用類型后倔叼,我們發(fā)現(xiàn)再次輸出obj的時(shí)候汗唱,它的值已經(jīng)變成了函數(shù)中賦的值,這是因?yàn)樵碱愋蛡鲄⒌臅r(shí)候丈攒,實(shí)參是形參的副本,改變形參的時(shí)候不會影響實(shí)參授霸,而應(yīng)用類型傳參的時(shí)候巡验,形參和實(shí)參的對象都指向一個(gè)引用,這樣當(dāng)我們修改形參的值的時(shí)候碘耳,其實(shí)是操作了內(nèi)存中的對象显设,所以函數(shù)外部變量的值也就跟著變化了。