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

一、JavaScript不可变原始值

  JavaScript中的原始值(undefined,null,布尔值,数字和字符串)与对象(包括了数组和函数)有着根本的区别。原始值是不可变的(undefined,null,布尔值,数字和字符串)任何方法都不法更改(或“突变”)一个原始值。

 

JavaScript不可变原始值和可变的对象引用
var s= "Hello world!";
    console.log(s.toUpperCase());    //=>HELLO WORLD!    //可以看到返回的值是....
    console.log(s);                    //=>Hello world!     //可以看到这个值没有被修改
JavaScript不可变原始值和可变的对象引用

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

可以看到s的值最终是没有被修改

 原始值的比较是值值的比较,只有在他们的值相同的情况下,Javascript才会认为他们是相等的。对于两个单独的字符串来讲,当它们的长度相等且每个索引的字符都相等时,Javascript才会认为他们是相等的

 

 


 

二、可变的对象引用

  对象和原始值不同,它们首先是可变的,也就是说他们值是可以改变的;

  

JavaScript不可变原始值和可变的对象引用
var  a = {x:1};
     a.x= 2;
     a.y= 3;
     
     console.log(a.x);            //=>2
     console.log(a.y);            //=>3
JavaScript不可变原始值和可变的对象引用

  下面的定义也有“二”:对象的比较和原始值的的值的比较,就算是两个对象包含同样的属性及相同的值,它们也是不相等的只有在索引元素完全相等的两个数组也不会相等的

JavaScript不可变原始值和可变的对象引用
var arr1 = [‘a‘,‘b‘,‘c‘];    
var arr2 = [‘a‘,‘b‘,‘c‘];
//可以看到上面的两个数组arr1和arr2的元素是相同的
console.log(arr1 === arr2);        //=>false    首先用一下javascript当中的最牛X的恒等来比较一下!发现不相等
console.log(arr1 == arr2);        //=>false    最后在用一下普通的比较一下,发现也是不相
JavaScript不可变原始值和可变的对象引用

  那么就看上面的定义的,那样,我们用他们的值和索引来比较看看他们会不会相等呢?

JavaScript不可变原始值和可变的对象引用
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进行数据类型的隐式救困转换
JavaScript不可变原始值和可变的对象引用

JavaScript不可变原始值和可变的对象引用,布布扣,bubuko.com

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

上一篇:微信小程序中的事件


下一篇:web 纯 javascript 的MVC 实现的简单实践