2018前端面试题及参考答案整理

1.什么是vue生命周期 ?

vue实例从被创建到销毁的一系列过程就叫vue生命周期. 也就是从开始创建、初始化数据、编译模版、挂载DOM→渲染、更新、渲染、卸载等一系列过程。

2.axios的特点有哪些

axios是一个基于promise的HTTP库,支持promise的所有API
它可以拦截请求和响应
它可以转换请求数据和响应数据,并对响应回来的内容自动转换为json类型的数据
它安全性更高,客户端支持防御XSRF

3.vue父组件怎么给子组件传值?

父组件的数据要通过prop传到子组件

6.谈谈javascript数组排序方法sort()的使用,重点介绍参数使用及内部机制?

语法:arrayObject.sort(sortby)

参数sortby可选,规定排序顺序,必须是函数

注:如果调用该方法是没有使用参数,将按字符编码的顺序进行排序,要实现这一点,首先应把数组的元素都转换成字符串,以便进行比较。

如果想按照其他的标准进行排序,就需要两个比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对排序的数字。比较函数应该具有两个参数a和b,其返回值如下:

若a < b,则返回一个小于0的值

若a=b,则返回一个0

若a>b,则返回一个大于0的值

7.简述DIV元素和span元素的区别

div是一个块级元素,span是内嵌元素。块元素相当于内嵌元素在前后各加了一个换行。其实,块元素和行内元素也不是一成不变的,只要给块元素定义display:inline,块元素就变成了内嵌元素,同样的,给内嵌元素定义了display:block就变成了块元素了。

8.说几条XHTML规范的内容(至少3条)

所有的标记都必须有一个相应的结束标记
所有标签的元素和属性的名字都必须使用小写
所有的xml标记都必须合理嵌套
所有的属性值都必须用引号“”括起来
所有的<和&特殊符号用编码表示
给所有属性赋一个值

9.对web标准化(或网站重构)知道哪些相关的知识,简述几条你知道的Web标准?

网页主要有三部分组成:结构(Structrue)、表现(presentation)和行为(Behavior)。对应的网站标准也分为三方面:

结构化标准语言,主要包括XHTML和XML;
表现标准主要包括css
行为标准主要包括对象模型(如W3C DOM)、ECMAScript等

10.localstorage和sessionstorage是什么?区别是什么?

localstorage和sessionstorage一样都是用来存储客户端临时信息的对象,他们均只能存储字符串类型对象

localstorage生命周期是永久的,这意味着除非用户在浏览器提供的UI上清除localstorage信息,否则这些信息将永远存在。

sessionstorage生命周期为当前窗口或标签,一旦窗口或标签被永久关闭了,那么所有通过sessionstorage存储的数据也将被清空。

不同浏览器无法共享localstorage或sessionstorage中的信息。相同浏览器的不同页面可以共享相同的localstorage(页面属于相同的域名和端口),但是不同页面或标签间无法共享sessionstorage。这里需要注意的是,页面及标签仅指顶级窗口,如果一个标签页包含多个iframe标签他们属于同源页面,那么他们之间是可以共享sessionstorage的。

11.如何获取一个元素的属性值

element.getAttribute(‘属性名称’)

12.json和jsonp的区别?

json返回的是一串json格式数据;而jsonp返回的是脚本代码(包含一个函数调用)

jsonp的全名叫做json with padding,就是把json对象用符合js语法的形式包裹起来以使其他的网站可以请求到,也就是将json封装成js文件传过去。

13.箭头函数与普通函数的区别?

箭头函数相当于匿名函数,并且化简了函数定义。箭头函数有两种格式,一种只包含一个表达式,连{}和return都省略掉了,还有一种可以包含多条语句,这时候就不能省略{}和return

箭头函数式匿名函数,不能作为构造函数,不能作为构造函数,不能使用new。

箭头函数不能绑定arguments,而取而代之用rest参数解决。

箭头函数通过call()或apply()方法调用一个函数时,只传入了一个参数,对this并没有影响。

箭头函数没有原型属性

箭头函数不能当做Generator函数,不能使用yield关键字。

总结:

箭头函数函数的this永远指向其上下文的this,任何方法都改变不了其指向,如call()、bind()、apply()。

普通函数的this指向调用它的那个对象。

14.Promise以及.then函数?

在JavaScript的世界中,所有的代码都是单线程执行的。
由于这个缺陷,导致了JavaScript的所有网络操作,浏览器事件,都必须是异步执行的。
异步执行可以调用回调函数实现:
承诺将来执行的对象在JavaScript中成为Promise对象
then方法提供一个自定义的回调函数,若传入非函数,则会忽略当前then方法。

15.什么是虚拟DOM?

虚拟DOM的核心思想是:对复杂的文档DOM结构提供一种方便的工具,进行最小的DOM操作
优点:
提供一种方便的工具,使得开发效率得到保证。
保证最小化的DOM操作,使得执行效率得到保证。

16.webpack四大特性?

1、entry入口 2、output输出 3、loader加载器 4、plugins插件

17.vue数据双向绑定原理?

vue数据绑定是通过数据劫持结合发布者-订阅者模式的方式来实现的。

因为vue是通过Object.defineProperty来实现数据劫持的

Object.defineProperty是用来做什么的,它可以来控制一个对象属性的一些特有操作,比如:读写权,是可以枚举。

实现过程:

实现数据的双向绑定,首先要对数据进行劫持监听,所以我们需要设置一个监听器observer,用来监听所有属性。如果属性发生变化了,就需要告诉订阅者Watcher看是否需要更新。因为订阅者是有很多个。所以我们需要有一个消息订阅器Dep来专门收集这些订阅者,然后在监听器observer和订阅者watch之间统一进行管理的。接着我们还需要有一个指令解析器Compile,对于每个节点元素进行扫描和解析,将相关指令对应初始化成一个订阅者watch,并替换模板数据或者绑定响应的函数,此时当订阅者watch接收到相应属性的变化,就会执行对应的更新函数,从而更新视图。因此接下去我们执行以下3个步骤,实现数据的双向绑定:
1、实现一个监听器observer,用来劫持并监听所有属性,如果有变动的,就通知订阅者。
2、实现一个订阅者watcher,可以收到属性的变化通知并执行相应的函数,从而更新视图。
3、实现一个解析器Compile,可以扫描和解析每个节点的相关指令,并根据初始化模板数据以及初始化相应的订阅器。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值