Day1 前端高頻面試題之基礎版

2021-09-24 13:14:39 字數 3057 閱讀 4867

1、js的基本型別有哪些?引用型別有哪些? null 和 undefined 區別是什麼?

基本型別:null、undefined、number、string、boolean、symbol

引用型別:object、array、date、regexp、function

原始型別儲存的都是值,是沒有函式可以呼叫的,比如undefined.tostring()會報typeerror的錯

null用來表示尚未存在的物件;當宣告的變數還未被初始化時,變數的預設值為undefined

注意的是typeof null返回為object,因為特殊值null被認為是乙個空的物件引用

null是乙個表示"無"的物件,轉為數值時為0;undefined是乙個表示"無"的原始值,轉為數值時為nan

undefined == null // true

從記憶體來看 null 和 undefined 本質的區別是什麼?

給乙個全域性變數賦值為null,相當於將這個變數的指標物件以及值清空,如果是給物件的屬性 賦值為null,或者區域性變數賦值為null,相當於給這個屬性分配了一塊空的記憶體,然後值為null, js會**全域性變數為null的物件。

給乙個全域性變數賦值為undefined,相當於將這個物件的值清空,但是這個物件依舊存在,如果是給物件的屬性賦值 為undefined,說明這個值為空值

2、typeof 和 instanceof 區別,instanceof原理?

typeof 返回值:number、 boolean、string、undefined、object、function

typeof是一元運算子,返回值為字串,該字串用來說明運算數的資料型別 (陣列、正則、日期、物件的typeof返回值都是object)

instanceof用於判斷某個變數是否是某個物件的例項,返回值為true或false

3、=== 和 ==

[

]===

//false

undefined === undefined //true

==[]//false

undefined == undefined //true

4、如何判斷乙個變數是array型別?如何判斷乙個變數是number型別?
let arr =

typeof arr ===

'object'

arr instanceof

array

===true

arr.constructor === array

array.

isarray

(arr)

===true

object.prototype.tostring.

call

(arr)

==="[object array]"

object.prototype.tostring.

(arr)

==="[object array]"

let num =

1typeof num ===

'number'

a.constructor === number

object.prototype.tostring.

call

(num)

==="[object number]"

object.prototype.tostring.

(num)

==="[object number]"

5、如何正確判斷 this?箭頭函式的 this 是什麼?
function

foo(

)var a =

1foo()

const obj =

obj.

foo(

)const c =

newfoo

()

我們乙個個分析上面幾個場景

下面看看箭頭函式中的this

functiona(

)}}console.

log(a(

)()(

))

首先箭頭函式其實是沒有this的,箭頭函式中的this只取決包裹箭頭函式的第乙個普通函式的this

在這個例子中,因為包裹箭頭函式的第乙個普通函式是a,所以此時的thiswindow。另外對箭頭函式使用bind這類函式是無效的。

如果對乙個函式進行多次bind,那麼上下文會是什麼呢?

let a =

letfn

=function()

fn.bind()

.bind

(a)(

)// => ?

// 可以把上述**轉換成另一種形式

// fn.bind().bind(a) 等於

letfn2

=function

fn1().

(a)}

fn2(

)// 可以從上述**中發現,不管我們給函式 bind 幾次,fn 中的 this 永遠由第一次 bind 決定,所以結果永遠是 window。

以上就是this的規則了,但是可能會發生多個規則同時出現的情況,這時候不同的規則之間會根據優先順序最高的來決定this最終指向**。

首先,new的方式優先順序最高,接下來是bind這些函式,然後是obj.foo()這種呼叫方式,最後是foo這種呼叫方式,同時,箭頭函式的this一旦被繫結,就不會再被任何方式所改變。

高頻面試題 day8

面試題 請寫 一段js程式提取url中各個get引數 引數名和引數個數不確定 將其key value 形式返回到乙個json結構中,如 doctype html en utf 8 viewport content width device width,initial scale 1.0 docume...

前端面試準備Day1

今天開始為前端面試做準備啦,這兩天可能不會學很多,因為這周準備把大創結題報告寫完,還有專案的軟著申請也要寫完了,拖得時間太長了。因為之前剛剛把計算機網路看完第一遍,所以這兩天準備把html相關面試知識看完。今天是第一天的學習!相同點 都是用來引用外部的資源 不同點 src 相當於代替所引用資源的全部...

前端基礎面試題

padding 內邊距 margin 外邊距 border 邊框 1 外盒尺寸計算 元素空間尺寸 element空間高度 content height padding border margin element 空間寬度 content width padding border margin 2 內...