JavaScript高级 | 青训营笔记

73 阅读4分钟

这是我参与「第四届青训营 」笔记创作活动的第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所指对象是在后面某时被垃圾回收

对象

什么是对象

  1. 多个数据的封装体
  2. 用来保存多个数据的容器
  3. 一个对象代表现实中的一个事物

为什么要用对象

统一管理多个数据

对象的组成

属性:属性名和属性值

方法:特别属性 属性值是函数

如何访问对象内部数据

对象.属性名,有时不能用

对象[“属性名”] 通用

  1. 属性名包含特殊字符
  2. 变量名不确定
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

  1. this是什么

    1. 任何函数本质上都是通过某个对象来调用的 没有指定就windows
    2. 所有函数内部都有一个this
    3. 他的值是调用函数的当前对象

如何确定this的值

test():window

p.test():p

var p=new test(): p

p.call(obj):obj

原型链

image-20220410205210146.png

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=》赋值(调用函数的对象)

💭💭💭

记录前端学习中的问题📜
若本文对你有帮助 欢迎点赞收藏👍📑
若有纰漏,敬请包涵,评论区欢迎指正👂