1. 程式人生 > >前端面試題彙總 2018/12/04

前端面試題彙總 2018/12/04

盒模型

標準盒模型:由裡向外content,padding,border,margin
IE怪異和模型:寬高是內容(content)+填充(padding)+邊框(border)的總寬高

通過JS獲取盒模型對應的寬和高,有以下幾種方法:

為了方便書寫,以下用dom來表示獲取的HTML的節點。

1.  dom.style.width/height 

  這種方式只能取到dom元素內聯樣式所設定的寬高,也就是說如果該節點的樣式是在style標籤中或外聯的CSS檔案中設定的話,通過這種方法是獲取不到dom的寬高的。

 2. dom.currentStyle.width/height 

  這種方式獲取的是在頁面渲染完成後的結果,就是說不管是哪種方式設定的樣式,都能獲取到。

  但這種方式只有IE瀏覽器支援。

 3. window.getComputedStyle(dom).width/height

  這種方式的原理和2是一樣的,這個可以相容更多的瀏覽器,通用性好一些。

 4. dom.getBoundingClientRect().width/height

  這種方式是根據元素在視窗中的絕對位置來獲取寬高的

 5.dom.offsetWidth/offsetHeight

  這個就沒什麼好說的了,最常用的,也是相容最好的。

彈性佈局的使用

① 給父容器新增display: flex/inline-flex;屬性,即可使容器內容採用彈性佈局顯示,而不遵循常規文件流的顯示方式;

② 容器新增彈性佈局後,僅僅是容器內容採用彈性佈局,而容器自身在文件流中的定位方式依然遵循常規文件流;

③ display:flex; 容器新增彈性佈局後,顯示為塊級元素;

display:inline-flex; 容器新增彈性佈局後,顯示為行級元素;

④ 設為 Flex佈局後,子元素的float、clear和vertical-align屬性將失效。但是position屬性,依然生效。

行快標籤

一、塊級標籤

1.獨佔一行,不和其他元素待在同一行

2.能設定寬高

常見的塊級標籤:div,  p,  h1-h6,  ul,  li,  dl,  dt,  dd



二、行級標籤

1.能和其他元素待在同一行

2.不能設定寬高

常見的行級標籤:a, span,  strong,  u,  em-->



三、行內塊標籤
1.能和其他元素待在一行

2.能設定寬高

常見的行內塊標籤:img,  input,   textarea

空標籤

沒有閉合標籤的標籤被稱作為空標籤。
常見的有
<input />  <img />   <area /> <col /> <link />  <bgsound /> <base /> 

JQuery版本區別

   1.3一般功能夠

             1.4.2一般功能夠而且穩定

            1.7+比較新特性

            2不支援老IE

            相容的話最好選 1.x。穩定性就用1.7或者1.4,其中1.4的體積相對小

            另外更加情況選用1系列還是2系列,2系列不支援ie6,7,8
常用1.4和1.7  詳細資訊自己看  https://www.cnblogs.com/vivijiang/p/6121003.html

Js基本型別,怎麼檢測型別

應用資料型別 Array Object function
基本資料型別  number String null undefined  Boolean
檢測方法:
1.typeof    返回型別
console.log(typeof "");
console.log(typeof 1);
2.instanceof   返回1或0  不考慮null  undefined
console.log("1" instanceof String);
console.log(1 instanceof Number);
3.constructor  返回1 或0
console.log(("1").constructor === String);
console.log((1).constructor === Number);
4.Object.prototype.toString.call()  返回   [object +具體型別]
var a = Object.prototype.toString;
console.log(a.call("aaa"));
console.log(a.call(1));

巧用 localStorage 實現跨瀏覽器tab頁互動

跨瀏覽器tab頁的互動,比如說一個網站有一個模組是通過超連結_blank在一個新tab頁開啟,但是這是點選新tab頁的內容需要網站也有反應,這時就可以運用localStorage。只要是同一個域名下就都能訪問到。 
新tab頁裡的表格有個點選事件,點選完後網站頁彈出這行的資訊。可以這樣操作:

//表格點選事件回撥
function clkTb(row) {
    localStorage.setItem('curRowId', row.id);//前面是鍵,後面是值
}

//網站頁接收
$(function() {
    window.addEventListener('storage', function(ev) {
        console.log(ev);//在這裡可以找到你剛剛設定的值。
    })
})

Commonjs require.js 區別

https://blog.csdn.net/crystal6918/article/details/74906757/

冒泡捕獲

事件捕獲指的是從document到觸發事件的那個節點,即自上而下的去觸發事件。相反的,事件冒泡是自下而上的去觸發事件。繫結事件方法的第三個引數,就是控制事件觸發順序是否為事件捕獲。true,事件捕獲;false,事件冒泡。預設false,即事件冒泡。Jquery的e.stopPropagation會阻止冒泡,意思就是到我為止,我的爹和祖宗的事件就不要觸發了。

Vue相關問題?

http://www.cnblogs.com/Renyi-Fan/p/9419742.html

