不可變的原始值和可變的對象引用

JavaScript的數據類型分爲兩類:原始類型(primitive type)和對象類型(object type)。數組

原始類型包括數字、字符串和布爾值,特殊的原始值:null(空)和undefined(未定義)。函數

對象(object)是屬性(property)的集合,每一個屬性都由「名/值對」(值能夠是原始值,好比數字、字符串,也能夠是對象)構成。對象

JavaScript的類型也可分爲能夠擁有方法的類型和不能擁有方法的類型,一樣可分爲可變(mutable)類型和不可變(immutable)類型。索引

JavaScript中的原始值(undefined、null、布爾值、數字和字符串)與對象(包括數組和函數)有着根本區別。ip

原始值是不可更改的:任何方法都沒法更改(或「突變」)一個原始值。字符串

原始值的比較是值的比較。it

對象和原始值不一樣,它們是可變的。io

對象的比較並不是值的比較:即便兩個對象包含一樣的屬性及相同的值,它們也是不相等的。各個索引元素徹底相等的兩個數組也不相等。table

一般將對象稱爲引用類型(reference type),對象值都是引用(reference),對象的比較均是引用的比較:當且僅當它們引用同一個基對象時,它們才相等。function

var a = []; // 定義一個引用空數組的變量a
var b = a; // 變量b引用同一個數組
b[0] = 1; // 經過變量b來修改引用的數組
a[0] // => 1: 變量a也會修改
a === b // => true: a和b引用同一個數組,所以它們相等

數組複製
var a = ['a','b','c']; // 待複製的數組
var b = []; // 複製到的目標空數組
for(var i = 0; i < a.length; i++){ // 遍歷a[]中的每一個元素
    b[i] = a[i]; // 將元素值複製到b中
}

比較兩個單獨的對象或數組,必須比較它們的屬性或元素 比較兩個數組的函數 function equalArrays(a,b){     if (a.length != b.length) return false; // 兩個長度不一樣的數組不相等     for(var i = 0; i < a.length; i++){ // 循環遍歷全部元素         if(a[i] !== b[i]) return false; // 若是有任意元素不等,則數組不相等     }     return true; // 不然它們相等 }

相關文章
相關標籤/搜索