1. 数据类型系列问题
1.1 数据类型的分类
(1)基本数据类型:undefine、Null、Number、Boolean、String、BigInt、simbol(后两个ES6新增)
(2) 引用数据类型:Object
1.2 存储问题:
(1) js中所有的变量都是存储在栈内存中
(2) 基本数据类型直接在栈中存值。
(3) 引用数据类型数据存储在堆内存中,其变量是在栈中存储地址,在根据地址去堆内存中取值。
(4)综上,基本数据类型的存储是互相独立的,引用数据的存储是不独立的,如果A和B的地址同时指向堆内存的统一位置,A修改值,B也随着改变。
1.3 赋值问题:
(1)基本数据类型赋值
(2)引用数据类型赋“址”
1.4 undefine 和Null 问题
1.4.1 类型
(1) typeof (undefine) = undefine
(2)typeof(Null) = Object
1.4.2 运算
(1) undefine与任意类型的值运算均为NaN
(2)Null在运算时将其视为0
1.4.3 判断
(1) undefined = = Null true
(2)undefined = = = Null false
1.4.4 什么情况下返回undefine
(1) 声明了变量,但未赋值
(2) 函数没有返回值
(3) 函数没有传参
注意: typeof 与instanceof的区别
typeof 用于说明数据的类型
instanceof 用于判断一个变量是否属于某个实例对象
1.4.5 ‘’ 和 ‘=’
== 只要求数组相同即可,再比较之前会先进性类型转换
=== 必须数据类型和数值都要相同
1.4.6 js中的六个假值
undefined 、 null、 NaN、 0 、“”(空字符串) false
构造函数都是真值,如 new Boolean(false) new Number(0)
2. 函数
所有的函数都是对象
- 函数的定义
(1) 利用函数关键字定义函数
function foo(){}
(2) 函数表达式
var fn = function(){}
(3) 使用构造函数 new Function() 不清晰
var fn = new Function(‘参数1’,‘参数2’ , ‘执行语句1’;‘执行语句2’)
-
this指向问题
(1) 默认绑定
(2) 隐式绑定 obj.fn()
(3) 显示绑定 call(), apply(), bind()()
(4) new关键字绑定
(5)箭头函数,没有this指向,与父级保持一致 -
高阶函数
在函数的内部再定义函数,或者将函数作为返回值。 -
闭包
定义:一个函数想要访问另一个函数域中的局部变量,这就产生了闭包,被访问的函数称为闭包函数。 -
深拷贝和浅拷贝
深拷贝是拷贝的值,A深拷贝B的值,B发生改变,A不变
浅拷贝是拷贝的址,A浅拷贝B,A的值发生变化,B也变 -
面向对象和面向过程
面向过程:先分析步骤,按照步骤一步步执行
优点:性能高
面向对象:根据功能划分
优点:易复用、易拓展、易维护。由于对象具有继承、封装、多态的性能,因此容易开发低耦合的项目。
缺点:性能低