h5如何做瀏覽器適配

1、viewport 簡單粗暴的方式
<meta name="viewport" content="width=320,maximum-scale=1.3,user-scalable=no">
2、ip6+ 的CSS media query
@media (min-device-width : 375px) and (max-device-width : 667px) and (-webkit-min-device-pixel-ratio : 2){ /*iphone 6*/ }
@media (min-device-width : 414px) and (max-device-width : 736px) and (-webkit-min-device-pixel-ratio : 3){ /*iphone 6 plus*/ }
3、REM佈局
REM是CSS3新增的一種單位,並且移動端的支援度很高,android2.x+,ios5+都支援。REM是相對於dom結構的根元素來設定大小,也就是html這個元素。相較於em單位,rem使用上更容易理解及運用。
4、百分比佈局--面臨圖片自適應
剛說完REM佈局,那麼用百分比佈局也能實現一樣的效果,但是用百分比佈局,必須要面臨一個問題:圖片寬度100%,頁面載入時會存在高度塌陷的問題。
那麼可以用padding-top設定百分比值來實現自適應。
公式如下:
padding-top = (Image Height / Image Width) * 100%
原理:padding-top值為百分比時,取值是是相對於寬度的。
5、移動端適配解決方案-rem

Vuex怎麼用?

https://www.cnblogs.com/liningstyle/p/8335129.html

閉包?應用場景

https://blog.csdn.net/qq_21132509/article/details/80694517
setTimeout callback 封裝變數 為節點迴圈繫結click事件

原型 原型鏈

https://www.cnblogs.com/shuiyi/p/5305435.html

Webpack打包流程

https://www.jianshu.com/p/b47616a75f82

面向物件

https://www.cnblogs.com/chiangchou/p/js-oop1.html

跨域

https://www.cnblogs.com/heson/p/10015794.html

未知寬高元素水平垂直居中方法

https://www.cnblogs.com/heson/p/10019794.html

window.onload和$.ready區別

$(document).ready:是DOM結構繪製完畢後就執行,不必等到載入完畢。 意思就是DOM樹載入完畢,就執行,不必等到頁面中圖片或其他外部檔案都載入完畢。並且可以寫多個.ready。

window.onload:是頁面所有元素都載入完畢,包括圖片等所有元素。只能執行一次。


所以,$(document).ready的執行時間要早於window.onload。並且可以寫多個

AJAX get() 和 post() 方法

https://www.cnblogs.com/heson/p/10014471.html

session,cookie,sessionStorage,localStorage的區別及應用場景

https://www.cnblogs.com/heson/p/10029857.html

深拷貝和淺拷貝

https://www.cnblogs.com/echolun/p/7889848.html

H5的新標籤有哪些 連結裡有相容情況

https://blog.csdn.net/a772116804/article/details/80625385

ES的新特性

去部落格看 https://www.cnblogs.com/heson/default.html?page=2

陣列去重的方法

1.最基本的去重方法
思路:定義一個新陣列,並存放原陣列的第一個元素,然後將元素組一一和新陣列的元素對比,若不同則存放在新陣列中。

function unique(arr){

  var res = [arr[0]];

  for(var i=1;i<arr.length;i++){

    var repeat = false;

    for(var j=0;j<res.length;j++){

      if(arr[i] == res[j]){

        repeat = true;

        break;

      }

    }

    if(!repeat){

      res.push(arr[i]);

    }

  }

  return res;

}

2.先排序在去重
思路:先將原陣列排序,在與相鄰的進行比較,如果不同則存入新陣列

function unique(arr){

  var arr2 = arr.sort();

  var res = [arr2[0]];

  for(var i=1;i<arr2.length;i++){

    if(arr2[i] !== res[res.length-1]){

      res.push(arr2[i]);

    }

  }

  return res;

}

3.利用物件的屬性去重(推薦)
思路:每次取出原陣列的元素,然後再物件中訪問這個屬性,如果存在就說明重複

function unique(arr){

  var res =[];

  var json = {};

  for(var i=0;i<arr.length;i++){

    if(!json[arr[i]]){

      res.push(arr[i]);

      json[arr[i]] = 1;

    }

  }

  return res;

}

4.利用下標查詢
  function unique(arr){
     var newArr = [arr[0]];
     for(var i=1;i<arr.length;i++){
    if(newArr.indexOf(arr[i]) == -1){
             newArr.push(arr[i]);
        }
        }
        return newArr;
   }

排序演算法

https://www.cnblogs.com/onepixel/articles/7674659.html

REST ful

REST ful
Representational State Transfer,翻譯是”表現層狀態轉化”。 
面向資源是REST最明顯的特徵,對於同一個資源的一組不同的操作。資源是伺服器上一個可命名的抽象概念,資源是以名詞為核心來組織的,首先關注的是名詞。REST要求,必須通過統一的介面來對資源執行各種操作。對於每個資源只能執行一組有限的操作。(7個HTTP方法:GET/POST/PUT/DELETE/PATCH/HEAD/OPTIONS)