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

// JS 中原始值(undefined、null、布尔值、数字和字符串)与对象(包括数组和函数)有着
//根本区别。原始值是不可改的。 字符串不是那么明显,但却实不可改的,无法通过指定索引
//来修饰字符串中的字符。字符串中所有的方法开上去是返回了一个修改后的字符串,实际上返回的是一个新字符串值。
// let s = "hello";
// s.toUpperCase();//"HELLO"
// console.log(s.toUpperCase());
// console.log(s);//"hello"
//原始值的比较是值的比较:只有他们的值相等时它们才相等。
//比较两个符串要它们的长度相等且每个索引的字符都相等时,JS才认为它们相等。
//对象的比较并非是值的比较:相同属性相同的值,它们也是不相等的。各个索引元素完全相等的数组也不相等。
//两个单独的对象永远不相等,两个空数组也是永远不相等的。
//我们通常将对象称为引用类型(reference type),以此来和javaScript的基本类型区分开来。
//依照术语的叫法,对象值都是引用(reference),对象的比较均是引用的比较:
// 当且仅当它们引用同一个基本对象时,它们才相等。
// let a = [];        //定义一个空数组的变量a
// let b = a;         //变量b引用同一个数组
// b[0] = 1;          //通过变量b来修该引用的数组
// console.log(a[0]);// 1
// console.log(a === b);//true
// console.log(typeof b);//一切皆对象
//如上述代码,将对象(或数组)赋值给一个变量,仅仅是赋值的引用值:对象本身并没有复制一次
//想要得到一个数组或对象的副本,就必须显式赋值对象的每个属性或数组的每个元素:
let a = ['k','o','i'];
let b = [];
for (let i = 0; i 

你可能感兴趣的:(不可变的原始值和可变的对象引用)