• 第183天:引用类型和值类型


    一、内存分配

    1、数值型内存分配

     1 <script>
     2     var num1; //这个时候不进行内存分配
     3     var num3=9;//分配内存
     4     var num4=num3;//会不会分配
     5 
     6      //  这里到底分配还是不分配内存??
     7      // 答案 --分配内存 彼此拥有独立的内存空间,互不影响
     8     console.log(num3);
     9     console.log(num4);
    10 
    11     num3=3333333;
    12     num4=4444444;
    13     console.log(num3);
    14     console.log(num4); //当更改数据,值不一样的本质是这里分配两个空间独立存储
    15 
    16 
    17 </script>

    2、字符串内存分配

     1 <script>
     2     //字符串
     3     var str1; //这个时候不进行内存分配
     4     var str2 = '乐乐'; //分配内存
     5     var str3=str2; //问题,这里str3 会不会分配内存??
     6     
     7     //答案:会
     8     console.log(str1);
     9     console.log(str2);
    10     console.log(str3);
    11     console.log(str2===str3); //比较的是指针指向的内存空间中存储的值
    12 
    13     str2 ='lalala222222222';
    14     str3 ='lalala333333333';
    15     console.log(str2);//lalala222222222
    16     console.log(str3);//lalala333333333
    17 </script>

    3、数组内存分配

     1 <script>
     2     //    数组 : 当定义一个新数组,
     3     // 内存会产生两片区域,一个存储变量,一个存储数组 变量中保存的只是数组所在的地址
     4     var arr1=['乐乐','淘淘'];//分配内存
     5     //引用类型其实是指向同一个地址,也就是操纵的其实是同一个位置
     6     var arr2=arr1;   //问题:这里arr2会不会分配内存
     7     console.log(arr1[0]);//乐乐
     8     console.log(arr2[0]); //乐乐   一样
     9 
    10 
    11     //修改数组1
    12     arr2[0]='水浒传 西游记 三国演义 红楼梦';
    13     console.log(arr1[0]);//水浒传 西游记 三国演义 红楼梦
    14     console.log(arr2[0]);//水浒传 西游记 三国演义 红楼梦
    15 
    16     //一样 说明这里不分配内存,其实arr2变量中存的是地址,指向arr1内存
    17 
    18 </script>

    4、函数内存分配

     1 <script>
     2 
     3 //    系统都会在内存中生成两个区域:一个存储变量,一个用来存储函数
     4 //    而变量中存放的只是函数空间所在的地址(指针)
     5 //    由于函数是对象,因此函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定。
     6 //由于函数名仅仅是指向函数的指针,
     7 //因此函数名与包含对象指针的其他变量没有什么不同。
     8 //换句话说,一个函数可能会有多个名字,例如:
     9 function sum(num1,num2)
    10     {
    11         return num1 + num2;
    12     }
    13 console.log(sum(10,10)); //20
    14 
    15 var anotherSum = sum;
    16 
    17  //内存是如何分配的? 这里不会在内存生成新的空间,存储函数,而是生成一个变量,变量中保存的是同一个地址
    18 sum = null;//这里只是将sum变量中原来保存的是函数地址,然后赋值成null,这样做并不会影响到函数对象对应的内存空间
    19 console.log(anotherSum(10,10)); //20
    20 console.log(sum(10,10)); //20
    21     
    22 </script>

    二、引用类型和值类型总结

     1 <script>
     2     function show(x) {
     3         console.log(typeof(x));    // undefined 值类型
     4         console.log(typeof(10));   // number 值类型
     5         console.log(typeof('abc')); // string 值类型
     6         console.log(typeof(true));  // boolean 值类型
     7         console.log(typeof(function () { })); //function 函数 引用类型
     8         console.log(typeof([1, 'a', true]));  //object 数组  引用类型
     9         console.log(typeof ({ a: 10, b: 20 }));  //object 或者json  引用类型
    10         console.log(typeof (null));  //object   null  引用类型
    11         console.log(typeof (new Number(10)));  //object  内置对象 引用类型
    12     }
    13     show();
    14 //    其中上面的四种(undefined, number, string, boolean)属于值类型,不是对象。
    15 //    函数、数组、对象、null、new Number(10)都是对象。他们都是引用类型。
    16 
    17     var test ={name:'lele'};
    18     var test2=  test;
    19     console.log(test === test2);//true
    20     test.name='lala';
    21     console.log(test2.name);//lala
    22 
    23 </script>
  • 相关阅读:
    使用Apache Curator监控Zookeeper的Node和Path的状态
    mongo创建用户
    window下关闭nginx
    spring 下载地址
    Quartz Spring与Spring Task总结
    oracle 11g 空表也导出
    修改oracle字符集
    linux 查看最大文件
    JAVA https证书相关
    抽象类与接口
  • 原文地址:https://www.cnblogs.com/le220/p/8495704.html
Copyright © 2020-2023  润新知