这是我参与「第四届青训营 」笔记创作活动的第8天
在青训营中有JavaScript的课 今天复习一下📕
数据类型
1、数据 类型
基本数据
string
number boolean undefined null(对象不用时赋null称为垃圾对象 (垃圾回收
对象类型(赋的是对象的地址值
object 任意对象
function 特别的对象(可执行
array 数值下标 内部有序
2、变量类型(变量值的类型
基本类型:保存的就是基本类型的数据
引用类型:保存的是地址值
3、判断
typeof 返回对应类型的字符串 不能判断null和object object和array
instanceof :判断对象的类型
===: undefined null
var a;
//typeof打印类型的字符串
// console.log(a,typeof a);//undefined 'undefined'
// a=4;
// console.log(typeof a==='number');
// a='abc';
// console.log(typeof a==='string');
// a=true;
// console.log(typeof a==='boolean');
// a=null;
// console.log(typeof a); //object
// console.log(a===null);
var b=null;//初始赋值null 表明将要赋值为对象
b=[12,3];
b=null;//释放b
var b1={
b2:[1,'abc',console.log],
b3:function () {
console.log('b3');
}
}
console.log(b1 instanceof Object,b1 instanceof Array)//true false
console.log(b1.b2 instanceof Object,b1.b2 instanceof Array)//true true
console.log(b1.b3 instanceof Object,b1.b3 instanceof Function)//true true
console.log(typeof b1.b2[2])
数据、变量、内存
内存
内存的产生和死亡:内存条(电路板=》通电=》产生内存空间=》存储数据=》处理数据=》断电=》内存空间和数据都消失
一块小内存的2个数据
变量
由变量名和变量值组成
每个变量都对应一块小内存,变量名用来查找对应的内存
变量值就是内存中保存的数据
JS引擎如何管理内存
1、内存生命周期
·分配小内存空间,得到它的使用权
·存储数据,可以反复进行操作
·释放小内存空间
2、释放内存空间
·局部变量:函数执行完自动释放
·对象:成为垃圾对象=》垃圾回收器回收
function fn()
{
var b={};
}
fn();//b是自动释放 ,b所指对象是在后面某时被垃圾回收
对象
什么是对象
- 多个数据的封装体
- 用来保存多个数据的容器
- 一个对象代表现实中的一个事物
为什么要用对象
统一管理多个数据
对象的组成
属性:属性名和属性值
方法:特别属性 属性值是函数
如何访问对象内部数据
对象.属性名,有时不能用
对象[“属性名”] 通用
- 属性名包含特殊字符
- 变量名不确定
var p={};
p['content-type']='text/json';
console.log(p['content-type']);
var name='mname';
var value=18;
p[name]=value;
函数
什么是函数
- 实现特定功能的多条语句的封装
- 只有函数是可以执行的 其他类型的数据不能执行
为什么要用函数
- 提高代码复用
- 便于阅读交流
如何自定义函数
- 函数声明
- 表达式 var xx =function(){}
如何调用函数
- test()直接调用
- obj.test()通过对象调用
- new test() new调用
- test.call/apply(obj)相当于obj.test(),但可以临时调用不存在的方法
var obj={};
function test(){
this.xx='abc';
}
//obj.test()不能直接调用 根本不存在这个方法
test.call(obj);//可以让一个函数成为指定任意对象的方法进行调用
console.log(obj.xx);// 'abc'
this
-
this是什么
- 任何函数本质上都是通过某个对象来调用的 没有指定就windows
- 所有函数内部都有一个this
- 他的值是调用函数的当前对象
如何确定this的值
test():window
p.test():p
var p=new test(): p
p.call(obj):obj
原型链
1.原型链
访问一个对象的属性时,
先在自身属性中查找,找到返回
如果没有,就沿着_ proto _这条链向上查找 直到返回
如果最终没找到返回undefined
别名:隐式原型链
作用:查找对象的属性(方法
2.构造函数/原型/实体对象的关系
3.构造函数/原型/实体对象的关系2
变量提升和函数提升
1.变量声明提升
通过var定义变量 在定义语句之前就可以访问到
值为undefined
2.函数声明提升
通过function声明的函数 在之前就可以直接调用
值为函数定义对象
执行上下文
全局执行上下文
-
在执行全局代码前window确定为全局执行上下文
-
对全局数据进行预处理
- var定义的全局变量=》undefined 添加为window属性
- function声明的全局函数==》赋值,添加为window的方法
- this==》赋值window
-
开始执行全局代码
函数执行上下文
-
在调用函数,准备执行函数体之前,创建对应的函数执行上下文
-
对局部数据进行预处理
- 形参变量=》赋值实参=》添加为上下文中的属性
- arguments=》赋值,添加为执行上下文的属性
- var定义的局部变量=》undefined,添加为执行上下文的属性
- function声明的函数=》赋值fun,添加为执行上下文的方法
- this=》赋值(调用函数的对象)
💭💭💭
记录前端学习中的问题📜
若本文对你有帮助 欢迎点赞收藏👍📑
若有纰漏,敬请包涵,评论区欢迎指正👂