// 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 <a.length;i++) {
b[i] = a[i];
}
console.log(a === b);//false
//同样的,如果我们想比较两个单独的对象或者数组,就必须比较它们的属性或元素:
function equalArrays(a,b) {
if (a.length != b.length) return false;
for (let i = 0;i<a.length;i++)
if (a[i] !== b[i]) return false;
return true;
}
let c=[],d = [];
console.log(equalArrays(c,d));//两个空数组也相等
网友评论