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