数据类型

分类

  1. 基本(值)类型

    • String

      任意字符串

    • Number

      任意数字

    • boolean

      true/false

    • undefined

      undefined

    • null

      null

  2. 对象(引用)类型

    • Object

      任意对象

    • Function

      一种特别的对象(封装了一段可执行的具有一定功能的代码)

    • Array

      一种特别的对象(数值下标,内部数据是有序的)

判断

  1. typeof

    • typeof返回数据类型的字符串表达

    • 可以判断undefined/数值/字符串/布尔值/function

    • 不能判断nullobjectobjectarray

      image-20210523222715761

  2. instanceof

    • 翻译:实例

    • 判断对象的具体类型

      image-20210523224412061

  3. === /==

    • ===不会做数据转换
    • ==会做数据转换
    • ===可以判断undefinednull
  • 实例对象与类型对象

    image-20210523225308931

问题

  1. undefinednull的区别?

    • undefined代表定义未赋值

    • null代表定义并赋值了,只是值为null

      image-20210523230438530
  2. 什么时候给变量赋值为null呢?

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

    • 结束前,让对象成为垃圾对象(被垃圾回收器回收)

      image-20210523230455580
  3. 严格区别变量类型与数据类型?

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

数据—变量—内存

  • 什么是数据?

    存储在内存中代表特定信息的‘东东’,本质上是0101….

    数据的特点:可传递,可运算

  • 什么是内存?

    内存条在通电后产生的可存储数据的空间(临时的)

    内存产生和死亡:内存条(电路板)==》通电==》产生内存空间==》存储数据==》处理数据==》断电==》内存空间和数据都消失

    内存分类:

    • 栈:全局变量/局部变量
    • 堆:对象
  • 什么是变量?

    可变化的量,由变量名和变量值组成

    每个变量都对应一块小内存,变量名用来查找对应的内存,变量值就是内存中保存的数据

  • var a = xxx,a内存到底保存的是什么?

    xxx是基本数据,保存的就是这个数据

    xxx是对象,保存的就是这个对象的地址值

    xxx是一个变量,保存的是xxx的内存内容(可能是基本数据,可能是地址值)

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

    • 理解1:都是值(基本/地址值)传递
    • 理解2:可能是值传递,也可能是引用传递(地址值)
  • JS引擎如何管理内存?

    • 内存生命周期

      分配小内存空间,得到它的使用权

      存储数据,可以反复进行操作

      释放小内存空间

    • 释放内存

      局部变量:函数执行完自动释放

      对象:成为垃圾对象==》垃圾回收器回收

对象

  • 什么是对象?

    • 多个数据的封装体
    • 用来保存多个数据的容器
    • 一个对象代表现实中的一个事务
  • 为什么要用对象?

    • 统一管理多个数据
  • 对象的组成:

    • 属性:由属性名(字符串)和属性值(任意)组成
    • 方法(一种特别的属性):属性值为函数
  • 如何访问对象内部数据?

    • .属性名:编码简单,有时不能用

    • ['属性名']:编码麻烦,能通用

    • 什么时候必须使用['属性名']的方式?

      属性名包含特殊字符:空格

      变量名不确定

      image-20210524183742551

函数

  • 什么是函数?

    • 实现特定功能的n条语句的封装体
    • 只有函数是可以执行的,其他类型的数据不能执行
  • 为什么要用函数?

    • 提高代码复用
    • 便于阅读交流
  • 如何定义函数?

    • 函数声明

      image-20210524211326159
    • 表达式

      image-20210524211345609
  • 如何调用(执行)函数?

    • test():直接调用

    • obj.test():通过对象调用

    • new test:new调用

    • test.call/apply(obj):临时test成为obj的方法进行调用

      image-20210524211656163

回调函数

  • 什么函数才是回调函数?
    • 你定义的
    • 你没有调
    • 最终它执行了
  • 常见的回调函数?
    • dom事件回调函数
    • 定时器回调函数
    • ajax请求回调函数
    • 生命周期回调函数

IIFE

  • 理解:
    • 全称:Immediately-Invoked Function Expression(立即执行函数表达式)
  • 作用:
    • 隐藏实现
    • 不会污染外部(全局)命名空间
    • 用来编码js模块

函数中的this

  • this是什么?
    • 任何函数本质上都是通过某个对象调用的,如果没有指定就是window
    • 所有函数内部都有一个变量this
    • 它的值是调用函数的当前对象
  • 如何确定this的值?
    • test():window
    • p.test():p
    • new test():新创建的对象
    • p.call(obj):obj