JS系列 · 数据类型

258 阅读2分钟

数据类型

JavaScript 中的值,无论是字面量还是变量,都有明确的类型。

JavaScript 中的数据类型,分为两大类,原始类型(简单数据类型)和 复杂(引用)类型

基本数据类型又叫做 值类型,复杂类型又叫做 引用类型

基本类型

  • Number 数字类型
  • String 字符串类型
  • undefined undefined 类型
  • Boolean 布尔类型
  • null null类型
  • symbol(待补充)

复杂类型

  • Object 数组、对象、函数...

值类型:简单数据类型、基本数据类型,在存储的时候是值本身,所以叫做值类型

引用类型:复杂数据类型,在存储的时候,变量中存储的是地址(引用),因此叫做引用数据类型


基本类型在内存中的存储

变量中如果存储的是简单类型的数据,那么变量中国存储的是值本身,如果将变量赋值给另一个变量,是将内部的值赋值了一份给另一个变量,两变量之间没有关系,一个变化,另一个不会同时变化。

如下图:

示例:

        var a = 2;
        var b = a;
        a = 3;
        console.log("a:" + a); // 3
        console.log("b:" + b); // 2

复杂类型在内存中的存储

如果将复杂数据类型的数据赋值给一个变量,复杂数据类型的数据会在 堆内存 中创建一个原型,而变量在 栈内存 中存储的是指向对象原型的地址(指针),如果将这个变量A赋值给另一个变量B,相当于A将地址复制了一份给另一个变量B,两个变量的地址相同,指向的是同一个原型,不论通过哪个变量更改了原型,都是在原型上发生了更改,所以更改的值原型,这些变量再次访问时都会发生改变。

如下图:

示例:

        // 复杂数据类型在内存中的存储

        // 对象
        var per = {
            name: "lili",
            age: 18,
            sex: "女"
        };
        var per2 = per; // per将指向对象原型的地址复制了一份给per2
        per2.name = "Lisa";
        console.log(per); // {name: "Lisa", age: 18, sex: "女"}
        console.log(per2); // {name: "Lisa", age: 18, sex: "女"}

        // 数组
        var arr = [1,2,3,4];
        var arr2 = arr; // 同理,对象存储的是指向原型的地址
        arr2[4] = 5;
        console.log(arr); // [1, 2, 3, 4, 5]
        console.log(arr2); // [1, 2, 3, 4, 5]