JS 进阶 - JS数据类型

JS 数据类型

数据类型分类

数据类型

  • 基本类型 Number、String、Boolean、Null、Undefined
  • 引用类型 Object (Array、Function、Date)

判断数据类型

  • typeof 判断基本的数据类型
  • instanceof 可以判断稍微复杂的类型
  • 例题1在这里插入图片描述
    解释:这是一个普通的函数,没有返回值,因此返回的是 undefined
    • 变式一
      var stu = Student("Lucy",20)变成 var stu = new Student("Lucy",20)
      解释:通过new 关键字实例化出来的对象,把他作为构造函数,实例化对象来用,因此为 Object。

数据类型存储

变量与内存

  • 变量声明
    1. 使用方便的标识符,用于引用计算机内存地址
    2. 变量声明指向一块内存空间,用于保存数据
  • 变量赋值
    1. 向变量指向的内存空间中存放数据

两种内存空间

  1. 栈内存
    • 存储值大小固定
    • 由系统自动分配内存空间
    • 空间小,运行效率高
  2. 堆内存
    • 存储的值大小不定,可动态调整
    • 由程序员通过代码进行分配
    • 空间大,运行效率相对较低
         * 栈结构,f1进,f1出
         * 最终为 123
         */
        function f1(){
            console.log(1);
            function f2(){
                console.log(2);
                function f3(){
                    console.log(3);
                }
                f3();
            }
            f2();
        }
        f1();

基本类型与引用类型的区别

内存分配方式不同

  • 基本数据类型的临时变量分配在栈区
  • 引用数据类型的变量的地址在栈区,指向的对象存储在堆区
  • 在这里插入图片描述
    1. 栈区常用来存储函数局部临时变量,一般数据量较小
    2. 堆区常用来存储更为复杂的数据结构的对象

数据类型区别

基本类型与引用类型的区别

  1. 访问机制不同
  • 基本类型的值直接访问
  • 引用类型的值通过引用访问,不能直接访问
    1. 首先,从栈中获取该对象的地址引用
    2. 其次,再从堆内存中取得我们需要的数据
  1. 变量赋值不同
    • 基本类型赋值,相互独立不影响
    • 引用类型赋值,会影响
    • // 1-1基本类型赋值,互不影响 var a = 20; var b = a; b = 30; console.log(a); //20 // 1-2引用类型赋值,会产生影响 var a = {x:10,y:20}; var b = a; b.x = 5; console.log(a.x); //5
  2. 比较变量不同
    • 对于“==”,比较的是值,“= = =” 比较的值和数值类型

    • 基本数据类型判断的值是否相等

    • 引用数据类型判断地址是否相同

    • // 2-1基本数据类型比较的是值 var a = 20; var b = 20; a === b; //true a = b; a === b; //true // 2-2引用类型判断的是 地址 是否相同 var a = {x:10,y:20}; var b = {x:10,y:20}; a === b; //false a == b; a === b; //true

    • 练习1在这里插入图片描述 解释:这是引用类型,最终指向的空间不一样

    • 练习2
      在这里插入图片描述
      解释:其中x 和 z 都是基本类型,y是引用类型

  3. 参数传递不同
  • 基本类型:把变量里的数据值传递给参数,之后参数和变量互不影响

  • 引用类型:把对象的 地址 传递给参数,参数和对象都指向同一对象,互相影响

  • 练习1
    在这里插入图片描述
    解释:shift() 方法用于把数组的第一个元素从其中删除,并返回第一个元素的值。因此a的值为[2,3,4]。

  • 练习2
    在这里插入图片描述
    解释:此时 obj 相当于又开辟了一个新的地址空间,会改变之前的obj1

  • 变式1
    在这里插入图片描述
    解释:此时为obj.value = "hello word"只是单纯改变了obj.value的值,不会影响obj1的值。

  • 练习 3
    在这里插入图片描述
    解释:在这里插入图片描述

  • 变式1
    在这里插入图片描述
    解释:在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值