Solo  当前访客:0 开始使用
raincat 的个人博客
记录精彩的程序人生

JS学习

作者:raincat | 创建日期: 2021-04-08 10:29 | 浏览数: 0 | 评论数: 0

标签:

JS基础总结

数据类型

  1. 分类(2大类)
  • 基本(值)类型
  • Number: 任意数值
  • String: 任意文本
  • Boolean: true/false
  • undefined: undefined
  • null: null
  • 对象(引用)类型
  • Object: 一般对象类型
  • Array: 特别的对象类型(下标/内部数据有序)
  • Function: 特别的对象类型(可执行)
  1. 判断
  • typeof:
  • 可以区别: 数值, 字符串, 布尔值, undefined, function
  • 不能区别: null与对象, 一般对象与数组
  • instanceof
  • 专门用来判断对象数据的类型: Object, Array与Function
  • ===
  • 可以判断: undefined和null
    1. 分类
    1. 判断

    ===与==的区别
    ===:数据类型数值全等,不会进行数据转换
    == :数值全等,数据类型不一定相等

  • 相关问题

    1. undefined与null的区别?
    • undefined代表变量没有赋值
    • null: 代表变量赋值了, 只是值为null
    1. 什么时候将变量赋值为null?
    • 初始化赋值: 将要作为引用变量使用, 但对象还没有确定
    • 结束时: 将变量指向的对象成为垃圾对象
    1. 理解变量类型与数据类型?
    • js的变量本身是没有类型的, 变量的类型实际上是变量内存中

    数据的类型

    • 变量类型:

    • 对象类型——基本等同与引用类型
      变量类型

    • 基本类型: 保存基本类型数据的变量

    • 引用类型: 保存对象地址值的变量

    • 数据对象

      1. undefined与null的区别?
      1. 什么时候将变量赋值为null?
      1. 严格区别变量类型与数据类型?

数据, 变量与内存

  1. 什么是数据?
  • 存储于内存中代表特定信息的'东东', 本质就是0101二进制
  • 数据特点:具有可读和可传递的基本特性
    • 万物(一切)皆数据, 函数也是数据
    • 程序中所有操作的目标: 数据
    • 算术运算
    • 逻辑运算
    • 赋值
    • 调用函数传参
      ...
  1. 什么是内存?
  • 内存条通电后产生的存储空间(临时的)
  • 产生和死亡: 内存条(集成电路板)==>通电==>产生一定容量的存储空间==>存储各种数据==>断电==>内存全部消失
  • 内存的空间是临时的, 而硬盘的空间是持久的
  • 分配内存: 声明变量和函数或创建对象时, JS引擎会自动为此分配一定大小的内存来存放对应的数据
  • 释放内存: 清空内存中的数据, 标识内存可以再分配使用(内存不释放就不能复用)
    • 自动释放: 栈空间的局部变量
    • 垃圾回调器回调: 堆空间的垃圾对象
  • 一块内存包含2个数据
    • 内部存储的数据(一般数据/地址数据)
    • 内存地址值数据
  • 内存分类
    • 栈: 全局变量, 局部变量 (空间较小)
    • 堆: 对象 (空间较大)
  1. 什么是变量?
  • 值可以变化的量, 由变量名与变量值组成
  • 一个变量对应一块小内存, 变量名用来查找到内存, 变量值就是内存中保存的内容
  1. 内存,数据, 变量三者之间的关系
  • 内存是一个容器, 用来存储程序运行需要操作的数据
  • 变量是内存的标识, 我们通过变量找到对应的内存, 进而操作(读/写)内存中的数据
    1. 什么是数据?
    1. 什么是内存?
    1. 什么是变量?
    1. 内存,数据, 变量三者之间的关系
  • 相关问题

    1. 问题1: var a = xxx, a内存中到底保存的是什么?
    • xxx是一个基本数据——保存的就是这个数据
    • xxx是一个对象——保存的是对象的地址值
    • xxx是一个变量——可以保存数值也可以保存地址值
    1. 关于引用变量赋值问题
    • 2个引用变量指向同一个对象, 通过一个引用变量修改对象内部数据, 另一个引用变量也看得见
    • 2个引用变量指向同一个对象,让一个引用变量指向另一个对象, 另一个引用变量还是指向原来的对象
    1. 问题: 在js调用函数时传递变量参数时, 是值传递还是引用传递?
    • 只有值传递, 没有引用传递, 传递的都是变量的值, 只是这个值可能是基本数据, 也可能是地址(引用)数据
    • 如果后一种看成是引用传递, 那就值传递和引用传递都可以有
      相当于都是值传递,只是对象变量名保存的是对象的地址, 传递出去的就变成对象地址值, 即可以进行数据的修改
    1. 问题: JS引擎如何管理内存?
    2. 内存生命周期
      1). 分配需要的内存
      2). 使用分配到的内存
      3). 不需要时将其释放/归还
    3. 释放内存
    • 为执行函数分配的栈空间内存: 函数执行完自动释放
    • 存储对象的堆空间内存: 当内存没有引用指向时, 对象成为垃圾对象, 垃圾回收器后面就会回收释放此内存
    • 关于赋值与内存的问题?
    • 关于引用变量赋值问题?
    • 关于数据传递问题?
    • JS引擎如何管理内存?

