前端面試--重要基礎知識回顧(一)

来源:https://www.cnblogs.com/1234wu/archive/2019/03/11/10475454.html
-Advertisement-
Play Games

1.數據類型: 可變的引用類型:object(array ,function,正則); 不可變的原始類型:null, undefined, number, string, boolean, symbol(es6) 2.if的真和假: 以下情況會被認為返回false:(反之為真) " " 空的字元串 ...


1.數據類型:

  可變的引用類型:object(array ,function,正則);

  不可變的原始類型:null, undefined, number, string, boolean, symbol(es6)

//引用類型
        var arr1 = [1,2];
        var arr2 = arr1
        arr2.push(3)
        console.log(arr1) //[99]
//原始類型
        var str1 = "111";
        var str2 = str1;
        str2 = "222"
        console.log(str1)    //111

 

2.if的真和假: 

  以下情況會被認為返回false:(反之為真)

    • " " 空的字元串
    • 為 0 的數字
    • 為 null 的對象
    • 為 undefined 的對象
    • 布爾值 false

 

3.事件冒泡,預設行為:

 1).DOM2級事件規定的時間流包括 三個階段:

  • 事件捕獲階段
  • 處於目標階段
  • 事件冒泡階段

事件冒泡: 當一個元素接收到事件的時候,會把她接收到的事件依次向上傳遞,一直到window.

預設行為: 觸發事件動作發生後的表現,比如點擊鏈接會跳轉,點擊提交按鈕會提交並刷新頁面.

 2)阻止事件冒泡 

  w3c:event.stopPropagation()

  ie:event.canleBubble = true;

window.event? window.event.cancelBubble = true : e.stopPropagation();    //相容的寫法

  寫法:

 document.getElementById("button").addEventListener("click",function(event){
            alert("button");
            event.stopPropagation();    
    },false);

 

3)取消預設事件

  w3c的方法是e.preventDefault(),IE則是使用e.returnValue = false;·

//假定有鏈接<a href="http://caibaojian.com/" id="testA" >caibaojian.com</a>
var a = document.getElementById("testA");
a.onclick =function(e){
  if(e.preventDefault){
    e.preventDefault();
  }else{
    window.event.returnValue == false;
  }
}

  return false;

<div id='div'  onclick='alert("div");'>
  <ul  onclick='alert("ul");'>
    <li id='ul-a' onclick='alert("li");'>
      <a href="http://caibaojian.com/"id="testB">caibaojian.com</a>
    </li>   </ul> </div> var a = document.getElementById("testB"); a.onclick = function(){   return false; };

 

5.閉包:

   閉包: 就是能夠讀取到其他函數內部變數的函數(通俗點講就是函數a的內部函數b,被函數a外部的一個變數引用的時候, 就產生了一個閉包)

function  a() {
    n = 99;
    function b () {
       alert(n);
   } 
   retrun b;
}
var result = a ();
result();  //99

 

6.$().ready()和window.onload

 區別:

1) 運行時間

  window.onload必須等到頁面內包含圖片的全部元素載入完成後才運行。

  $(document).ready()是DOM結構繪製完成後就運行,不必等到載入完成。

2) 編寫個數不同

  window.onload不能同一時候編寫多個,假設有多個window.onload方法,僅僅會運行一個。

  $(document).ready()能夠同一時間編寫多個。而且都能夠得到運行。

  如何用js實現ready()方法;

function ready(fn){
    if(document.addEventListener){        //標準瀏覽器
        document.addEventListener('DOMContentLoaded',function(){
            //註銷時間,避免重覆觸發
            document.removeEventListener('DOMContentLoaded',arguments.callee,false);
            fn();        //運行函數
        },false);
    }else if(document.attachEvent){        //IE瀏覽器
        document.attachEvent('onreadystatechange',function(){
            if(document.readyState=='complete'){
                document.detachEvent('onreadystatechange',arguments.callee);
                fn();        //函數運行
            }
        });
    }
}

 

7,px和em和rem的區別?

px:像素大小

em:如果自己有font-size的像素,如果自己標簽沒有設置font-size就繼承父級的。

rem:是繼承html標簽的font-size的像素

 

8.DOM節點的增刪改查?

  查:getElementByIsd()....等等

  增;appendChild():末尾插入;

    insertbeforer():特定位置插入;

  改:replaceChild():接受兩個參數,第一個為要插入的節點,第二個為要替換的節點;

  刪:removeChild();

  創建:createElement()  

  複製:cloneNode(true|false) ; //預設是 false。克隆節點本身; 為 true,克隆節點及其屬性,以及後代;

 

 

 

9,JSONP的原理?

  根據瀏覽器同源策略,所謂同源就是協議、主機、埠號都相同時成為同源。a 域的js不能直接訪問 b功能變數名稱的信息,但是script 標簽的src屬性可以跨域引用文件,jsonp是請求之後後臺包裝好一段json,並且把數據放在一個callback函數,返回一個js文件,動態引入這個文件,下載完成js之後,會去調用這個callback,通過這樣訪問數據。

 

