欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

前端面试知识点(三)

程序员文章站 2022-03-07 18:41:07
...

1、类型转换问题([] == ![])

  可能有的童鞋已经知道了答案,可能还有些人还存在一丝疑惑,没关系下面我们一步步来讲解。
  首先,问题的答案是:true 那么为什么呢?
  在js中比较基本数据类型(除了es6中Symbol)都可以很轻松的比较出来,但是一涉及到对象的比较就有点棘手啦。在此之前你得清楚js中的 ===== 之前区别。

  先转换再比较相等 —— ==

  直接比较是否全等,不发生类型转换 —— ===

"1" == 1  // true
"1" === 1 // false

隐式转换:

  • -、*、/、% :一律转换成数值后计算

-‘+’情况下:

  • 数字+字符串 = 字符串 => 1+“2”=12
  • 数字+boolean/null(0) = 数字 => 2+true=3
  • 数字+undefined(会转为NaN) = NaN

js中值为false的属性:null,undefined,NaN,” ”,false,0,-0,其余为true

关系运算

数值按大小比较;

字符串按Unicode编码比较;

其中为一个数值则将另一个转为数值;一个是布尔值则先转为数值再比较;

一个是对象则先调用valueOf -> toString,再按上述比较;

为大佬们呈上一副比较不错的图片
前端面试知识点(三)
ok,有了上面的基础知识讲解后,就可以来解开问题的神秘面纱啦,[]!==[]肯定为真

1、 这个表达式中可以看到存在 ‘!’,它优先级要比 ‘==’ 的级别高,so,先计算右边式子

  其中,“ !,&&,|| ” 操作符在运算的时候会先调用Boolean(),再进行运算

  Boolean([]) // true

  取反:!true 为false,所以右边表达式为false

2、 再计算左边,此时表达式为 [] == false(存在一个布尔值,先转为数字再比较)

  此时表达式为:[] == 0;

  根据关系运算比较规则:一个为数值,一个为布尔值,将布尔转为数字再比较

  [].toString()=>""(空串)

  “”(空串)=> 0

  噔 噔 噔 :0 == 0 => true (大家可以思考一下 {} == !{})

2、&& 和 ||

1、逻辑与 &&

  • 符号两边都为true时,返回true
  • 符号两边任意一边为false时,返回false
  • 支持短路运算,第一个条件为false时,不再判断后面条件

2、逻辑非 ||

  • 只要有一个条件为true时,结果就为true
  • 当两个条件都为false时,结果才为false
  • 支持短路运算,第一个条件为true时,不再判断后面条件

关于短路运算:

'||':符号前面值为false,无论符号后面是否为true/false,返回符号后面的值
	0 || 5 =>5
'||':符号前面值为true,无论符号后面是否为true/false,返回符号前面的值
	1 || 5 =>1
'&&':符号前面的值为false,无论符号后面的是否为true/false,返回符号前面的值
	0 && 2=>0
'&&':符号前面的值为true,无论符号后面的是否为true/false,返回符号后面的值
	1 && 5=>5

3、cookie的生成过程

  想要知道cookie的生成过程,必须要先了解cookie是是什么?主要用来干什么?

cookie是什么

  http是无状态协议,再完成一次请求-响应后就会断开连接;再次请求,再次连接。这说明服务器但从请求中是无法知道请求者的身份的。设置cookie后,客户端每次请求的时候都会带上用户的sessionid,相当于一个身份证,再次请求的时候服务器先验证然后做出响应的回应。

cookie的类型

  cookie的类型有会话cookie和持久性cookie。会话cookie是在一次请求-响应结束后就会消失;持久性cookie是通过设置cookie的Expires值或者设置有效期(Max-Age)

Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2019 07:28:00 GMT;  //时间格式要注意

生成流程

  1. 客户端第一次请求服务器的时候,服务器端生成Sessionid和Set-Cookie报文头,放在HTTP报文中,返回给客户端
  2. 客户端收到后,读取Set-Cookie中的内容,并保存的本地的cookie文件中,下次再请求服务器时,请求头中会携带cookie
  3. 服务器端收到请求,会检索Cookie和用户信息,并返回请求页面
    前端面试知识点(三)

在我不是很了解cookie之前会有个疑问,客户端每次请求的时候都会带上cookie,那么第一次请求的时候会带上吗?

答案是否定的。因为cookie是由服务器端生成的,第一次请求的时候服务器会生成Set-Cookie然后把信息返回给客户端,浏览器再进行存储,再次请求就会带上cookie。