基础总结深入
数据类型:
- 分类(2大类)
- 基本(值)类型
①Number: 任意数值
②String: 任意文本
③Boolean: true/false
④undefined: undefined
⑤null: null - 对象(引用)类型
①Object: 任意对象
②Array: 特别的对象类型(下标/内部数据有序)
③Function: 特别的对象类型(可执行) - 判断
①typeof:返回的是数据类型的字符串表达形式
<1>可以区别: 数值, 字符串, 布尔值, undefined, function
<2>不能区别: null与对象, 一般对象与数组
②instanceof
<1>专门用来判断对象数据的类型
: Object, Array与Function
③ ===
<1>可以判断: undefined和null
undefined与null的区别?
- undefined代表没有赋值
- null代表赋值了, 只是值为null
- 什么时候给变量赋值为null呢?
①var a = null //a将指向一个对象, 但对象此时还没有确定
②a = null //让a指向的对象成为垃圾对象
- 严格区别变量类型与数据类型:
①js的变量本身是没有类型的, 变量的类型实际上是变量内存中数据的类型
②变量类型:
<1>基本类型: 保存基本类型数据的变量
<2>引用类型: 保存对象地址值的变量
③数据对象
<1>基本类型
<2>对象类型
什么是数据?
- 存储于内存中代表特定信息的’东东’, 本质就是0101二进制
- 具有可读和可传递的基本特性
- 万物(一切)皆数据, 函数也是数据
- 程序中所有操作的目标: 数据
①算术运算
②逻辑运算
③赋值
④调用函数传参
什么是内存?
- 内存条通电后产生的存储空间(临时的)
- 产生和死亡: 内存条(集成电路板)>通电>产生一定容量的存储空间==>存储各种数据==>断电==>内存全部消失
- 内存的空间是临时的, 而硬盘的空间是持久的
- 一块内存包含2个数据
①内部存储的数据(一般数据/地址数据)
②内存地址值数据
- 内存分类
①栈: 全局变量, 局部变量 (空间较小)
②堆: 对象 (空间较大)
什么是变量?
- 值可以变化的量, 由变量名与变量值组成
- 一个变量对应一块小内存, 变量名用来查找到内存, 变量值就是内存中保存的内容
内存,数据, 变量三者之间的关系:
内存是一个容器, 用来存储程序运行需要操作的数据
变量是内存的标识
,我们通过变量找到对应的内存, 进而操作(读/写)内存中的数据
var a = xxx, a内存中到底保存的是什么?
- xxx是一个基本数据
- xxx是一个对象
- xxx是一个变量
关于引用变量赋值问题:
- 2个引用变量指向同一个对象, 通过一个引用变量修改对象内部数据, 另一个引用变量也看得见
- 2个引用变量指向同一个对象,让一个引用变量指向另一个对象, 另一个引用变量还是指向原来的对象
在js调用函数时传递变量参数时, 是值传递还是引用传递?
- 只有值传递, 没有引用传递, 传递的都是变量的值,
只是这个值可能是基本数据, 也可能是地址(引用)数据
- 如果后一种看成是引用传递, 那就值传递和引用传递都可以有
JS引擎如何管理内存?
- 内存生命周期
1). 分配需要的内存
2). 使用分配到的内存
3). 不需要时将其释放/归还 - 释放内存
1).为执行函数分配的栈空间内存: 函数执行完自动释放
2).存储对象的堆空间内存: 当内存没有引用指向时, 对象成为垃圾对象, 垃圾回收器后面就会回收释放此内存
对象详解:
- 对象代表现实中的某个事物, 是该事物在编程中的抽象,多个数据的集合体(封装体),用于保存多个数据的容器。
- 为什么要用对象?
①便于对多个数据进行统一管理 - 对象的组成
①属性
<1>代表现实事物的状态数据
<2>由属性名和属性值组成
<3> 属性名都是字符串类型, 属性值是任意类型
②方法
<1>代表现实事物的行为数据
<2>是特别的属性==>属性值是函数 - 如何访问对象内部数据?
<1>.属性名: 编码简单, 但有时不能用
<2>[‘属性名’]: 编码麻烦, 但通用
什么时候必须使用[‘属性名’]的方式?
- 属性名不是合法的标识名
①需求: 添加一个属性: content-type: text/json - 属性名不确定
①属性名不确定
函数详解:
- 函数是具有特定功能的n条语句的封装体,只有函数是可执行的, 其它类型的数据是不可执行的。
- 函数也是对象
- 为什么要用函数?
①提高代码复用
②便于阅读和交流 - 如何定义函数?
①函数声明
②表达式
function f1 () {
// 函数声明
console.log('f1()')
}
var f2 = function () {
// 表达式
console.log('f2()')
}
- 如何调用(执行)函数?
①test()
②new test()
③obj.test()
④test.call/apply(obj)
什么函数才是回调函数?
- 回调函数就是你定义的,你没有直接调用,但最终它执行了(在特定条件或时刻)。
- 常见的回调函数?
① - DOM事件函数
②定时器函数
③ajax回调函数(后面学)
④生命周期回调函数(后面学)
IIEF详解:
- 全称: Immediately-Invoked Function Expression 立即调用函数表达式
- 别名: 匿名函数自调用
- 作用
①隐藏内部实现
②不污染外部命名空间
(function