JavaScript - 基本数据类型和引用数据类型

587 阅读2分钟

  ECMAScript包含两种不同数据类型的值:基本类型值和引用类型值。基本数据类型又称为简单数据类型,复杂数据类型又称为引用数据类型。基本类型值指的是简单的数据段,而引用类型值那些可能有多个值构成的对象。

  常用的5种基本数据类型为:Number、String、Boolean、Undefined、Null。其他均为复杂数据类型。

  在进行变量赋值时,解析器必须确定这个值是基本类型值还是引用类型值。基本数据类型是按值访问的,因为可以操作保存在变量中的实际的值。而引用类型的值是保存在内存中的对象。JavaScript不允许直接访问内存中的位置,即不能直接操作对象的内存空间。在操作对象时,实际上是在操作对象的引用而不是实际的对象。因此,引用类型的值是按引用访问的。

  也就是说,当我们操作基本数据类型时,是直接对值进行操作,而当我们操作引用数据类型时,是根据内存中存放的地址进行操作。

  下面举几个例子:

    <script>
        var a = [10];
        var b = a;
        a.push(20);
        console.log(a); // [10,20]
        console.log(b); // [10,20]
    </script>

  其中b与a指向同一个地址,即数组[10]在内存中存放的地址。所以对该数组进行操作时,a和b的值都会变化。

    <script>
        var a = { name: "joe" };
        var b = a;
        b.name = "nick";
        console.log(a); // nick
        console.log(b); // nick
    </script>

  其中b与a的值指向同一个地址,即对象{ name: "joe" }在内存中存放的地址。所以对该数组进行操作时,a和b的值都会变化。

    <script>
        var a = { name: "joe" };
        var b = a;
        b = { name: "nick" };
        console.log(a); // joe
        console.log(b); // nick
    </script>

  b重新创建了一个对象{ name: "nick" }在内存中,b的值为这个新对象在内存中的地址,此时a与b就无关了。