面经 2019/11/28    未完待续...

1、如何判断变量类型?typeof、instance of、constructor、Object.prototype.toString.call()。只用前2个会有局限性

typeof:在判断变量类型的时候比较适合用来处理基本数据类型,如果是引用类型的值 typeof恐怕就心有余而力不足了。

instanceof:会根据_proto_一层层往上找,找到匹配的数据类型就会输出true 找到null找不到才输出false 该运算符用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性。

constructor: 为了避免_propo_的一层层找 我们引用constructor方法 此属性返回对创建此对象的数组函数的引用

Object.prototype.toString.call():在js中该方法可以精准的判断对象类型,也是推荐使用的方法。可以判断基本数据类型:

 

2、call,apply,bind的不同? bind返回的是一个函数,而apply会立即执行

call、apply与bind区别:前两个可以自动执行,bind不会自动执行,需要手动调用

call、bind与apply区别:前两个都有无数个参数,apply只有两个参数,而且第二个参数为数组

 

3、跨域解决办法:document.domain, location.hash, window.name, window.postMessage, JSONP, WebSocket, CORS 。

CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。

 

由 XMLHttpRequest 或 Fetch 发起的跨域 HTTP 请求。

前端面试(三)

document.domain:若两个源所用协议、端口一致,主域相同而二级域名不同的话,可以借鉴该方法解决跨域请求。

 

JSONP:全称 JSON with Padding,是使用 AJAX 实现的请求不同源的跨域

 

jsonp虽然很简单,但是有如下缺点:

1)安全问题(请求代码中可能存在安全隐患)

2)要确定jsonp请求是否失败并不容易

前端面试(三)

XMLHttpRequest :

abort():停止当前请求;

getAllResponseHeaders():把HTTP请求的所有相应首部作为键/值对返回;

getResponseHeader("header"):返回指定首部的串值;

open("method", "url"):建立对服务器的调用;

send(content):向服务器发送请求;

setRequestHeader("header", "value"):把指定首部设置为所提供的值,在设置任何首部之前必须先调用open();

web sockets:

前端面试(三)

 

4、原生ajax的步骤:记忆不深。

原生:oAjax.open("GET", "a.txt?t='+new Date().getTime()", true);//加上t='+new Date().getTime()"

oAjax.send();

//客户端和服务器端有交互的时候会调用onreadystatechange

oAjax.onreadystatechange = function () {

if (oAjax.readyState == 4) {

if (oAjax.status == 200)//判断是否成功,如果是200,就代表成功

{

alert("成功" + oAjax.responseText);//读取a.txt文件成功就弹出成功。后面加上

oAjax.responseText会输出a.txt文本的内容

}

else {

alert("失败");

}

}

ajax的jquery写法:

$.ajax({

url: "", //请求的url地址 dataType: "json", //返回格式为json

async: true, //请求是否异步,默认为异步,这也是ajax重要特性

data: { }, //参数值 type: "GET", //请求方式

processData: false, //对表单data数据是否进行序列化

contentType: false, //dataType设置你收到服务器数据的格式

beforeSend: function () {

//请求前的处理

},

success: function (req) {

//请求成功时处理

},

complete: function () {

//请求完成的处理

},

error: function () {

//请求出错处理

}

});

 

5、promise.all方法不了解。类似的还有race、finally等有兴趣跨域看一下

 

6、箭头函数与普通函数的区别:回答不太好

(1)函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。

(2)不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。

(3)不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替。

(4)不可以使用yield命令,因此箭头函数不能用作 Generator 函数。

 

7、es6等新特性了解的较浅:promise的方法、async、模板字符串`` 解构赋值

 

8、spa单页面应用不了解。

 

9、vue keep-alive、vue router路由模式、vuex常用命令、active生命周期

keep-alive: 组件实例能够被在它们第一次被创建的时候缓存下来

vue router路由模式:

vux常用命令:http://note.youdao.com/noteshare?id=4b418de63109aeef4eb779e0ce6e797d&sub=F3523538C71946CE9AD35CECE6D7ACE3

state gettters mutations action modules

 

active生命周期: 创建 挂载 更新 删除

前端面试(三)

 

ES6、7等新特性学习不深,建议花时间学习一下阮一峰的ECMAScript 6 入门。如常用的结构赋值、模板字符串、class、async、module等。 框架方面库建议选择react、vue、angular中的一个深入学习使用。

也可以了解一下现在前端的发展方向https://github.com/kamranahmedse/developer-roadmap。

 

前端面试(三)

相关文章:

  • 2021-04-19
  • 2021-12-22
  • 2021-08-11
  • 2021-12-13
  • 2021-10-31
猜你喜欢
  • 2021-04-28
  • 2021-05-13
  • 2021-12-24
  • 2022-12-23
  • 2021-09-06
  • 2021-04-07
相关资源
相似解决方案