JS高级:基础总结
数据类型
基本类型
String:任意字符串
Number:任意数字
boolean:trur/false
undefined:undefined
null:null
判断
typeof:可以判断:undefined/数值/字符串/布尔值/function;
不能判断:null与object object与array
instanceof:判断对象的具体类型
===:可以判断:undefined/null
对象(引用)类型
Object:任意对象
Function:一种特别的对象(可以执行)
Array:一种特别的对象(数值下标,内部数据是有序的)
问题1
1.undefined与null的区别?
答:undefined代表定义未赋值;null定义并赋值了,只是值为null
2.什么时候给变量赋值为null?
答:初始赋值:表明将要赋值为对象;结束前:让对象成为垃圾对象(被垃圾回收器回收)
3.严格区别变量类型与数据类型?
答:数据类型:基本类型与对象类型;变量类型(变量内存值的类型):基本类型——保存就是基本类型的数据;引用类型——保存的是地址值
数据&变量&内存
问题2
1.数据:存储在内存中代表特定信息。数据特点:可传递,可运算
2.内存:内存条通电后产生的可储存数据的空间。一块小内存数据:内部存储的数据+地址值。内存分类:栈——全局变量/局部变量;堆——对象
3.变量:可变化的量,由变量名和变量值组成;每个变量对应一块小内存,变量名用来查找对应的内存,变量值就是内存中保存的数据
4.内存,数据,变量之间的关系?
答:内存用来存储数据的空间;变量是内存的标识。
问题3
1.var a = xxx,a内存中保存的是什么?
答:1)xxx是基本数据,保存这个数据;
2)xxx是对象,保存对象的地址值;
3)xxx是一个变量,保存的xxx的内存内容(基本数据or地址值)
2.引用变量赋值问题
答:1) n个引用变量指向同一个对象,通过一个变量修改对象内部数据,其他变量看到的是修改之后的数据;
2) n个引用变量指向同一个对象,让其中一个引用变量指向另一个对象,其他变量依然指向原对象
var obj1 = {name: 'Tom'};
var obj2 = obj1;
obj1.age = 12;
console.log(obj1.age); //12
function fn(obj){
obj.name = 'Bob';
}
fn(obj1);
console.log(obj2.name) //Bob
var a ={age:12};
var b = a;
a = {name :'BOB', age :13};
b.age = 14;
console.log(b.age, a.name, a.age)//14 BOB 13
3.在js调用函数时传递变量参数时,是值传递还是引用传递?
答:都是值(基本/地址值)传递
4.JS引擎如何管理内存?
- 内存生命周期:
** 分配小内存空间,得到使用权;
** 存储数据,可以反复进行操作;
** 释放小内存空间 - 释放内存
** 局部变量:函数执行完自动释放
** 对象:成为垃圾对象==>回收
对象
什么是对象
多个数据的封装体
用来保存多个数据的容器
一个对象代表现实中的一个事物
为什么要用对象
统一管理多个数据
对象的组成
属性:属性名(字符串)和属性值组成
方法:一种特别属性(属性值是函数)
如何访问对象内部数据
- .属性名:编码简单
- [‘属性名’]:较复杂:必须使用时:
*属性名包含特殊字符:- 空格
*属性名不确定
函数
什么是函数
实现特定功能的n条语句的封装体
只有函数可以执行,其他类型数据不能执行
为什么用函数
提高代码复用
便于阅读交流
如何定义函数
函数声明+表达式
如何调用函数
test():直接调用
obj.test():通过对象调用
new test():new调用
test.call/apply(obj):临时让test成为obj的方法进行调用
回调函数
什么函数才是回调函数
定义了
没有调用
但最终执行了
常见的回调函数
dom事件回调函数
定时器回调函数
ajax请求回调函数
生命周期回调函数
IIFE
立即执行函数表达式
Immediately-Invoked Function Expression
(function () {}) ()
作用
隐藏实现
不影响外部命名空间
函数中的this
this定义
- 任何函数本质上都是通过某个对象来调用,若没有直接指定,就是window
- 所有函数内部都有一个变量this
- 它的值是调用函数的当前对象
如何确定
- test():window
- p.test():p
- new test():新创建的对象
- p.call(obj):obj