一、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进行数据类型的隐式救困转换

 

posted on 2014-03-20 11:08  BarneyX  阅读(293)  评论(0编辑  收藏  举报