論javascript中的原始值和對象

javascript將數據類型分爲兩類:原始值(undefined、null、布爾值、數字和字符串),對象(對象、函數和數組)javascript

論點:原始值不能夠改變,對象能夠改變;對象爲引用類型;java

 

'原始值不能夠改變'不能夠改變,若是動腦筋的同窗確定會懷疑了,大家字符串能夠改變啊,不信你瞅下面的數組

var a = 'aa';
alert(a.toUpperCase());//彈出 AA

其實,這些只是表面現象,原始值字符串'a'其實並未發生改變,只是拷貝了一份而後對新的拷貝使用'toUpperCase'函數而已,有下面代碼爲證併發

var a = 'aa';
a.toUpperCase();
alert(a);//彈出'aa'

瞅着了吧,其實字符串'a'並無發生變化函數

原始值的比較是值得比較,他們值相等時才相等。this

 

對象和原始值不一樣,他們的值能夠修改,以下spa

var obj = {'a' : 1, 'b' : 2};
obj.a = 3;
obj.b = 4;

var arr = [1, 2, 3];
arr[0] = 4;

對象的比較併發值得比較,即便兩個對象包含一樣的屬性和值,它們也是不相同的code


奉上如下代碼爲證:對象

var a = {'x' : 1}, b = {'x' : 1};
alert(a === b);//false

var c = [1], d = [1];
alert(c === d);//false

對象的值都是引用,對象的比較均是引用的比較,當且僅當它們引用同一個基對象時,它們才相等blog

'對象的值都是引用' 奉上以下代碼覺得證

var a = {'x' : 1};
var b = a;
a.x = 2;
alert(b.x);// 彈出2

var c = function(){
   this.x = 1;  
}
var d = new c;
var e = d;
d.x = 3;
alert(e.x);//彈出3

var aa = [1, 2, 3];
var bb = aa;
aa[0] = 11;
alert(bb[0]);//彈出 11

 

'對象的比較均是引用的比較,當且僅當它們引用同一個基對象時,它們才相等' 奉上以下代碼爲證

var a = [1, 2, 3];
var b = a;
a[1] = 5;
alert(a === b);//彈出true

var  aa = [1, 2, 3];
var bb = [1, 2, 3];
alert(aa === bb);//彈出false

 

如咱們上面的論述,對象的賦值只是賦值的引用,並無進行任何拷貝,若是你想要獲得一個拷貝的副本,則必須顯式的爲對象的每一個屬性或數組的每一個元素進行拷貝,以下

var a = [1, 2, 3, 4, 5];
var b = [];
for(var i =0, _len = a.length; i < _len; i++){
  b[i] = a[i];
}

一樣的若是咱們想要對比兩個數組或者對象,必須將數組或對象的每一個元素或屬性進行比較

 

鄙人才疏學淺,有不足之處,歡迎補足!

相關文章
相關標籤/搜索