JS知识点1

数据类型

  • 分类

    • 基本(值)类型

      • String : 任意字符串
      • Number : 任意数据
      • Boolean : true/false
      • Undefined : undefined
      • Nul : null
    • 对象(引用)类型

      • Object : 任意对象
        • Function : 一种特别的对象(可以执行)
        • Array : 一种特别的对象(数值下标, 内部数据是有序的)
  • 判断

    • typeof

      • typeof 可以判断 :undefined / 数值 / 字符串 /布尔值 /function
      • 不能判断: null和object / array和object
      • typeof返回数据类型的字符串表达
    • instanceof

      • 判断对象的具体类型
    • ===

      • 可以判断: undefined , null (因为这两个只有一个值)
      //基本类型
      var a;
      console.log(a, typeof a, typeof a==='undefined', a===undefined); //undefined 'undefined' true true
      
      var a = 2;
      console.log(typeof a==='number'); //true
      
      var a = 'abc';
      console.log(typeof a==='string'); //true
      
      var a = true;
      console.log(typeof a==='boolean'); //true
      
      var a = null;
      console.log(typeof a, a===nyll); //'object' true
      
      //对象
      var b1 = {
          b2: [1, 'abc', console.log],
          b3: function () {
              console.log('b3');
              return function () {
                  return 'blackC'
              }
          }
      }
      console.log(b1 instanceof Object, b1 instanceof Array); //true false
      console.log(b1.b2 instanceof Array, b1.b2 instanceof Object); //true true
      console.log(b1.b3 instanceof Object, b1.b3 instanceof Object); //true true
      
      console.log(typeof b1.b3==='function') //true
      console.log(typeof b1.b2[2]==='function') //true
      b1.b2[2](4); //4 相当于输出语句输出4
      console.log(b1.b3()()); //b3 'balckC'
      
  • Q&A

    • undefined和null的区别

      • undefined代表定义未赋值
      • null代表定义并赋值了, 只是值为null
    • 什么时候给变量赋值为null

      • 初始赋值为null, 表明将要赋值为对象

      • 结束前赋值为null, 目的是让其指向的对象成为垃圾对象(没有引用指向它), 以便于被浏览器中的垃圾回收器回收(释放对象)

        var b = null;
        b = ['xyx', 12];
        b = null; //此时['xyx', 12]没有引用指向它, 就变成了垃圾对象
        
    • 严格区分变量类型和数据类型

      • 数据的类型
        • 基本类型
        • 对象类型
      • 变量的类型(变量内存值的类型)
        • 基本类型: 保存就是基本数据的数据
        • 引用类型: 保存的是地址值

数据_变量_内存

  • 数据

    • 存储在内存中代表特定信息的, 本质上是0101..(二进制数)
    • 数据的特点: 可读与可传递
  • 内存

    • 内存条通电后产生的可存储数据的空间(临时的)
    • 内存产生和死亡: 内存条(电路板) ==> 通电 ==> 产生内存空间 ==> 处理数据 ==> 断电 ==> 内存空间和数据都消失
    • 内存的空间是临时的, 硬盘的空间是持久的
    • 释放内存: 清空内存中的数据, 标识内存可以再分配使用(内存不释放就不能复用)
      • 自动释放: 栈空间的局部变量
      • 垃圾回调器回调: 堆空间的垃圾对象
    • 一块内存的2个数据
      • 内部存储的数据
      • 地址值
    • 内存分类
      • 栈 : 全局变量/ 局部变量(空间较小)
      • 堆 : 对象(空间较大)
  • 变量

    • 可变化的量, 由变量名和变量值组成
    • 每个变量都对应的一块小内存, 变量名用来查找对应的内存, 变量值就是内存中保存的数据
  • 内存/数据/变量三者之间的关系

    • 内存用来存储数据的空间
    • 变量是内存的标识
  • 关于赋值和内存的问题

    • var a = xxx , a内存中保存的是什么?
      • xxx是基本数据, 保存的就是这个数据
      • xxx是对象, 保存的是对象的地址值
      • xxx是变量, 保存的是变量的内存内容(可能是基本数据, 也可能是地址值)
  • 关于引用变量赋值问题

    • n个引用变量指向同一个对象, 通过一个变量修改对象内部数据, 其他所有变量看到的是修改之后的数据

      var obj1 = {name: 'Tom'}
      var obj2 = obj1;
      obj2.age = 12;
      console.log(obj1.age);//12
      function fn (obj) {
          obj.name = 'BOb'
      }
      fu(obj1);
      console.log(obj2.name); //Bob
      
    • 2个引用变量指向同一个对象, 让其中一个引用变量指向另一个对象, 另一个引用变量依然指向前一个对象

      var a = {age: 12}
      var b = a
      a = {name: 'bob', age: 13}
      console.log(b.age, a.name, a.age) // 12 bob 13
      
      var a = {name: 'bob', age: 13}
      function fn(obj){ //obj是形参
          obj = {age: 15}
      }
      fn(a)//形参指向另一个对象, 所以实参a的值不变
      console.log(a.age) //13
      
  • 关于数据传递的问题

    • 在js调用函数时传递变量参数时, 是值传递还是引用传递

      • 是值(基本/地址值)传递

      • 可能是值传递, 也可能是引用传递(地址值)

        var a = 4;
        function fn(a){
            a = a + 1
        }
        fn(a)
        console.log(a) //4
        
        function fn2(obj){
          console.log(obj.name)
        }
        var obj = {name: 'tom'}
        fn2(obj)
        
  • 内存管理

    • JS引擎如何管理内存

      • 内存生命周期

        • 分配小内存空间, 得到它的使用权
        • 存储数据, 可以反复进行操作
        • 释放小内存空间
      • 释放内存

        • 局部变量: 函数执行完自动释放
        • 对象: 成为垃圾对象 ==> 垃圾回收器回收
        var a = 3;
        var obj = {}
        obj = undefined
        function fn(){
            var b = {}
        }
        fn() // b是自动释放, b所指向的对象时在后面的某个时刻由垃圾回收器回收
        

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容