前端web 企业真实面试题真题 20道 带答案(7)

目录

1.简述盒模型?

2.说说BFC?

5.数据类型

6.this指向?

7.null和undefined区别

8.cookie,sessionStorage和localStorage区别

9.三等号和双等号区别?

10.数组原生方法?哪些不会改变原数组?

11.for in和for of区别?

12.原型链重点是什么如何打印?

13.vue优点?

14.vue生命周期函数

15.组件data为什么返回函数

18.vuex和localstorage区别?

19.vue中SSR是什么?(重点)

20.vue中key作用?


1.简述盒模型?

CSS盒模型本质上是一个盒子,封装周围的HTML元素,它包括:边距margin,边框border,填充padding,和实际内容content。盒模型允许我们在其它元素和周围元素边框之间的空间放置元素

2.说说BFC?

BFC(Block Formatting Context)格式化上下文,是Web页面中盒模型布局的CSS渲染模式,指一个独立的渲染区域或者说是一个隔离的独立容器。

    BFC应用

防止margin重叠

清除内部浮动

自适应两(多)栏布局

防止字体环绕

    触发BFC条件

根元素

float的值不为none

overflow的值不为visible

display的值为inline-block、table-cell、table-caption

position的值为absolute、fixed

    BFC的特性

内部的Box会在垂直方向上一个接一个的放置。

垂直方向上的距离由margin决定

bfc的区域不会与float的元素区域重叠。

计算bfc的高度时,浮动元素也参与计算

bfc就是页面上的一个独立容器,容器里面的子元素不会影响外面元素。

3.块级元素有哪些,行内元素有哪些?

行内元素有:

b,big,i,small,tt

abbr,acronym,cite,code,dfn,em,kbd

strong,samp,var

a,bdo,br,img,map,object,q

script,span,sub,sup

button,input

label,select,textarea

块级元素有:

address、article、aside、audio、blockquote、canvas、

dd、div、dl、fieldset、figcaption、figure、

footer、form、h1、header、hgroup、hr、noscript、

ol output p pre section table tfoot

ul video 

4.display的指向说明,有什么作用?

css里的display属性的作用是规定元素应该生成的框的类型。display属性是前端开发中常用的一个属性,常用的属性值有block、none、inline、inline-block。

block: 将元素将显示为块级元素,元素前后会带有换行符,通常用于将行内元素转换为块级元素时使用。

display:none这个值表示元素不被显示。当你想要某个元素隐藏时,就可以给某个元素设置这个属性,它就会消失在网页中,但元素并没有在文档中删除,只是隐藏在网页结构中,不在网页中显示而已。但如果你想要元素显示的话,可以给元素设置display:block,元素就可以显示在网页中了。

display:inline 的作用可以将一个块级元素转换成行内元素,那么这个块级元素将不能再设置宽和高以及上下方向的margin和padding。这个块级元素实际的宽度和高度都是auto,并不是我们设定的值。

display:inline-block我们可以得到它是结合了inline和block并保留了它们的特性。所以设置了inline-block属性的元素既具有block元素可以设置width和height属性的特性,又保持了inline元素不换行的特性。

5.数据类型

1基本数据类型:

string,number,Boolean,null,undefined;

2引用数据类型object(Object,Array),function

3 ES6新增 symbol

6.this指向?

普通函数调用指向全局window

对象函数调用 谁调用this指向谁

构造函数调用 this指向实例对象

箭头函数本身没有this指向,继承父级

7.null和undefined区别

Undefined类型只有一个值,即undefined。当声明的变量还未被初始化时,变量的默认值为undefined。用法:

变量被声明了,但没有赋值时,就等于undefined。

调用函数时,应该提供的参数没有提供,该参数等于undefined。

对象没有赋值的属性,该属性的值为undefined。

函数没有返回值时,默认返回undefined。

Null类型也只有一个值,即null。null用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象。用法

作为函数的参数,表示该函数的参数不是对象。

作为对象原型链的终点。

8.cookie,sessionStorage和localStorage区别

cookie用来保存登录信息,大小限制为4KB左右

localStorage是Html5新增的,用于本地数据存储,保存的数据没有过期时间,一般浏览器大小限制在5MB

sessionStorage接口方法和localStorage类似,但保存的数据的只会在当前会话中保存下来,页面关闭后会被清空。

名称

生命期

大小

与服务器通信

cookie

一般由服务器生成,可设置失效时间。

如果在浏览器端生成Cookie,

默认是关闭浏览器后失效

4KB

每次都会携带在HTTP头中,

如果使用cookie保存过多数据会带来性能问题

localStorage

除非被清除,

否则永久保存

5MB

仅在浏览器中保存,不与服务器通信

sessionStorage

仅在当前会话下有效,

关闭页面或浏览器后被清除

5MB

仅在浏览器中保存,不与服务器通信

9.三等号和双等号区别?

