Js 有哪些数据类型,区别是什么?分别存储在什么数据结构中?
答:Js 有两种数据类型:基本类型 和 引用类型
-
基本类型:String / Number / Null / Undefined / Boolean / Symbol
基本类型存储在栈内存中,它们的值都有固定的内存大小,通过按值访问,并由系统自动分配和自动释放,这样带来的好处就是,内存可以及时得到回收,相对于堆来说,更加容易管理内存空间。 -
引用类型:Object / Array / Function
引用类型存储在堆内存中,值大小不固定,栈内存中存放的该对象的访问地址,指向堆内存中的对象,JavaScript 不允许直接访问堆内存中的位置,因此操作对象时,实际操作对象的引用。
两种数据类型的区别在于:
| 栈内存 | 堆内存 |
|---|---|
| 存储基础数据类型 | 存储引用数据类型 |
| 按值访问 | 按引用访问 |
| 存储的值大小固定 | 存储的值大小不定,可动态调整 |
| 由系统自动分配内存空间 | 由代码进行指定分配 |
| 空间小,运行效率高 | 空间大,运行效率相对较低 |
| 先进后出,后进先出 | 无序存储,可根据引用直接获取 |
构造函数有哪些特点,new 一个构造函数时做了哪些事情?
答:首先什么是构造函数?在 js 中,通过关键字 new 来调用的函数,叫做构造函数。
构造函数的特点:
Js 的精度丢失问题
数组遍历方法 Foreach / Map / Reduce / Filter / Some / Every 等等的区别和用法
答: 这里有总结过~👉 【前端基础】数组方法
一个对象数组如何根据 对象里的 id 属性去重,如何用 reduce 实现
答:首先我们来回顾一下 reduce 函数的用法:
我们知道 reduce 函数允许结构一个 initValue 的参数,由于我们的问题是对一个对象数组去重,并返回一个新数组,那么我们的 initValue 就可以设置为一个空数组,然后用 reduce 进行遍历,符合条件的 return,作为下一次循环的新参数,这样最后返回的数组就是我们预期内的结果了。
实现如下:
let objArr = [
{id: 1, name: 'Echo'},
{id: 2, name: 'sss'},
{id: 1, name: 'owa'}
];
let hash = {};
objArr = objArr.reduce((item, next) =>{
if(!hash[next.id]){
console.log(item);
hash[next.id] = 1;
item.push(next);
}
return item;
}, []);
一个数组 找出里面连续的数字并返回新数组
例如:给定一个数组 [1,2,3,5,7,8,9,3,1] 中,找出 [1,2,3,7,8,9]
如何用数组的方式去遍历对象中的属性?
用面向对象来理解三大特性:封装 继承 多态
答:
-
封装:隐藏逻辑的实现过程,只对外暴露属性和方法,使用者只需要关系如何使用,不需要关心内部的具体实现过程。目的在与简化了实现过程,做到多处复用,提升了开发效率,当需要维护的时候,业务和逻辑是分开的,减低了迭代成本。
-
继承:建立一个对象和另一个对象的之间的父子关系,使得子对象可以拥有父对象的属性和方法。继承的目的在于实现功能的共享,通过 '借用' 父对象的特性,从而避免了些重复的代码,避免占用不必要的内存空间。
-
多态:字面意思就是多种状态,同一操作作用于不同的对象上,可以产生不同的解释和不同的执行结果。比方说,我养了一只猫和一只狗,我对它们发出同一个指令 "叫一下",猫会喵喵喵,而狗会汪汪汪,所以让它们叫一下就是同一操作,而叫声不同则是不同的执行结果。
但是多态最根本的作用是 通过把过程化的条件语句转化为对象的多态性,从而消除这些条件分支语句,简化代码。
具体解释可以看这里:👉【前端基础】如何理解 JavaScript 中的多态
深拷贝是什么?有哪几种方式实现方式?
答:之前总结过 👉 浅拷贝和深拷贝
call apply bind的区别和用法
ES6 中 class 的 super 语法糖的适用场景,原理。
ES6 的 Set 数据结构和数组有什么区别?
什么是闭包?闭包可能会产生什么问题?
讲一下内存泄漏
了解垃圾回收机制以及内存管理吗
说一下 async wait 和 Promise 的原理
http1.0 和 http2.0 的区别
答:这里其实要从 3 个版本来回答,篇幅比较长,所以单独写了一篇 :
👉 【前端基础】http1.0 / http2.0 / http / https 的区别
http 状态码
说一下 TCP 的三次握手
了解哪些前端的安全问题(XSS CSRF)
答:篇幅较长,之前总结过: