一、JavaScript不可变原始值
JavaScript中的原始值(undefined,null,布尔值,数字和字符串)与对象(包括了数组和函数)有着根本的区别。原始值是不可变的(undefined,null,布尔值,数字和字符串)任何方法都不法更改(或“突变”)一个原始值。
var s= "Hello world!"; console.log(s.toUpperCase()); //=>HELLO WORLD! //可以看到返回的值是.... console.log(s); //=>Hello world! //可以看到这个值没有被修改
可以看到s的值最终是没有被修改
原始值的比较是值值的比较,只有在他们的值相同的情况下,Javascript才会认为他们是相等的。对于两个单独的字符串来讲,当它们的长度相等且每个索引的字符都相等时,Javascript才会认为他们是相等的;
二、可变的对象引用
对象和原始值不同,它们首先是可变的,也就是说他们值是可以改变的;
var a = {x:1}; a.x= 2; a.y= 3; console.log(a.x); //=>2 console.log(a.y); //=>3
下面的定义也有“二”:对象的比较和原始值的的值的比较,就算是两个对象包含同样的属性及相同的值,它们也是不相等的,只有在索引元素完全相等的两个数组也不会相等的;
var arr1 = ['a','b','c']; var arr2 = ['a','b','c']; //可以看到上面的两个数组arr1和arr2的元素是相同的 console.log(arr1 === arr2); //=>false 首先用一下javascript当中的最牛X的恒等来比较一下!发现不相等 console.log(arr1 == arr2); //=>false 最后在用一下普通的比较一下,发现也是不相
那么就看上面的定义的,那样,我们用他们的值和索引来比较看看他们会不会相等呢?
var arr1 = ['a','b','c']; var arr2 = ['a','b','c']; //可以看到上面的两个数组arr1和arr2的元素是相同的 console.log(arr1 === arr2); //=>false 首先用一下javascript当中的最牛X的恒等来比较一下!发现不相等 console.log(arr1 == arr2); //=>false 最后在用一下普通的比较一下,发现也是不相同的; //写一个判断元素和值比较的一个函数 function test(arr1,arr2){ if(arr1.length != arr2.length) return false; //如果他们的数组长度都不相等的话,那么他们一定是不相等的; for(var i = 0; i < arr1.length; i++) if(arr1[i] !== arr2[i])return false; //如果两个数组当中的有一个值不相等就返回false,判定为两个数组不相等 return true; //如果是返回的是true的话,那么说明arr1和arr2是相等的两个数组; } console.log(test(arr1,arr2)); //=>true 可以发现他们是相等的;这里我使用了恒等来判定的;这样判定可以防止javascript进行数据类型的隐式救困转换