一、数据类型相关知识点
1、基本(值)类型
String
: 任意字符串Number
: 任意的数字Boolean
: true
/false
Undefined
: undefined
Null
: null
。使用typeof
时返回object
Symbol
:(ES6新增)。表示独一无二的值,最大的用法是用来定义对象的唯一属性名BigInt
:(ES10新增)。 BigInt 是一种数字类型的数据,它可以表示任意精度格式的整数
2、对象(引用)类型
Object
: 任意对象
Function
: 一种特别的对象(可以执行) --内部包含可运行的代码Array
: 一种特别的对象(key为数值下标属性, 内部数据是有序的)
3、判断方法
-
typeof
typeof
操作符返回一个字符串,表示未经计算的操作数的类型。- 可以判断:
undefined
/ 数值
/ 字符串
/ 布尔值
/ function
- 不能判断:
null
与object
与array
-
instanceof
- 专门判断对象的
具体类型
instanceof
运算符用于检测构造函数的prototype
属性是否出现在某个实例对象的原型链上
-
===
- 全等操作符比较两个值是否相等,两个被比较的值在比较前都不进行隐式转换
- 可以判断:
undefined
、null
4、相关问题
undefined
与null
的区别?
undefined
代表定义未赋值null
定义并赋值了, 只是值为null
- 什么时候给变量赋值为
null
呢?
- 初始赋值, 表明将要赋值为对象,可以用做约定俗成的占位符
- 结束前, 让对象成为垃圾对象(被垃圾回收器回收)
二、数据、变量、内存的理解
1、什么是数据?
- 存储在内存中代表特定信息的’东西’, 本质上是0101…
- 数据的特点:
可传递
, 可运算
- 一切皆数据, 函数也是数据
- 在内存中的所有操作的目标: 数据
2、什么是变量?
- 在程序运行过程中它的值是允许改变的量
- 一个变量对应一块小内存, 它的值保存在此内存中
3、什么是内存?
- 内存条通电后产生的可储存数据的空间(临时的)
- 一块内存包含2个方面的数据:
内部存储的数据
、地址值数据
- 内存分类
4、内存、数据、变量三者之间的关系
5、相关问题
- 关于赋值和内存的问题
let a = xxx, a内存中到底保存的是什么?
- xxx是
基本数据
, 保存的就是这个数据 - xxx是
对象
, 保存的是对象的地址值 - xxx是一个
变量
, 保存的是xxx的内存内容的复制(可能是基本数据, 也可能是地址值)
- 关于引用变量赋值问题
- 2个引用变量指向同一个对象, 通过一个变量修改对象内部数据, 另一个变量看到的是修改之后的数据
- 2个引用变量指向同一个对象, 让其中一个引用变量指向另一个对象, 另一引用变量依然指向前一个对象
- JS引擎如何管理内存?
内存生命周期
- 分配小内存空间, 得到它的使用权
- 存储数据, 可以反复进行操作
- 释放小内存空间
释放内存
- 局部变量: 函数执行完
自动释放
- 对象: 成为垃圾对象后
垃圾回收器回收
三、对象
1、对象的概念
- 什么是对象?
- 多个数据(
属性
)的集合 - 用来保存多个数据(
属性
)的容器 - 一个对象代表现实中的一个事物
- 为什么要用对象?
- 对象的组成
属性
: 属性名(字符串)和属性值(任意)组成方法
: 一种特别的属性(属性值是函数)
2、访问对象内部数据
.属性名
: 编码简单, 有时不能用['属性名']
: 编码麻烦, 能通用
- 当属性名有
特殊字符
/属性名是一个变量
时,只能使用['属性名']
的方式
四、函数
1、函数的概念
- 什么是函数?
- 实现
特定功能
的n条语句的封装体 - 只有函数是
可以执行
的, 其它类型的数据不能执行
- 为什么要用函数?
- 如何定义函数?
function fn1 () { console.log('fn1()' )
const fn2 = function () { console.log('fn2()' )
2、如何调用(执行)函数
fun()
: 直接调用obj.fun()
: 通过对象调用new fun()
: new调用fun.call/apply(obj)
: 临时让test成为obj的方法进行调用
3、回调函数
- 什么是回调函数?
- 你定义的
- 你没有调
- 但最终它执行了(在某个时刻或某个条件下)
- 常见的回调函数
dom事件
回调函数定时器
回调函数ajax请求
回调函数生命周期
回调函数
4、IIFE(自调用函数)
- 全称:
Immediately-Invoked Function Expression
自调用函数 - 作用:
- 隐藏实现
- 不会污染外部(一般指全局)命名空间
- 用它来编码js模块
- 示例:
(function () {
var a = 3
console.log(a + 3)
})()
console.log(a)
5、函数中的this
- this是什么?
- 任何函数本质上都是通过某个对象来调用的,如果没有直接指定就是
window
- 所有函数内部都有一个变量
this
- 它的值是
调用函数的当前对象
- 如何确定this的值?
fun()
: windowobj.fun()
: objnew fun()
: 新创建的对象fun.call(obj)
: obj