1、js中的==和===有什么区别
==是判断值是否相等,===是判断值和类型是否全部相等
2、js中深浅拷贝的区别
浅拷贝:只拷贝指向对象的指针而不复制对象本身,新旧对象共享同一块内存
深拷贝:拷贝指针和对象,修改原来的对象不会改变新对象的值
3、原型(对象)、构造函数以及实例化对象的理解
原型:构造函数在创建的过程中,系统自动创建出来与构造函数相关联的一个空对象
构造函数:创建对象时用来初始化实例化对象
实例:通过构造函数和new创造出来的一个对象
类:class Star…
实例化对象:var ldh=new Star()
Star.prototype===ldh.proto
4、闭包的理解
定义:有权访问另一个函数作用域中变量的函数
优点:避免全局污染,不会被垃圾回收机制清除
缺点:消耗大量内存,可能导致内存泄漏
5、js函数中的this指向问题
普通函数:谁调用就指向谁
箭头函数:继承上一级函数中的this
call、apply、bind的区别
1、call和apply都可以调用函数修改this指向,但bind必须是以函数的形式传递
2、bind不会调用函数,只改变this指向
6、const、let、var的区别
const:必须先初始化声明,并且值不能修改
var: 全局变量,存在变量提升,可以重复声明
let:块级作用域,不存在变量提升,不能重复声明
7、undefined和null区别
undefined:表示未定义,未赋值的变量,typedef undefined==undefined。Number(undefined)==NaN
null:表示为空,不指向任何地址,typedef null==Object。Number(null)=0
8、js数据类型有哪些
简单数据类型:Number、String、Boolean、null、undefined、ES6新增(symbol、bigint)
复杂数据类型:Object、function
他们之间的区别
简单数据类型:存放在栈内存,占用空间小,大小固定,适合频繁被访问
复杂数据类型:存放在堆内存,占用空间大,大小不固定,运行速度慢