溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

jQuery的前端面試題有哪些

發(fā)布時間:2022-02-14 13:35:33 來源:億速云 閱讀:147 作者:iii 欄目:web開發(fā)

今天小編給大家分享一下jQuery的前端面試題有哪些的相關(guān)知識點,內(nèi)容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

jQuery的前端面試題有哪些

jQuery前端面試——含移動端常見問題

1、JQuery的源碼看過嗎?能不能簡單概況一下它的實現(xiàn)原理?

jquery源碼封裝在一個匿名函數(shù)的自執(zhí)行環(huán)境中,有助于防止變量的全局污染,然后通過傳入window對象參數(shù),可以使window對象作為局部變量使用,好處是當jquery中訪問window對象的時候,就不用將作用域鏈退回到頂層作用域了,從而可以更快的訪問window對象。同樣,傳入undefined參數(shù),可以縮短查找undefined時的作用域鏈。

    (function( window, undefined ) {
         //用一個函數(shù)域包起來,就是所謂的沙箱
         //在這里邊var定義的變量,屬于這個函數(shù)域內(nèi)的局部變量,避免污染全局
         //把當前沙箱需要的外部變量通過函數(shù)參數(shù)引入進來
         //只要保證參數(shù)對內(nèi)提供的接口的一致性,你還可以隨意替換傳進來的這個參數(shù)
        window.jQuery = window.$ = jQuery;
    })( window );
  • jquery將一些原型屬性和方法封裝在了jquery.prototype中,為了縮短名稱,又賦值給了jquery.fn,這是很形象的寫法。

  • 有一些數(shù)組或?qū)ο蟮姆椒ń?jīng)常能使用到,jQuery將其保存為局部變量以提高訪問速度。

  • jquery實現(xiàn)的鏈式調(diào)用可以節(jié)約代碼,所返回的都是同一個對象,可以提高代碼效率。

  • jquery的優(yōu)勢就是鏈式操作,隱式迭代

2、jQuery.fn的init方法返回的this指的是什么對象?為什么要返回this?

返回的this指的就是當前操作后的jquery對象,為了實現(xiàn)jquery的鏈式操作

3、jquery中如何將數(shù)組轉(zhuǎn)化為json字符串,然后再轉(zhuǎn)化回來?

使用jquery全局方法$.parseJSON這個方法

4、jQuery 的屬性拷貝(extend)的實現(xiàn)原理是什么,如何實現(xiàn)深拷貝?
①、jQuery中的$.extend淺拷貝

jQuery中的$.extend淺拷貝,拷貝對象A時,對象B將拷貝A的所有字段,如果字段是內(nèi)存地址,B將拷貝地址,若果字段是基元類型,B將復制其值。它的缺點是如果你改變了對象B所指向的內(nèi)存地址,你同時也改變了對象A指向這個地址的字段。

$.extend(a,b)
②、jQuery中的$.extend深拷貝

jQuery中的$.extend深拷貝,這種方式會完全拷貝所有數(shù)據(jù),優(yōu)點是B與A不會相互依賴(A,B完全脫離關(guān)聯(lián)),缺點是拷貝的速度更慢,代價更大。

$.extend(true,a,b)
5、jquery.extend 與jquery.fn.extend的區(qū)別?
①、jQuery.extend(object);
  • 它是為jQuery類添加類方法,可以理解為添加靜態(tài)方法。如:

