js基础

254 阅读6分钟

前端知识

延迟加载的方式

asgnc   和HTML解析同步,不是顺次执行(谁加载完谁先执行)
defer    等HTML解析全部完成,才会执行,顺次执行

js的数据类型

基本数据类型   string、number、boolean、undefined、null、symbol、bigint
引用类型           object(array、function、date...)
注:NaN是一个数值类型,但是不是一个具体的数字

null和undefine的区别

null表示一个‘无’的对象(空对象指针),转为数值为0
undefined表示‘无’的原始值,转为数值时为NaN

==和===的区别

1.==比较的是值,===不仅比较值还比较数据类型
2.==比较不同类型的值时会进行隐式转换,隐式转换是通过JS方法中valueOf进行转换,在后台自动调用,不会显示在代码中
注:   null == undefined
        1.string与number比较会将string转成number
        2.boolean与number比较会将boolean转成number
        3.object(引用类型)与基本类型比较会将引用类型转成基本类型

判断变量的类型

typeof、instanceof、Object.prototype.toString.call() typeof主要是用来判断基础类型,其中null无法判断,会判断成object。数组和对象都会判断成object,函数会判断成function。 instanceof通过原型链来判断数据类型是否相同,缺点是无法判断原始数据类型,只能判断对象数据类型。 Object.prototype.toString.call可以判断所有的数据类型,一般是要封装成一个方法来使用

JS宏微任务

1.js是单线程语言,同步任务都执行完了才会执行事件循环的内容
2.js代码执行流程    同步任务-->事件循环(微任务->宏任务->微任务...)
3.会进入事件的循环的程序有:请求(ajax)、定时器(setTimeout)、事件(未执行的函数)
4.宏任务:setTimeout、ajax、DOM操作页面渲染、用户交互鼠标事件
   微任务:promise.then、asgnc和await

BFC盒子

1.BFC是一个完全独立的盒子,不干扰外界也不受外界干扰。
2.BFC这个盒子可以解决css上一些不太正常的样式问题(float高度塌陷,margin边距重叠)。
3.拥有以下样式的可以触发BFC。diplay的flex、inlie-block、table-cell属性,position的fixed、absolute属性,overflow的hidden属性。

浮动

1.浮动: 左浮动:float:left; 右浮动:float:right。
2.浮动的特点:脱离文档流,可能会导致父元素高度塌陷。解决塌陷:给父元素设置高度;给父元素设置overflow:hidden;给父级添加after伪类。

localstorage,sessionstorage,cookie的区别和共同点

共同点
1.存储在浏览器本地;
不同点
1.储存范围:localstorage是持久化储存(浏览器关闭也存在,可以用clearStorage清除),sessionstrorage仅在当前网页储存,cookie是只在设置的过期时间之前有效(关闭浏览器也存在)
2.储存时间:coolie可以设置过期时间,其他两个不行
3.存储量:cookie存储量不超过4k(根据浏览器变化),其他两个不超过5M;
4.应用场景:cookie是用于存储验证用户登录信息的token,localStorage用于存储不易变更的数据,减轻服务器负担,sessionStorage可以用来检测用户是否刷新进入页面,如音乐播放器恢复播放进度条的功能。

深浅拷贝

浅拷贝只复制引用地址,而未复制真正的值
深拷贝复制了真正的值,开辟了新的存储空间

继承

原型链继承   fn2.prototype = new fn2();
构造函数继承   fn2.call(fn1);
组合继承   原型链继承+构造函数继承;
ES6 class函数的extends关键字继承

call,apply,bind的区别

1.call、apply会立即执行。bind不会,它返回的是一个函数;
2.call、bind从第二参数开始都是函数的参数。apply第二个参数数组

闭包

1.一个可以访问另外一个函数内部变量的函数,被称为闭包;
2.闭包形成的原理是作用域链原理,当前作用域可以访问上级作用域中的变量;
3.闭包的特性:闭包函数被return到了外部,在函数执行结束后没有被销毁,所以在函数外部也能访问函数内部的局部变量;由于垃圾回收器不会将闭包中的变量销毁,于是就造成了内存泄漏,内存泄漏多了容易导致内存溢出;
4.闭包的应用:实现柯里化、防抖节流;

Promise

1.promise是一种异步编程,是ES6提供的一个构造函数,可以解决回调地狱问题,让代码看起来更加优雅。
2.特点:Promise这个构造函数是宏任务(同步执行),Promise的回调是异步微任务。

原型&原型链

1.原型是一个对象,是一个函数的prototype,也叫原型对象。 2.原型与原型用__proto__层层相连,这个链条就是原型链。

this指向问题、箭头函数的特性

1.普通函数中的this指向函数调用者,箭头函数中的this继承自函数所在执行上下文中的this。
2.箭头函数本身没有this,所以只能继承当前作用域中的this,又由于它没有this,所以也无法当做构造函数,不能拿来new。箭头函数也没有arguments和原型。

JS作用域

1.作用域:全局作用域、函数作用域、块级作用域(es6新增,使用let、const即可创建)、模块作用域。
2.作用域链:作用域链是代码执行时的一条词法环境链条。
3.js有变量提升的机制,声明变量时是否用了声明符(var、let、const),没有声明即为全局作用域中的变量。

重绘与重排

1.重排:当DOM的变化影响了元素的几何信息,浏览器需要重新计算元素的几何属性,将其安放在界面中的正确位置,这个过程叫做重排。表现为重新生成布局,重新排列元素。
2.重绘:当一个元素的外观发生改变,但没有改变布局,重新把元素外观绘制出来的过程,叫做重绘。表现为某些元素的外观被改变。
3.重排触发方式:页面初始渲染、添加/删除Dom、改变元素位置或尺寸、改变浏览器窗口尺寸。
4.重绘触发方式:修改元素的填充颜色、visibility。

函数式组件和类组件的区别

1.语法上的区别: 函数式组件是一个纯函数,它是需要接受props参数并且返回一个React元素就可以了。类组件是需要继承React.Component的,而且class组件需要创建render并且返回React元素,语法上来讲更复杂。
2.调用方式 函数式组件可以直接调用,返回一个新的React元素;类组件在调用时是需要创建一个实例的,然后通过调用实例里的render方法来返回一个React元素。
3.状态管理 函数式组件没有状态管理,类组件有状态管理。
4.使用场景 类组件没有具体的要求。函数式组件一般是用在大型项目中来分割大组件(函数式组件不用创建实例,所有更高效),一般情况下能用函数式组件就不用类组件,提升效率。