1. 程式人生 > >js常見的面試題

js常見的面試題

css 選擇符有哪些


通配選擇符 *
類選擇符 class
id選擇符 id
屬性選擇符 input[name=button]
包含選擇符 類似 div span
子物件選擇符 類似 div > span

apply() 和 call()的區別  ==和===的區別  null和undefined的區別


apply和call引數不同 call可以傳多個參 apply只能傳二個參


雙等號只要值相等就為真


三等號 值和型別必須都相同才為真


null 指向了一個空的物件 可以看做一個空指標 不佔用記憶體


undefined 當宣告一個未初始化的變數的時候 值為undefined 會佔用記憶體 只不過值為undefined

js的事件模型有哪些


dom0事件模型  原始事件模型


dom2事件模型  分為三個階段  目標階段、捕獲階段、冒泡階段    


dom3事件模型  只不過是在原來的事件上增加了一些事件型別

簡述非同步程式設計模式


對於在瀏覽器中頻繁操作會阻礙瀏覽器的響應速度 通過非同步程式設計的模式可以加快瀏覽器的響應速度 這種模式被稱為非同步程式設計
(實現非同步程式設計的有好多 譬如ajax、promise、deffer等都是採用非同步程式設計來實現的)

for for in  for of之間的區別


其實三者的區別並不大 都是用來遍歷陣列或者物件的  只不過實現方式不同
for in 是以key -value的形式實現的
for of 是以iterator的形式實現的

深拷貝和淺拷貝的實現

//淺拷貝
function extendCopy(p){
       var c = {};
       for(var i in p){
         c[i] = p[i];
       }
       return c;
     }
//深拷貝
function deepCopy(p,c){
       var c = c || {};
       for(var i in p){
         if(typeof p[i] === "object"){
           c[i] = (p[i].constructor == Array) ? [] : {};
           deepCopy(p[i],c[i]);
         }
else{ c[i] = p[i]; } } return c; }

排序

//這裡只使用氣泡排序作為例子
var arr = [2,1,4,7];
     for(var i = 0;i<arr.length;i++){
       for(var j = 0;j<arr.length-1-i;j++){
         var temp;
         if(arr[j]>arr[j+1]){
           temp = arr[j+1];
           arr[j+1] = arr[j];
           arr[j] = temp;
         }
       }
     }

陣列去重

//這裡只用一種方式來實現 還有好多方法大家自己去看吧
function duplicateArr(arr){
       var temp = [];
       for(var i = 0;i<arr.length;i++){
         if(arr.indexOf(arr[i]) == i){
           temp.push(arr[i]);
         }
       }
       return temp;
     }

html和html5的區別

1.文件宣告不同

2.結構語義化不同

 

(很晚了後續在補充。。。)