jQuery.extend({
   min: function(a, b) { return a < b ? a : b; },
   max: function(a, b) { return a > b ? a : b;
});
jQuery.min(2,3); //  2
jQuery.max(4,5); //  5
  • jQuery.extend(target, object1, [objectN])用一個或多個其他對象來擴展一個對象,返回被擴展的對象。

var settings = { validate: false, limit: 5, name: "foo" };
var options = { validate: true, name: "bar" };
jQuery.extend(settings, options);
  • 結(jié)果:settings == { validate: true, limit: 5, name: “bar” }

②、jQuery.fn.extend(object);
  • $.fn是什么?

  • $.fn是指jQuery的命名空間,fn上的成員(方法function及屬性property),會對jQuery實例每一個有效。

  • 查看jQuery代碼,就不難發(fā)現(xiàn)。

jQuery.fn = jQuery.prototype = {
    init: function( selector, context ) {//.... 
};
  • 原來jQuery.fn = jQuery.prototype

  • 所以,它是對jQuery.prototype進行擴展,就是為jQuery類添加“成員函數(shù)”。jQuery類的實例可以使用這個“成員函數(shù)”。

③、區(qū)別
  • jQuery.fn.extend(object);擴展jQuery對象方法

  • jQuery.extend擴展jQuery全局方法

6、jQuery 的隊列是如何實現(xiàn)的?隊列可以用在哪些地方?

jQuery核心中, 有一組隊列控制方法, 這組方法由queue()/dequeue()/clearQueue()三個方法組成, 它對需要連續(xù)按序執(zhí)行的函數(shù)的控制可以說是簡明自如, 主要應用于animate ()方法, ajax以及其他要按時間順序執(zhí)行的事件中.

var _slideFun = [
function() {
$('.one').delay(500).animate({
top: '+=270px'
},500, _takeOne);
},
function() {
$('.two').delay(300).animate({
top: '+=270px'
},500, _takeOne);
}
];
$('#demo').queue('slideList', _slideFun);
var _takeOne = function() {
$('#demo').dequeue('slideList');
};
_takeOne();
7、談一下Jquery中的bind(),live(),delegate(),on()的區(qū)別?

jquery中bind(),live(),delegate()都是基于on實現(xiàn)的

方法說明
on是封裝了一個兼容的事件綁定方法,在選擇元素上綁定一個或多個事件的事件處理函數(shù)
bind(type,[data],fn)為每個匹配元素的特定事件綁定事件處理函數(shù)
live(type,[data],fn)給所有匹配的元素附加一個事件處理函數(shù),即使這個元素是以后再添加進來的
delegate(selector,[type],[data],fn)指定的元素(屬于被選元素的子元素)添加一個或多個事件處理程序,并規(guī)定當這些事件發(fā)生時運行的函數(shù)

差別:

.bind()是直接綁定在元素上

方法說明
.bind()是直接綁定在元素上
.live()則是通過冒泡的方式來綁定到元素上的。更適合列表類型的,綁定到document DOM節(jié)點上。和.bind()的優(yōu)勢是支持動態(tài)數(shù)據(jù)
.delegate()則是更精確的小范圍使用事件代理,性能優(yōu)于.live()
.on()則是最新的1.9版本整合了之前的三種方式的新事件綁定機制
8、JQuery一個對象可以同時綁定多個事件,這是如何實現(xiàn)的?

jquery中事件綁定的函數(shù)中傳遞多個事件參數(shù),執(zhí)行事件的時候判斷執(zhí)行事件的類型

9、針對jQuery性能的優(yōu)化方法?
  • 基于Class的選擇性的性能相對于Id選擇器開銷很大,因為需遍歷所有DOM元素。

  • 頻繁操作的DOM,先緩存起來再操作。用Jquery的鏈式調(diào)用更好。
    比如:

var str=$("a").attr("href");
for (var i = size; i < arr.length; i++) {}
  • for 循環(huán)每一次循環(huán)都查找了數(shù)組(arr) 的.length 屬性,在開始循環(huán)的時候設置一個變量來存儲這個數(shù)字,可以讓循環(huán)跑得更快:

for (var i = size, length = arr.length; i < length; i++) {}
10、Jquery與jQuery UI 有啥區(qū)別?
  1. jQuery是一個js庫,主要提供的功能是選擇器,屬性修改和事件綁定等等。

  2. jQuery UI則是在jQuery的基礎上,利用jQuery的擴展性,設計的插件。提供了一些常用的界面元素,諸如對話框、拖動行為、改變大小行為等等。

  3. jQuery本身注重于后臺,沒有漂亮的界面,而jQuery UI則補充了前者的不足,他提供了華麗的展示界面,使人更容易接受。既有強大的后臺,又有華麗的前臺。jQuery UI是jQuery插件,只不過專指由jQuery官方維護的UI方向的插件。

11、jQuery和Zepto的區(qū)別?各自的使用場景?

zepto主要用在移動設備上,只支持較新的瀏覽器,好處是代碼量比較小,性能也較好。
jquery主要是兼容性好,可以跑在各種pc,移動上,好處是兼容各種瀏覽器,缺點是代碼量大,同時考慮兼容,性能也不夠好。

zepto和jQuery選擇器實現(xiàn)方法不一樣,jQuery使用正則,zepto是使用querySelectAll
zepto針對移動端程序,Zepto還有一些基本的觸摸事件可以用來做觸摸屏交互,如:

①、tap事件

tap,singleTap,doubleTap,longTap

②、Swipe事件

swipe,swipeLeft,swipeRight,swipeUp,swipeDown

12、Zepto的點透問題如何解決?
①、“點透”是什么

你可能碰到過在列表頁面上創(chuàng)建一個彈出層,彈出層有個關(guān)閉的按鈕,你點了這個按鈕關(guān)閉彈出層后后,這個按鈕正下方的內(nèi)容也會執(zhí)行點擊事件(或打開鏈接)。這個被定義為這是一個“點透”現(xiàn)象。

②、點透的解決方法:
  • 方案一:來得很直接github上有個fastclick可以完美解決

https://github.com/ftlabs/fastclick,引入fastclick.js,因為fastclick源碼不依賴其他庫所以你可以在原生的js前直接加上

   window.addEventListener( "load", function() {
        FastClick.attach( document.body );
    }, false );
  • 方案二:用touchend代替tap事件并阻止掉touchend的默認行為preventDefault()

  • 方案三:延遲一定的時間(300ms+)來處理事件

13、移動端最小觸控區(qū)域是多大?

移動端最小觸控區(qū)域44*44px ,再小就容易點擊不到或者誤點

14、jQuery 的slideUp動畫,如果目標元素是被外部事件驅(qū)動, 當鼠標快速地連續(xù)觸發(fā)外部元素事件, 動畫會滯后的反復執(zhí)行,該如何處理呢?

每次動畫開始的時候先使用stop()函數(shù)停止當前未動完的動畫

15、移動端的點擊事件的有延遲,時間是多久,為什么會有?怎么解決這個延時?

click 有300ms 延遲,為了實現(xiàn)safari的雙擊事件的設計,瀏覽器要知道你是不是要雙擊操作。

16、你從jQuery學到了什么?

首先明白了封裝的好處,
鏈式操作的原理
閉包的好處

17、請指出.get(),[],eq() 的區(qū)別。
方法說明
.get是jquery中將jquery對象轉(zhuǎn)換為原生對象的方法
[]是采用了獲取數(shù)組值的方式將jquery對象轉(zhuǎn)換為原生對象的方法
eq()是獲取對象列表中的某一個jquery dom對象
18、請指出$ 和$.fn 的區(qū)別,或者說出$.fn 的用途。

$代表的是jquery對象
$.fn是代表的jQuery.prototype
$.fn是用來給jquery對象擴展方法的

19、jQuery取到的元素和原生Js取到的元素有什么區(qū)別

jQuery取到的元素是包含原生dom對象,和jQuery擴展的方法

20、原生JS的window.onload與Jquery的$(document).ready(function(){})有什么不同?如何用原生JS實現(xiàn)Jq的ready方法?
①、window.onload()

window.onload()方法是必須等到頁面內(nèi)包括圖片的所有元素加載完畢后才能執(zhí)行。

②、$(document).ready()

$(document).ready()是DOM結(jié)構(gòu)繪制完畢后就執(zhí)行,不必等到加載完畢。

function ready(fn){
if(document.addEventListener) {        //標準瀏覽器
document.addEventListener('DOMContentLoaded', function() {
//注銷事件, 避免反復觸發(fā)
document.removeEventListener('DOMContentLoaded',arguments.callee, false);
fn();            //執(zhí)行函數(shù)
}, false);
}else if(document.attachEvent) {        //IE
document.attachEvent('onreadystatechange', function() {
if(document.readyState == 'complete') {
document.detachEvent('onreadystatechange', arguments.callee);
fn();        //函數(shù)執(zhí)行
}
});
}
};

以上就是“jQuery的前端面試題有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI