前端面試知識點(三)

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。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章