zoukankan      html  css  js  c++  java
  • JavaScript>基础类型和引用类型的区别

    先了解一下数组的基础知识:附代码(数组属于引用类型的对象)

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
        <script type="text/javascript">
            // 数组:存储一组变量的内存中连续存储多个数据的存储空间
            // 使用数组的好处:连续存储的多个数据便于维护和查询
            // 数组的创建:
            // 1.创建空数组:
            var arr = [];
            var arr1 = new Array();
            // 2.创建一个已知数据个数的空数组
            var arr2 = new Array(29);
            // 3.创建数组同时赋值
            var arr = ["王五","李四","张三"];
            var arr1 =new Array("王五","李四","张三");
            // 通过下标访问数组,若无值就显示undefined
            console.log(arr[0],arr[1],arr[2],arr[3]);
            // 特征:
            // 1.不限制元素的存储数据类型
            var array = ["jack",true,3.14];
            // 2.不限制下标的越界
            array[4] = 80;//自动在制定位置新建元素保存元素
            console.log(array);
            console.log(array[3]);
            // 3.不限制数组的元素个数
            array[10] = "marry";
            console.log(array);
            // 4.数组的.length属性:记录了理论上的元素个数 永远是最后一个元素的下标+1
            console.log(array.length);//10+1
            // 5.获取数组的最后一个元素 array.length-1
            console.log(array[array.length-1]);
            // 6.在数据末尾追加新内容 array.length
            array[array.length] = "haha";
            console.log(array);
            // 删掉数组中的某个元素
            array[1]="";
            // 删掉数组的最后一个元素
            array.length--;
            // 删掉数组末尾的n个元素
            array.length = array.length-n;
        </script>
    </body>
    </html>

    基础类型:number string boolean undefined null

    数据直接保存在变量本地的数据类型
    数据进行传值时,是将原变量的值复制一份传递给新变量,新变量的值发生改变时,原变量的值不会发生变化
    引用类型:
    1.数据无法直接保存在变量本地的数据类型,变量只允许保存一个值
    2.引用类型的对象会在window对象之外创建一个独立的存储空间,并给一 个唯一的地址,变量中保存的就只这个存储空间的地址——称为"引用"
    3.数据进行传值时,传递的是地址,若新变量修改,则数据也会改变

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>数组是引用类型的对象</title>
    </head>
    <body>
        <script type="text/javascript">
            // 基础类型进行传值时 新变量的改变并不会影响原变量
            var a =10;
            var b=a;
            b++;
            console.log(a);//值为10
            console.log(b);//值为11
            // 引用类型进行传值时,新变量的改变会直接改变原变量的值,因为对象之间传递的时存储数据的地址
            var arr = [1,2,3,4,5];
            var arr1 =arr;
            arr1.length--;
            console.log(String(arr));//1,2,3,4
            arr1 = null;//当赋值为空时,表示此变量不再引用这个数组
            console.log(String(arr1));
            
            // undefined js使用 定义变量为赋值时,变量的初值为undefined
            // null 程序员使用,手动清楚一个变量的内容
                // 基础类型:直接清空变量内容
                // 引用类型:表示变量不再引用对象
            // 何时清空一个变量
            // 垃圾回收:js引擎会自动释放不再被任何变量引用的对象
            // 垃圾回收器:专门回收不再使用的对象的小程序
                // 1.记录每一个对象,被几个变量引用着,每多一个变量引用,计数器+1
                //     当一个变量赋值null时,计数器-1
                // 2.当计数器为0时,表示对象不再被任何变量引用,对象就被回收
                // 3.使用一个较大的对象时 主动清空
        </script>
    </body>
    </html>
  • 相关阅读:
    调试tomcat的过滤器配置
    嵌入式实操----基于RT1170 FreeRTOS时定器接口封装(二十二)
    嵌入式实操----基于RT1170 首板硬件之tempsensor温度传感器调试(二十一)
    嵌入式实操----基于RT1170 首板硬件之第一阶段总结(十九)
    嵌入式实操----基于RT1170 首板硬件之WDT调试(二十)
    嵌入式实操----基于RT1170 首板硬件之CAN BUS TJA1043显示调试(十八)
    嵌入式实操----基于RT1170 首板硬件之MIPI显示调试(十七)
    嵌入式实操----基于RT1170 首板硬件之ADC调试(十六)
    嵌入式实操----基于RT1170 首板硬件之EEPROM AT24C16调试(十五)
    嵌入式实操----基于RT1170 首板硬件之QSPI Flash调试(十三)
  • 原文地址:https://www.cnblogs.com/blogzzy/p/11247092.html
Copyright © 2011-2022 走看看