本周面试题总结

一、面试题:new内部做什么

  1. 创建一个空对象
  2. 设置原型链(将空对象的__proto__设置成该构造函数的原型对象)
  3. 调用student函数,并修改其内部this的指向为这个空对象,为空对象赋值
  4. 将创建好的对象返回出构造函数

二、谈谈你对原型对象的理解

  1. 原型对象是一个对象,他属于构造函数,js会为每一个构造函数内置一个原型对象,可以通过语法函数名.prototype获取
  2. 因为原型对象是对象,所以可以为其新增属性或者方法,给原型对象新增的属性或者方法,能被所属的构造函数,创建的任何一个实例对象所共同拥有
  3. 概念二constructor属于原型对象,任何一个原型对象都有一个constructor属性,该属性指向原型对象所属的构造函数
  4. 概念三\__proto__属性,该属性属于实例对象,指向实例对象所属的构造函数的原型对象

三、什么是原型链

原型链是一种查找对象属性或方法形成顺序

1.首先会在当前实例对象里查找是否存在对应属性,若有直接获取返回即可
2.如果实例对象里没有该属性,系统会接着去当前实例对象的构造函数的原型对象里继续查找是否存在该属性,若有,获取返回.
3.若当前实例对象的构造函数的原型对象里也没有该属性,系统还会不停止查找,会当前实例对象的构造函数的原型对象所属的构造函数的原型对象里继续查找
4.直到找到object构造函数的原型对象停止查找,如果此时还没有找到该属性,属性返回undefined,方法调用会报错.
首先在当前实例对象里查找是否存在对应属性,若没有会接着去当前实例对象的构造函数的原型对象,依次推之,直到找到object构造函数的原型对象停止查找,若此时还没有找到属性,返回undefined,没有方法会报错

四、同步和异步的区别

1.同步: 在发起网络请求时, 系统在得到服务器返回的结果之前, 无法继续向后执行代码, 直到得到返回的结果, 代码才会继续向下执行. 会造成等待或者延迟

2.在发起网络请求时, 系统不需要等待网络请求的结果, 可以继续向后执行后面的代码, 当请求到结果时, 会通过回调函数向用户返回得到的数据, 不会造成等待或者延迟

五、get请求和post请求的区别

1. get请求传递的数据会直接以键值对的格式拼接到url网址的后面, 而post请求传递的数据不会拼接到url网址的后面, 而会将其存入请求体.

2. get请求传递的数据的大小有限制, 最多1024字节. 而post传递的数据大小没有限制

3.get方式提交的数据, 因为是可见的, 所以存在安全性问题. post不可见, 相对安全

六、原生js,发起ajax请求的顺序

1. 创建网络请求对象 XMLHttpRequest对象
* IE浏览器不支持XMLHttpRequest对象, 需要兼容

2. 监听网络请求状态, 处理网络请求成功时的操作,readyState值为4的时候, 这时表示后台返回了所有数据,通过 "http的状态码" 来判断本次请求的状态,以2开头表示成功

3. 设置请求地址和请求类型

4. 发起网络请求

七、js如何操作json数据结构

1.json串转js原始数据类型   JSON.parse(json串),返回js原始数据类型

2.js原始数据类型转json串  JAON.stringify(js原始数据类型(数组/对象)),返回值:json串

八、什么是跨域???

当客户端的位置的url里的协议名,域名,端口号三者与服务端的url里的协议名,域名,端口号有一个不一致,就认为是跨域

2.为什么会有跨域问题???
* 浏览器存在同源策略,这是浏览器的基本安全功能,同源策略会阻止一个域的js与另一个域的内容交互

* 3.如果非同源,浏览器会有那些限制
* 3.1不允许js发起网络请求
*
* 3.2无法读取非同源页面里的cookie,localStorage
* 3.3无法操作非同园页面里的Dom

4.如何解决跨域问题
* 4.1前端主导的解决跨域办法jsonp跨域
* 4.1后端主导的解决跨域办法cors跨域

jsonp 是客户端与服务端跨域通讯的常用办法,优点:简单好用,兼容性好;缺点:只能发起get请求,无法发起post请求

原理:利用htmL 标签没有同源策略的特点,用标签发起网络请求,绕过js的同源策略,实现了跨域的网络请求

jsonp发请求
/*

* 1.创建script标签
* 2.给script标签设置src属性
* 3.将script标签添加到文档
* 4.删除script标签
*
* 我们发现,如果后台在返回数据的时候,返回给前端的如果是一个javaSctipt的代码字符串,那么前端可以直接解析该字符串,运行对应的javascript代码
*
* 所以,我们可以让后台返回一个与前端函数同名的一个函数调用的代码字符串,并将想要返回给前端的数据以实参的形式直接放入小括号里,这样前端在拿到返回字符串时,解析并运行,实际就调用了前端的同名函数,顺便的到后台数据.

九、window.onload和documnet.ready的区别

window.onload:整个页面加载完成后(包括里面的内容,如图片等)才加载相应的js;

document.ready:当dom树绘制完成后便加载;

勤学似春起之苗,不见其增,日有所长; 辍学如磨刀之石,不见其损,日所有亏!
原文地址:https://www.cnblogs.com/qiaozhiming123/p/14681798.html