## 数据类型的分类和判断 * 基本(值)类型 * Number ----- 任意数值 -------- typeof * String ----- 任意字符串 ------ typeof * Boolean ---- true/false ----- typeof * undefined --- undefined ----- typeof/=== * null -------- null ---------- === * 对象(引用)类型 * Object ----- typeof/instanceof * Array ------ instanceof * Function ---- typeof ## 数据,变量, 内存的理解 * 什么是数据? * 在内存中可读的, 可传递的保存了特定信息的'东东' * 一切皆数据, 函数也是数据 * 在内存中的所有操作的目标: 数据 * 什么是变量? * 在程序运行过程中它的值是允许改变的量 * 一个变量对应一块小内存, 它的值保存在此内存中 * 什么是内存? * 内存条通电后产生的存储空间(临时的) * 一块内存包含2个方面的数据 * 内部存储的数据 * 地址值数据 * 内存空间的分类 * 栈空间: 全局变量和局部变量 * 堆空间: 对象 * 内存,数据, 变量三者之间的关系 * 内存是容器, 用来存储不同数据 * 变量是内存的标识, 通过变量我们可以操作(读/写)内存中的数据 ## 对象的理解和使用 * 什么是对象? * 多个数据(属性)的集合 * 用来保存多个数据(属性)的容器 * 属性组成: * 属性名 : 字符串(标识) * 属性值 : 任意类型 * 属性的分类: * 一般 : 属性值不是function 描述对象的状态 * 方法 : 属性值为function的属性 描述对象的行为 * 特别的对象 * 数组: 属性名是0,1,2,3之类的索引 * 函数: 可以执行的 * 如何操作内部属性(方法) * .属性名 * ['属性名']: 属性名有特殊字符/属性名是一个变量 ## 函数的理解和使用 * 什么是函数? * 用来实现特定功能的, n条语句的封装体 * 只有函数类型的数据是可以执行的, 其它的都不可以 * 为什么要用函数? * 提高复用性 * 便于阅读交流 * 函数也是对象 * instanceof Object===true * 函数有属性: prototype * 函数有方法: call()/apply() * 可以添加新的属性/方法 * 函数的3种不同角色 * 一般函数 : 直接调用 * 构造函数 : 通过new调用 * 对象 : 通过.调用内部的属性/方法 * 函数中的this * 显式指定谁: obj.xxx() * 通过call/apply指定谁调用: xxx.call(obj) * 不指定谁调用: xxx() : window * 回调函数: 看背后是通过谁来调用的: window/其它 * 匿名函数自调用: ``` (function(w, obj){ //实现代码 })(window, obj) ``` * 专业术语为: IIFE (Immediately Invoked Function Expression) 立即调用函数表达式 * 回调函数的理解 * 什么函数才是回调函数? * 你定义的 * 你没有调用 * 但它最终执行了(在一定条件下或某个时刻) * 常用的回调函数 * dom事件回调函数 * 定时器回调函数 * ajax请求回调函数(后面讲解) * 生命周期回调函数(后面讲解)