Javascript常见面试题

1.同步和异步的区别?以及两者之间的优缺点?

同步:在主线程上排队之行的任务,只有在最前面的任务执行完成之后,才之行后面的任务。
异步:是指不进入主线程,而是进入了“任务队列”的任务,只有“任务队列”通知主线程,某个异步任务可执行了,该任务才会进入主线程执行。

同步的优点是:同步是按照顺序一个一个来,不会乱掉,更不会出现上面代码没有执行完就执行下面的代码,
缺点:是解析的速度没有异步的快;

异步的优点是:异步是接取一个任务,直接给后台,在接下一个任务,一直一直这样,谁的先读取完先执行谁的,
缺点:没有顺序 ,谁先读取完先执行谁的 ,会出现上面的代码还没出来下面的就已经出来了,会报错;

异步任务分为:宏任务   微任务

宏任务:包含整体代码script /  setTimeout /  setInterval
微任务:Promise.then(非new Promise) / process.nextTick(node中)

事件执行顺序:
1.先执行宏任务,在执行微任务
2.微任务根据先进先出的顺序执行
3.微任务清空后在执行宏任务
3.按先进先出的顺序取出执行

Promise 实现异步调用
asnyc/await 实现同步调用

2.JavaScript中的数据类型以及存储上的差别?

基本数据类型:
Number-String-Boolean-Undefined-null-symbol

引用数据类型,复杂类型统称为Object:
Object
Array
Function

存储区别(堆和栈)
基本数据类型和引用数据类型存储在内存中的位置不同:
栈(stack):会自动分配内存空间、自动释放,存放简单的数据段,占据固定的空间大小,存放基本数据类型。
堆(heap):动态分配内存空间,大小不固定不自动释放,用来存放引用数据类型。

声明变量时不同的内存地址分配:
-简单类型的值存放在栈中,在栈中存放的是对应的值
-引用类型对应的值存储在堆中,在栈中存放的是指向堆内存的地址

不同的类型数据导致赋值变量时的不同:
-简单类型赋值,是生成相同的值,两个对象对应不同的地址
-复杂类型赋值,是将保存对象的内存地址赋值给另一个变量。也就是两个变量指向堆内存中同一个对象

3.判断JS数据类型的六种方法?

typeof: 返回一个表示数据类型的字符串,typeof 可以对JS基础数据类型做出准确的判断,而对于引用类型返回的基本上都是object。

instanceof:只能用来判断两个对象是否属于原型链的关系, 而不能获取对象的具体类型。

constructor:JS对象的constructor是不稳定的,这个主要体现在自定义对象上,当开发者重写prototype后,原有的constructor会丢失,constructor会默认为Object。

Object.prototype.toString :toString是Object原型对象上的一个方法,该方法默认返回其调用者的具体类型。

===:可以判断 undefined,null

isArray:判断数据类型是否为数组Array。用typeof返回的是object。采用 Array.isArray() 方法判断。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值