对象

  1. 什么是对象?
  • 代表现实中的某个事物, 是该事物在编程中的抽象
  • 多个数据的集合体(封装体)
  • 用于保存多个数据的容器
  1. 为什么要用对象?
  • 便于对多个数据进行统一管理
  1. 对象的组成
  • 属性

    • 代表现实事物的状态数据
    • 由属性名和属性值组成
    • 属性名都是字符串类型, 属性值是任意类型
  • 方法

    • 代表现实事物的行为数据
    • 是特别的属性==>属性值是函数
  1. 如何访问对象内部数据?
  • .属性名: 编码简单, 但有时不能用
  • ['属性名']: 编码麻烦, 但通用
    1. 什么是对象?
    1. 为什么要用对象?
    1. 对象的组成
    1. 如何访问对象内部数据?
  • 相关问题

    什么时候必须使用['属性名']的方式访问对象内部数据?

    • 属性名不是合法的标识名
    • 属性名不确定
    • 什么时候必须使用['属性名']的方式?

函数

  1. 什么是函数?
  • 具有特定功能的n条语句的封装体
  • 只有函数是可执行的, 其它类型的数据是不可执行的
  • 函数也是对象
  1. 为什么要用函数?
  • 提高代码复用
  • 便于阅读和交流
  1. 如何定义函数?
  • 函数声明
  • 表达式
  1. 调用(执行)函数
 test()
 	new test()
 	obj.test()
 	test.call/apply(obj)
    1. 什么是函数?
    1. 为什么要用函数?
    1. 如何定义函数?
    1. 如何调用(执行)函数?
    1. 回调函数
    2. 什么函数才是回调函数?
    • 你定义的
    • 你没有直接调用
    • 但最终它执行了(在特定条件或时刻)
    1. 常见的回调函数?
    • DOM事件函数
    • 定时器函数
    • ajax回调函数(后面学)
    • 生命周期回调函数(后面学)
      1. 什么函数才是回调函数?
      1. 常见的回调函数?
    1. IIEF
    2. 理解
    • 全称: Immediately-Invoked Function Expression 立即调用函数表达式
    • 别名: 匿名函数自调用
    1. 作用
    • 隐藏内部实现
    • 不污染外部命名空间
      1. 理解
      1. 作用
    1. 函数中的this
    
    function Person(color) {
    
    // console.log(this)
    
    this.color = color;
    
    this.getColor = function () {
    
    // console.log(this)
    
    return this.color;
    };
    
    this.setColor = function (color) {
    
    // console.log(this)
    
    this.color = color;
    };
    
    }
    
    Person("red"); //this是谁?
    
    var p = new Person("yello"); //this是谁?
    
    p.getColor(); //this是谁?
    
    var obj = {};
    
    p.setColor.call(obj, "black"); //this是谁?
    
    var test = p.setColor;
    
    test(); //this是谁?
    
    function fun1() {
    
    function fun2() {
    
    console.log(this);
    }
    
    fun2(); //this是谁?
    
    }
    
    fun1();