不可变的原始值和可变的对象引用

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; // 不然它们相等 }

相关文章
相关标签/搜索