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

JavaScript中的原始值(undefined、null、布尔值、字符串和数字)与对象有着根本区别。原始值是不可变的。

1 var s = "hello";
2 s.toUpperCase(); // => "HELLO",但并没有改变s的值
3 consle.log(s); // => "hello",原始字符串并未改变

对象和原始值不同,首先,它们是可变的:

1 var o = {
2    x:1   
3 };
4 o.x = 2; // 可以修改对象属性值
5 0.y = 3; // 可以给对象添加新属性
6 
7 var a = [1,2,3]; // 数组也是可修改的
8 a[0] = 0; // 更改数组的一个元素
9 a[3] = 4; // 给数组添加一个新元素

对象的比较并非值的比较:即使两个对象包含同样的属性以及相同的值,他们也是不相等的。此外,各个索引元素完全相等的两个数组也不相等。

1 var o = { x:1 },p={ x:1 };
2 o === p // => false:两个单独的对象永远不相等
3 
4 var a = [],b = [];
5 a === b // => false:两个单独的数组永远不相等

通常将对象称为引用类型(reference type),以此来和JavaScript的基本类型区分开来。

对象值都是引用(reference),对象的比较均是引用的比较:当且仅当它们引用自同一个基对象时,它们才相等。

1 var a = [];
2 var b = a;
3 b[0] = 1;
4 a[0] // => 1:变量a也会修改
5 a === b // => true:a和b引用自同一数组,因此它们相等
原文地址:https://www.cnblogs.com/fydxx/p/6026999.html