前端面试知识点(三)

    xiaoxiao2022-07-07  158

    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; //时间格式要注意

    生成流程

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

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

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

    最新回复(0)