js高级—基础深入总结

1. 数据类型

1.1. 常见数据类型

1.基本(值)类型: String、Number、boolean、undefined、null、Symbol(es6新增)
2.对象(引用)类型:
object:任意对象
function:一种特别的对象(可以执行)
Array:一种特别的对象(数值下标、内部数据是有序的)

1.2.数据类型判断:

  1. typeof: 返回数据类型的字符串表达,
    • 可以判断undefined、数值、字符串、布尔值、function
    • 不能判断:null与object 、object与array
  2. instanceof:判断引用对象是不是某对象的实例(具体类型)
  3. === / ==:可以判断undefined、null
var b1 = {
	b2:[1,'atguigu',console.log],
	b3:function (){
	console.log('b3')
}}
console.log(b1 instanceof Object,b1 instanceof Array) // true false
console.log(b1.b2 instanceof Array,b1.b2 instanceof Object) // true true
console.log(b1.b3 instanceof Function,b1.b3 instanceof Object) // true true
console.log(typeof b1.b3 === 'function') // true

1.3.underfined与null的区别

underfined代表定义未赋值
null定义赋值了,但值为null

1.4.什么时候给变量赋值为null

初始赋值为null,表明将要赋值为对象,确定对象就赋值;
最后赋值为null(让指向的对象成为垃圾对象被垃圾回收器回收)释放内存

1.5. 严格区别变量类型与数据类型:

  • 数据类型
    • 基本类型
    • 对象类型
  • 变量类型(变量内存值的类型)
    • 基本类型:保存的是基本类型的数据
    • 引用类型:保存的是地址值

2. 数据变量和内存

2.1. 什么是数据

  • 存储在内存中代表特定信息的东西,本质上是0101二进制数据
  • 特点:可传递、可运算

2.2. 什么是内存

内存条通电后产生的可存储数据的空间(临时的),而硬盘的空间是持久的

内存产生和死亡:内存条(电路版)=>通电=>产生内存空间=>存储数据=>处理数据=>断电=>内存空间和数据都消失
  • 释放内存:清空内存中的数据,标识内存可以再分配使用(内存不释放就不能复用)
  • 自动释放:栈空间的局部变量
  • 垃圾回调器回调:堆空间的垃圾对象(没有一个指针指向的时候就是垃圾对象)

内存分类:

  • 栈:全局变量/局部变量
  • 堆:对象

2.3. 什么是变量

可变化的量,由变量名和变量值组成;
每个变量都对应一块小内存,变量名用来查找对应的内存,变量值就是内存中保存的数据
变量名就是内存地址的别名

var obj={name:'Tom'};var a=obj
obj读的是内容,但内容是一个地址

在这里插入图片描述

2.4.内存、数据、变量三者关系

内存是用来存储数据的空间

问题1:var a=xxx,a内存中到底保存的是什么?

xxx如果是基本数据,保存的就是这个数据;
如果是对象,保存的就是对象的地址值;
如果是一个变量,保存的是xxx的值(基本数据或地址值)

问题2:关于引用变量赋值问题

  • 几个引用变量指向同一个对象(引用变量指向的都是同一个地址值),其中一个变量修改数据其他变量的数据也会改变
  • 2个变量指向同一个对象,让其中的一个引用变量指向另一个引用对象,另一个引用变量依然指向前一个对象
var a={age:12]
var b=a  前两行a和b都指向同一个地址值的堆
a={name:'BOB'] 这里a指向先前的地址改变了,重新指向了name这块地址;而b还是不变,因此b只有age,没有name
console.log(b.age)

2:结果是13;函数里就相当于 var obj = a; obj = {age:15};在调用完函数后函数内部的局部变量会被释放
在这里插入图片描述

问题3. 在js调用函数时传递变量参数时,是值传递还是引用传递?

理解1:值(基本/地址值)传递(把传参的值传递给形参)
理解2:可能是值传递也可能是引用传递(实参传给形参的值根据自身而定,实参如果是一个对象,传递的就是地址值)

	var a=3;
    function fn(a){
        a=a+1;
    }
    fn(a);
    console.log(a);//3

问题4. JS引擎如何管理内存

  • 内存生命周期:
    分配小内存空间,得到他的使用权 存储数据,可以反复进行操作
    释放小内存空间
    var a=3;obj={};obj=null占两个内存空间,{}对象被释放掉了

  • 释放内存
    局部变量:函数执行完自动释放
    对象:成为垃圾对象==>垃圾回收器回收

3. 对象

3.1 什么是对象?

代表现实中的某个事物,是该事物在编程中的抽象
多个数据的集合体(封装体)
用于保存多个数据的容器

3.2 为什么要用对象?

便于对多个数据进行统一管理

3.3 对象的组成属性

代表现实事物的状态数据
属性:由属性名(字符串类型)和属性值组(任意类型)组成
方法:一种特殊属性,属性值是函数
代表现实事物的行为数据

3.4 如何访问对象内部数据?

.属性名: 编码简单,但有时不能用
[‘属性名1’]: 编码麻烦,但通用

什么时候必须使用[‘’]方式

1.属性名包含特殊字符:- 空格
2.变量名不确定(属性名是个变量)

yar propName ='myAge'
var value =18//p.propName value //不能用
p[propName]=value

4. 函数

实现具有特定功能的封装体

为什么要用函数?

提高代码复用

如何定义函数?

函数声明、表达式

如何调用函数?

1.test():直接调用
2.obj,test():通过对象调用
3.new test():new调用
4.test.call/apply(obj):临时让test成为obj的方法进行调用

回调函数

自己定义一个函数,没有自己调,系统去帮你调用,这就是回调函数

常见的回调函数:
dom事件回调函数
定时器回调函数
ajax请求回调函数
生命周期回调函数

IIFE

立即调用函数表达式(匿名函数自调用)
作用:1.隐藏内部实现
2.不会污染外部(全局)命名空间

  • 21
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值