10,如何判斷一個數組和類數組?

  Object.prototype.toString.call()

 

11,什麼是事件委托,jquery和原生js怎麼去實現?

  事件委托:利用事件冒泡的原理(不清楚請看3.1)當一個子級沒有綁定事件時他會一直向上尋找,此時父級綁定的事件就是事件委托.

  具體實現:

    原生js:

 

//原生的實現方法
//情景:為父級綁定事件,點擊子級時分別顯示子級自己的html內容
farter.onclick = function(ev){
    var ev = ev || window.event;       //相容
    var target = ev.target || ev.srcElement;   //target是獲取當前的元素節點
    if(target.nodeName.toLowerlase == "child"){
       arert(target.innerHTML) ;
   } 
} 

 

    jq:

  delegate("選擇器","事件",回調函數)

 

12,web前端開發,如何提高頁面性能優化?(請參考雅虎軍規)

  內容:

  1.儘量減少HTTP請求數

2.減少DNS查找

3.避免重定向

4.讓Ajax可緩存

5.延遲載入組件

6.預載入組件

7.減少DOM元素的數量

8.跨域分離組件

9.儘量少用iframe

10.杜絕404

css部分:

11.避免使用CSS表達式

12.選擇<link>捨棄@import

13.避免使用濾鏡

14.把樣式表放在頂部

js部分:

15.去除重覆腳本

16.儘量減少DOM訪問

17.用智能的事件處理器

18.把腳本放在底部

CSS && JS:

19.把JavaScript和CSS放到外面

20.壓縮JavaScript和CSS

img:

21.優化圖片

22.優化CSS Sprite

23.不要用HTML縮放圖片

24.用小的可緩存的favicon.ico(P.S. 收藏夾圖標)

cookie:

25.給Cookie減肥

26.把組件放在不含cookie的域下

移動端:

27.保證所有組件都小於25K

28.把組件打包到一個複合文檔里

伺服器:

29.Gzip組件

30.避免圖片src屬性為空

31.配置ETags

32.對Ajax用GET請求

33.儘早清空緩衝區

34.使用CDN(內容分髮網絡)

35.添上Expires或者Cache-Control HTTP頭

 

-------------------------------------------未完待續--------------------------------------------


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 【說明】 1、主界面上添加父容器:FragmentTabHost 2、顯示內容區域 3、導航區域 【註意】 1、指定id時為android:id/tabhost,綁定時使用android.R.id.tabhost. 2、每一個Tab對應的Fragment的會填充到tabcontext上 【效果】 【 ...
  • 今天我們來聊一聊有關AppCompat,作為Android Jetpack系列文章的開篇。說到Android Jetpack,我們先看一下這張圖: 從圖中我們可以看到,整個Android Jetpack分為了四大部分,而我們今天要講述的就是Foundation中的AppCompat小節,官方將該部分 ...
  • 實現波浪效果view,可以自定義view,也可以自定義drawable,我個人比較喜歡重寫drawable,因此這裡是自定義drawable實現效果,費話少說,先看效果。 這裡用了兩種方式實現波浪效果,一種是通過正弦函數去畫路徑,一種是通過三階貝塞爾曲線畫出類似正弦曲線的效果先看看實現波浪效果需要用 ...
  • 本人屬於自學上路,目前是在入門階段,所以有些內容實質性比較少,請各位大佬多多包涵。 視圖view的基本屬性: layout_margin:定義視圖與周圍視圖之間的空白距離 layout_padding:是指當前視圖與內部內容的距離 線性佈局LinearLayout layout_gravity:指定 ...
  • 主攻前文 "吳烜:JavaScript實現ZLOGO: 界面改進與速度可調" 的幾個性能問題 線上演示: "圈3" 源碼仍在: "program in chinese/quan3" 之前是在繪製過程中計算每幀需要繪製的線段, 在嘗試改進的過程中很快發現問題太多且不易測試. 接著在某早晨"醒悟"到應該 ...
  • 續前文 "JavaScript實現ZLOGO: 前進方向和速度" 線上演示地址: http://codeinchinese.com/%E5%9C%883/%E5%9C%883.html 源碼仍在: "program in chinese/quan3" 主要功能改進是在界面可以選擇速度. 其他界面佈局 ...
  • 組件 組件之間的數據是單向綁定的。 父組件向子組件通信 是通過子組件定義的props屬性來實現。通過props定義變數與變數類型和驗證方式。 props簡化定義 在簡化定義中,變數是以數組的方式定義。 props完整定義 完整定義是採用字面量形式,type 要定義的類型 通信方式 父組件向子組件定義 ...
  • 今天主要介紹一下我們平常會經常用到的設計模式,設計模式總的來說有23種,而設計模式在前端中又該怎麼運用呢,接下來主要對比較前端中常見的設計模式做一個介紹 一、什麼是設計模式 一般來說,設計模式代表了最佳的實踐,通常被有經驗的面向對象的軟體開發人員所採用,在我們平時的軟體開發中,經常需要用到各種設計模 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...