0%

811_技术面_js

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

他们之间的区别

​ 简单数据类型:存放在栈内存,占用空间小,大小固定,适合频繁被访问

​ 复杂数据类型:存放在堆内存,占用空间大,大小不固定,运行速度慢