面试可能会遇到的问题(二)

基于前端面试整理了一些自己复习到的知识,留作总结。
参考链接已附,侵删。


https://coding.imooc.com/learn/list/129.html

7、数据类型转换

①js数据类型

7种数据类型,原始类型:Boolean、Null、Undefined、String、Number、Symbol;对象:Object

②实现显示类型转换

通过调用Number函数、String函数和Boolean函数来完成。

·Number函数的转换规则
原始类型转换:
数值:转换后还是原来的值。
字符串:如果可以被解析为数值,怎转换为相应的数值,否则得到NaN。空字符串转为0。
布尔值:true转为1,false转为0。
undefined:转为NaN。
null:转为0。
对象类型转换:
先调用对象自身的valueOf方法,返回原始类型的值,则对该值使用Number方法。
如果valueOf方法返回复合类型,再调用对象自身的toString方法,返回原始类型的值,则同上。
如果toString方法返回复合类型的值,则报错。
·String函数的转换规则
原始类型转换:
数值:转换后为相应的字符串。
字符串:转换后为原来的值。
布尔值:true转为"true",false转为"false"。
undefined:转为"undefined"。
null:转为"null"。
对象类型转换:
先调用对象自身的toString方法,返回原始类型的值,则对该值使用String方法。
如果toString方法返回复合类型,再调用对象自身的valueOf方法,返回原始类型的值,则同上。
如果valueOf方法返回复合类型的值,则报错。
·Boolean函数的转换规则
undefined、null、-0、+0、NaN、''(空字符串)都会转为false;其他一律为true。

③隐式类型转换条件

四则运算、判断语句、Native调用(比如console.log)

④typeof的返回值

参考MDN:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/typeof

object.valueOf()返回该对象的原始值。若对象没有原始值,则返回对象本身。
object.toString()返回表示该对象的字符串。toString() 返回"[object type]"

8、HTTP协议

①HTTP协议的主要特点

简单快速:每个资源是固定的URI
灵活:通过一个HTTP协议可以完成不同数据类型的传输
无连接: 连接一次就会断开,不会保持连接
无状态:客户端和服务端是两种身份,一次连接后就断开,下次再连接,服务端无法区分两次是否由同一客户端发起的请求

②HTTP报文的组成部分

1.请求报文:请求行、请求头、空行、请求体
2.响应报文:状态行、响应头、空行、响应体
请求行:HTTP方法、页面地址、HTTP协议及版本;
请求头:key/value值,告诉服务器端我要什么内容要注意什么类型;
空行:用来分隔请求头和请求体;
状态行:HTTP协议及版本 状态码 状态描述
状态行、响应头、空行、响应体与请求报文相对应

③HTTP方法

GET:获取资源;POST:传输资源;PUT:更新资源;DELETE:删除资源;HEAD:获得报文首部

④POST和GET的区别

1. GET在浏览器回退时是无害的,而POST会再次提交请求
2. GET产生的URL地址可以被收藏,而POST不可以
3. GET请求会被浏览器主动缓存,而POST不会,除非手动设置
4. GET请求只能进行url编码,而POST支持多种编码方式
5. GET请求参数会被完整保留在浏览器的历史记录中,而POST中的参数不会被保留
6. GET请求在URL中传送的参数是有长度限制的(2KB),而POST没有限制
7. 对参数的数据类型,GET只接受ASCII字符(所以不能放中文),而POST没有限制
8. GET比POST更不安全,因为参数直接暴露在URL上,所有不能用来传递敏感信息
9. GET参数通过URL传递,POST放在Request body中

⑤HTTP状态码

1XX:指示信息 - 表示请求已接收,继续处理
2XX:成功 - 表示请求已被成功接收
	200:客户端请求成功;
	206 Partial Content:客户发送一个带有Range头的GET请求,服务器完成了它(播放视频或音频地址时);
3XX:重定向 - 要完成请求必须进行更进一步的操作
	301 Moved Permanently:永久重定向 所请求的页面已经转换至新的url
	302 Found:临时重定向 所请求的页面已经临时转移至新的url
	304 Not Modified:客户端有缓存的文档并发出了一个条件性的请求,服务器告诉客户,原来缓存的文档还可以继续使用
