《web前端陪你讀書》 面試押題整理

前端開膛手發表於2018-05-08

音訊連結:www.ximalaya.com/30018073/so…

沙翼老師一直是我比較關注和欣賞的業內大佬,他的節目深入淺出,對初學者大有裨益,對有一定基礎的前端從業者建立知識體系也有一定的幫助。本文整理比較倉促,肯定也會存在許多錯誤,只作本人複習之用,不喜勿噴。

1,js資料型別

簡單型別:布林 字串 數字 undifined null

複雜型別:object

2,如何判斷資料型別

簡單型別:用typeof判斷,typeof是一元運算子,可以不跟括號

但是 null和object返回的都是object

3,如何對物件型別進行判斷,尤其是陣列

兩種辦法:constructor和isArray

正確辦法:Object.protoType.tostring.call( arr )

4,陣列的方法

push pop shift unshift reverse concat slice splice index filter...

對原陣列有影響的:push pop shift unshift reverse sort splice

5,陣列如何去重

1-空陣列,迴圈push,indexof()判斷

2-splice,從原陣列上進行操作

3-根據物件屬性不能重複的特性

4-對原陣列進行排序,然後迴圈,相鄰的如果重複即刪除

5-最短的去重辦法:[…new Set( arr )]

var arr = [1,2,2,3,4] // 需要去重的陣列

var set = new Set(arr) // {1,2,3,4}
var newArr = Array.from(set) // 再把set轉變成array

console.log(newArr) // [1,2,3,4]
複製程式碼

6,偽陣列

1-dom選擇器選擇出的節點列表

2-arguments物件

3-jq選擇器選擇出的jq物件

轉換方式:新建陣列,將偽陣列依次push進去

7,字串

charAt concat...

8,數字

如何判斷是否 nan,最常見的方式 isNan

但是isNan是用來判斷傳進來的引數能否轉化為數字的,因此首先要判斷是否為數字

更好的判斷方式:用===和自身進行判斷,js中只有nan和自身是不全等的

9,布林

有哪些轉換成

undefine 0 -0 null false "" NAN

空物件和空陣列轉換成物件都是true,newBealean(false)為true

!!將資料快速轉化成布林型別

10,new做了什麼

1-建立空物件

2,修改this指標,將this指標指向建立的物件

3,執行建構函式中所有的程式碼

4,將建立的物件作為返回值返回

11,new如果沒有引數,可以不寫括號;如果在建構函式中顯式的返回了非物件,返回的依然是物件,如果顯式地返回了其它物件,則返回其它物件(單例模式瞭解一下)

12,繼承方式

1-原型鏈繼承 物件a,物件b

將b繼承於a,b.prototype=new a()

只能繼承原型物件上的屬性,這些屬性都是共享的,無法實現多繼承

2-建構函式式繼承

在b中將a的函式全部執行一遍

可以實現多繼承,但是隻能繼承建構函式裡的屬性

3-組合式繼承,也就是將原型鏈繼承和建構函式式繼承都寫一遍

開發中最常見的,程式碼執行兩遍,速度較慢

4-原型式繼承,

5-寄生式繼承

6-組合寄生式繼承(完美繼承)

13,<script></script>標籤

兩個特殊的屬性:defer async

defer延遲執行,同時並行載入多個js,然後按上下順序依次執行

async非同步載入,下載後立即執行,不一定按上下順序

1-js中,js程式碼會堵塞html css程式碼渲染

2,-正常js下載,都是同步依次下載,但是隻要寫了defer或者async都會改為非同步下載的方式,aynsc在外部js載入完成之後如果瀏覽器空閒,併發load事件觸發之前執行

defer在js載入完成之後,文件解析完成之後才會執行,也就是說,只要寫了defer,即使你把script標籤放在head裡,也類似於放在body最下面

14,promise中then和catch的返回值永遠是一個新的promise例項,如果顯式地返回一個非promise物件,後面的then和catch都會立即執行

15,es6新增

陣列方法,from

箭頭函式的變化:沒有arguments物件,this指向也發生了變化

16,js中的事件實現

1-dom嵌入,標籤裡寫onclick

2-事件繫結,獲得節點onclick,從html裡轉移到js裡,方便管理

3-事件監聽

瀏覽器相容性處理:ie是attachEvent和dettachEvent

17,js事件流

捕獲-目標-冒泡

18,target和currentTarget的區別

target是指目標節點

currentTarget當前物件的目標節點

<ul>
    <li><span>hello 1</span></li>
    <li><span>hello 1</span></li>
    <li><span>hello 1</span></li>
    <li><span>hello 1</span></li>
  </ul>
  <script>
    let ul = document.querySelectorAll('ul')[0]
    let aLi = document.querySelectorAll('li')
    $('ul').on('click','li',function(e){
 
        console.log(e.target)   //  被點選的元素
        console.log(e.currentTarget)   //  li   
        console.log(e.currentTarget === this)  // true
    })
  </script>
複製程式碼

<ul>
    <li>hello 1</li>
    <li>hello 2</li>
    <li>hello 3</li>
    <li>hello 4</li>
  </ul>
  <script>
    let ul = document.querySelectorAll('ul')[0]
    let aLi = document.querySelectorAll('li')
    for(let i=0;i<aLi.length;i++){  
      aLi[i].addEventListener('click',function(e){
        let oLi1 = e.target  
        let oLi2 = e.currentTarget
        console.log(oLi1)  // li
        console.log(oLi2)  // li
        console.og(oLi1===oLi2)  // true
      })
    }
  </script>複製程式碼

19,http的狀態碼

1-資訊響應

2-成功了

3-伺服器重定向響應,主要是為了滿足特定的

4-客戶端錯誤

5-服務端錯誤

20,敲下url後發生了什麼

瀏覽器查ip地址(dns解析,路由快取,瀏覽器快取)-瀏覽器發出http請求-伺服器重定向響應-瀏覽器跟蹤重定向響應,取得地址-伺服器接受請求,返回http響應,包括html等程式碼-瀏覽器按照自己的方式進行渲染

21,跨域

jsonp(json padding)是通過建立script標籤實現的

postMessage,最好轉成json字串發過去


相關文章