区别:“==”表示相等,“====”表示严格相等。“==”运算符会在进行相等比较之前先进行必要值的类型转换;而“===”运算符不会执行类型转换,因此如果两个值类型不同,那么比较时,直接返回false。”

10.数组原生方法?哪些不会改变原数组?

改变原数组的方法

  1. splice() 添加/删除数组元素

语法:arrayObject.splice(index,howmany,item1,.....,itemX)

参数:

   1.index:必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。

   2.howmany:可选。要删除的项目数量。如果设置为 0,则不会删除项目。

   3.item1, ..., itemX:可选。向数组添加的新项目。

返回值: 如果有元素被删除,返回包含被删除项目的新数组。

  1. sort() 数组排序

语法:arrayObject.sort(sortby)

参数:

   1.sortby 可选。规定排序顺序。必须是函数。。

返回值: 返回包排序后的新数组。

  1. pop() 删除一个数组中的最后的一个元素

语法:arrayObject.pop()

参数:无

返回值: 返回被删除的元素。

  1. shift() 删除数组的第一个元素

语法:arrayObject.shift()

参数:无

返回值: 返回被删除的元素。

  1. push() 向数组的末尾添加元素

语法:arrayObject.push(newelement1,newelement2,....,newelementX)

参数:

   1.newelement1 必需。要添加到数组的第一个元素。

   2.newelement2 可选。要添加到数组的第二个元素。

   3.newelementX 可选。可添加若干个元素。

返回值: 返回被删除的元素。

  1. unshift() 向数组的开头添加一个或更多元素

语法:arrayObject.unshift(newelement1,newelement2,....,newelementX)

参数:

   1.newelement1 必需。要添加到数组的第一个元素。

   2.newelement2 可选。要添加到数组的第二个元素。

   3.newelementX 可选。可添加若干个元素。

返回值: arrayObject 的新长度。。

  1. reverse() 颠倒数组中元素的顺序

语法:arrayObject.reverse()

参数:无

返回值: 颠倒后的新数组。

  1. copyWithin() 指定位置的成员复制到其他位置

语法:array.copyWithin(target, start = 0, end = this.length)

参数:

   1.target(必需):从该位置开始替换数据。如果为负值,表示倒数。

   2.start(可选):从该位置开始读取数据,默认为 0。如果为负值,表示倒数。

   3.end(可选):到该位置前停止读取数据,默认等于数组长度。如果为负值,表示倒数。

返回值: 返回当前数组。

  1. fill() 填充数组

语法:array.fill(value, start, end)

参数:

   1.value 必需。填充的值。

   2.start 可选。开始填充位置。

   3.end 可选。停止填充位置 (默认为 array.length)

返回值: 返回当前数组。

不改变原数组的方法

  1. slice() 浅拷贝数组的元素

语法:array.slice(begin, end);

参数:

   1.begin(可选): 索引数值,接受负值,从该索引处开始提取原数组中的元素,默认值为0。

   2.end(可选):索引数值(不包括),接受负值,在该索引处前结束提取原数组元素,默认值为数组末尾(包括最后一个元素)。

返回值: 返回一个从开始到结束(不包括结束)选择的数组的一部分浅拷贝到一个新数组对象,且原数组不会被修改。

  1. join() 数组转字符串

语法:array.join(str)

参数:

   1.str(可选): 指定要使用的分隔符,默认使用逗号作为分隔符。

返回值: 返回生成的字符串。

  1. concat() 合并两个或多个数组

语法:var newArr =oldArray.concat(arrayX,arrayX,......,arrayX)

参数:

   1.arrayX(必须):该参数可以是具体的值,也可以是数组对象。可以是任意多个。

返回值: 返回返回合并后的新数组。

  1. indexOf() 查找数组是否存在某个元素

语法:array.indexOf(searchElement,fromIndex)

参数:

   1.searchElement(必须):被查找的元素

   2.fromIndex(可选):开始查找的位置(不能大于等于数组的长度,返回-1),接受负值,默认值为0。

返回值: 返回下标

  1. lastIndexOf() 查找指定元素在数组中的最后一个位置

语法:arr.lastIndexOf(searchElement,fromIndex)

参数:

   1.searchElement(必须): 被查找的元素

   2.fromIndex(可选): 逆向查找开始位置,默认值数组的长度-1,即查找整个数组。

返回值: 方法返回指定元素,在数组中的最后一个的索引,如果不存在则返回 -1。(从数组后面往前查找)

  1. includes() 查找数组是否包含某个元素

语法:array.includes(searchElement,fromIndex=0)

参数:

   1.searchElement(必须):被查找的元素

   2.fromIndex(可选):默认值为0,参数表示搜索的起始位置,接受负值。正值超过数组长度,数组不会被搜索,返回false。负值绝对值超过长数组度,重置从0开始搜索。

返回值: 返回布尔