4XX:客户端错误 - 请求有语法错误或请求无法实现
	400 Bad Request:客户端请求有语法错误,不能被服务器所理解
	401 Unauthorized:请求未经授权,这个状态码必须与WWW-Authenticate报头域一起使用(返回401浏览器会弹出输入用户名密码的验证信息框)
5XX:服务器错误 - 服务器未能实现合法的请求
	500 Internal Server Error:服务器发生不可预期的错误,原来缓存的文档还可以继续使用
	503 Server Unavailable:请求未完成,服务器临时过载或当机,一段时间后可能恢复正常

⑥ 持久连接

HTTP支持持久连接,1.1版本开始支持。
HTTP协议采用『请求-应答』模式,非Keep-Alive模式即普通模式下,每个请求/应答客户端和服务器都要新建一个连接,完成之后立即断开连接。
使用Keep-Alive模式(持久连接、连接重用)时,Keep-Alive功能使客户端与服务器连接持续有效,当服务器有后续请求时,Keep-Alive功能避免了建立或者重新建立连接。

⑦管线化

https://blog.csdn.net/yangguosb/article/details/78435579

持久连接的情况下,某个连接上的传递类似于(整个连接未中断)
请求1->响应1->请求2->响应2->...
管线化的情况下,通道是持久建立的,请求一次打包传输过去,响应也一次打包返回
(将多个HTTP请求整批提交的技术,而在传送过程中不需先等待服务端的回应)
请求1->请求2->请求3->响应1->响应2->响应3

管线化的特点:
1. 管线化通过持久连接完成,HTTP/1.1支持此技术
2. 只有GET和HEAD请求可以进行管线化,POST有所限制
3. 初次创建连接时不应启动管线化,因为服务器不一定支持HTTP/1.1版本协议
4. 管线化不会影响到响应到来的顺序(如果对请求/响应顺序敏感的话,需要客户端与服务端自定义顺序编号)
5. HTTP/1.1并不要求服务器也对响应进行管线化处理,只是要求对于管线化的请求不失败即可
6. 由于上面提到的服务器端的问题,开启管线化很可能并不会带来大幅度的性能提升,而且很多服务器端和代理程序对管线化的支持并不好,因此现代浏览器默认并未开启管线化支持

9、原型链

①创建对象有几种方法
1.对象字面量,通过new Object声明一个对象
2.使用显示构造函数创建对象(动态原型模式:在构造函数中动态添加原型方法)
3.使用Object.create()创建对象
②什么是原型、构造函数、实例、原型链

原型、构造函数、实例、原型链
原型链就是构造函数创建的实例一直往上寻找原型对象,直到找到Object.prototype为止。通过prototype和__proto__实现查找,形成原型链实例就可以共用原型对象上的属性和方法。

③instanceof的原理

instanceof
判断实例对象的__proto__与构造函数的prototype属性是否是同一个引用,顺着原型链向上走,只要是原型链上的构造函数,都会返回true。

如何判断构造函数是否是对象的构造函数,用constructor更严谨。
o.__proto__.constructor === Object
④关于new 运算符
new运算符后面跟一个构造函数foo,构造函数被执行。
首先一个新对象被创建,它继承了foo.prototype;
执行时,传入相应参数,同时this就指向了这个新实例。不传参时,new foo等同于new foo();
如果构造函数返回了一个对象,这个对象就会取代new出的结果。否则函数没有返回就new出来一个实例对象。

10、面向对象

①类与实例

类的声明:用构造函数声明一个类;ES6中用Class声明
生成实例:通过new运算符

②类与继承

如何实现继承:继承的本质都是利用原型链
继承的几种方式:

  1. 借助构造函数:在子类的构造函数中执行父类的构造函数,再添加自己的属性。缺点:子类无法实现父类原型链上的方法。
  2. 借助原型链:Child.prototype = new Parent() 将父类的一个实例赋值给子类的原型对象。缺点:由于原型对象共用,一个实例改变其原型上的属性,其他的实例也会随之改变。
  3. 组合继承(构造函数+原型链):在子类的构造函数中执行父类的构造函数,再添加自己的属性+将父类的一个实例赋值给子类的原型对象。缺点:父类的构造函数执行了两次,并且把父类原型对象的constructor也继承了。
  4. 组合继承优化1:在子类的构造函数中执行父类的构造函数,再添加自己的属性+Child.prototype = Parent.protot
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值