前端面试知识点(三)

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和用户信息,并返回请求页面
    1

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值