11.for in和for of区别?

  1. for-of 无法遍历 不可迭代对象

可迭代对象包括: Array,Map,Set,String,TypedArray,arguments等等

  1. for-of 遍历的是值,for-in遍历的是key

12.原型链重点是什么如何打印?

我们已经假设Object.prototype是终点了,所以看起来不能是情况1。另外,抛出异常也不是好的设计,所以也不是情况3。那么情况2呢,它不存在原型属性,返回undefined怎么样?也不好,因为返回undefined一种解释是原型不存在,但是也相当于原型就是undefined。这样,在原型链上就会存在一个非对象的值。

所以,最佳选择就是null。一方面,你没法访问null的属性,所以起到了终止原型链的作用;另一方面,null在某种意义上也是一种对象,即空对象,因为null一开始就是为表示一个“空”的对象存在的。这样一来,就不会违反“原型链上只能有对象”的约定。

所以,“原型链的终点是null”虽然不是必须不可的,但是却是最合理的。

13.vue优点?

一、vue作为一款轻量级框架,门槛低,上手快,简单易学。

        二、vue可以进行组件化开发,数据与结构相分离,使代码量减少,从而提升开发效率,易于理解

        三、vue最突出的优势在于对数据进行双向绑定,使用虚拟DOM

        四、相较于传统页面通过超链接实现页面跳转,vue会使用路由跳转不会刷新页面

        五、vue是单页面应用,页面局部刷新,不用每次跳转都请求数据,加快了访问速度,提升了用户体验

14.vue生命周期函数

beforeCreate

组件实例被创建之初,组件的属性生效之前

created

组件实例已经完全创建,属性也绑定,但真实 dom 还没有生成,$el 还不可用

beforeMount

在挂载开始之前被调用:相关的 render 函数首次被调用

mounted

el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用该钩子

beforeUpdate

组件数据更新之前调用,发生在虚拟 DOM 打补丁之前

update

组件数据更新之后

activated

keep-alive 专属,组件被激活时调用

deactivated

keep-alive 专属,组件被销毁时调用

beforeDestory

组件销毁前调用

destoryed

组件销毁后调用

15.组件data为什么返回函数

组件中的data写成一个函数,数据以函数返回值形式定义,这样每复用一次组件,就会返回一份新的data。如果单纯的写成对象形式,就使得所有组件实例共用了一份data,造成了数据污染。

  1. 组件传值有哪些?

使用 props 和 emit,进行父子组件的通信

使用 event-bus 事件总线,进行任意组件的通信

使用 Vuex 共享数据,进行任意组件的通信

使用 $attrs / $listeners,实现父组件传递数据给子/孙组件

使用 provide / inject

  1. vuex有哪些属性?

vuex是一个能方便vue实例及其组件传输数据的插件 方便传输数据,作为公共存储数据的一个库

state: 状态中心

getters: 获取状态

mutations: 更改状态,同步的

actions: 异步更改状态

modules: 将state分成多个modules,便于管理

应用场景:单页应用中,组件之间的状态。音乐播放、登录状态、加入购物车。

18.vuex和localstorage区别?

1.实质区别
vuex存的是状态,存储在内存;localStorage是浏览器提供的接口,让你存的是接口,以文件的形式存储到本地
2.应用场景
vuex用于组件之间的传值,localStorage则主要用于页面之间的传值
3.永久性
当刷新页面时,vuex存储的值会丢失,localStorage不会
总结
localStorage可以代替vuex,对于不变的数据确实可以,但是当两个组件共同用以数据源,如果其中一个组件中的数据源改变,希望另一个组件响应变化,这时候就要选择用vuex。vuex是vue的状态管理机制,是方便组件之间通信的。一个组件的数据变化是会映射到使用这个数据的其他组件。而localStorage是本地存储,是将数据存储到浏览器的方法,一般在跨页面时使用。

19.vue中SSR是什么?(重点)

服务器渲染

Vue.js 是构建客户端应用程序的框架。默认情况下,可以在浏览器中输出 Vue 组件,进行生成 DOM 和操作 DOM。

然而,也可以将同一个组件渲染为服务器端的 HTML 字符串,将它们直接发送到浏览器,最后将静态标记"混合"为客户端上完全交互的应用程序。

服务器渲染的 Vue.js 应用程序也可以被认为是"同构"或"通用",因为应用程序的大部分代码都可以在服务器和客户端上运行。

20.vue中key作用?

key 的特殊 attribute 主要用在 Vue 的虚拟 DOM 算法,在新旧 nodes 对比时辨识 VNodes。如果不使用 key,Vue 会使用一种最大限度减少动态元素并且尽可能的尝试就地修改/复用相同类型元素的算法。而使用 key 时,它会基于 key 的变化重新排列元素顺序,并且会移除 key 不存在的元素。

猜你喜欢

转载自blog.csdn.net/weixin_59519449/article/details/124155091
今日推荐