摘要:在此基礎上加入了回調函數,加載完之后會執行中定義的函數,所需要的數據會以參數的形式傳遞給該函數。通常的做法是,為它們指定回調函數。
前端面試題總結——JS(持續更新中) 1.javascript的typeof返回哪些數據類型
Object number function boolean underfind string
2.例舉3種強制類型轉換和2種隱式類型轉換?強制(parseInt,parseFloat,number)
隱式(== - ===)
前者是切割成數組的形式,后者是將數組轉換成字符串
4.數組方法pop() push() unshift() shift()Unshift()頭部添加 shift()頭部刪除
Push()尾部添加 pop()尾部刪除
1.執行順序不一樣、
2.參數不一樣
3.事件加不加on
4.this指向問題
Var ev = ev || window.event
document.documentElement.clientWidth || document.body.clientWidth
Var target = ev.srcElement||ev.target
1.一個在url后面 一個放在虛擬載體里面
2.有大小限制
3.安全問題
4.應用不同 一個是論壇等只需要請求的,一個是類似修改密碼的
Object.call(this,obj1,obj2,obj3)
Object.apply(this,arguments)
使用eval parse 鑒于安全性考慮 使用parse更靠譜
10.寫一個獲取非行間樣式的函數function getStyle(obj, attr, value) { if(!value) { if(obj.currentStyle) { return obj.currentStyle(attr) } else { obj.getComputedStyle(attr, false) } } else { obj.style[attr]=value } }11.事件委托(代理)是什么
讓利用事件冒泡的原理,讓自己的所觸發的事件,讓他的父元素代替執行!
12.閉包是什么,有什么特性,對頁面有什么影響閉包就是能夠讀取其他函數內部變量的函數。
http://blog.csdn.net/gaoshanw... (問這個問題的不是一個公司)
也可以直接點擊此處查看之前更的關于閉包的文章
stoppropagation / preventdefault
14.添加 插入 替換 刪除到某個接點的方法obj.appendChidl()
obj.innersetBefore
obj.replaceChild
obj.removeChild
動態創建script標簽,回調函數
Ajax是頁面無刷新請求數據操作
本地對象為array obj regexp等可以new實例化
內置對象為gload Math 等不可以實例化的
宿主為瀏覽器自帶的document,window 等
頁面加載完成有兩種事件:
一.是ready,表示文檔結構已經加載完成(不包含圖片等非文字媒體文件)。
二.是onload,指示頁面包含圖片等文件在內的所有元素都加載完成。
前者會自動轉換類型
后者不會
同源策略是一個很重要的安全理念,它在保證數據的安全性方面有著重要的意義,
一段腳本只能讀取來自于同一來源的窗口和文檔的屬性,這里的同一來源指的是協議、域名和端口號的組合
var arr = [ 1,5,1,7,5,9]; Math.max(...arr) // 921.更短的數組去重寫法
[...new Set([2,"12",2,12,1,2,1,6,12,13,6])] // [2, "12", 12, 1, 6, 13]22.排序算法
升序:
var numberArray = [3,6,2,4,1,5]; numberArray.sort(function(a,b){ return a-b; }) console.log(numberArray);23.冒泡排序
var examplearr=[8,94,15,88,55,76,21,39]; function sortarr(arr){ for(i=0;i24.null和undefined的區別:arr[j+1]){ var temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } } return arr; } sortarr(examplearr); console.log(examplearr);
null:表示無值;undefined:表示一個未聲明的變量,或已聲明但沒有賦值的變量,
或一個并不存在的對象屬性。
1.由于閉包會使得函數中的變量都被保存在內存中,內存消耗很大,所以不能濫用閉包,否則會造成網頁的性能問題,在IE中可能導致內存泄露。解決方法是,在退出函數之前,將不使用的局部變量全部刪除。
2.閉包會在父函數外部,改變父函數內部變量的值。所以,如果你把父函數當作對象(object)使用,把閉包當作它的公用方法(Public Method),把內部變量當作它的私有屬性(private value),這時一定要小心,不要隨便改變父函數內部變量的值。
(關于閉包,詳細了解請看JavaScript之作用域與閉包詳解)
JSONP (JSON with Padding)是一個簡單高效的跨域方式,HTML中的script標簽可以加載并執行其他域的javascript,于是我們可以通過script標記來動態加載其他域的資源。例如我要從域A的頁面pageA加載域B的數據,那么在域B的頁面pageB中我以JavaScript的形式聲明pageA需要的數據,然后在 pageA中用script標簽把pageB加載進來,那么pageB中的腳本就會得以執行。JSONP在此基礎上加入了回調函數,pageB加載完之后會執行pageA中定義的函數,所需要的數據會以參數的形式傳遞給該函數。JSONP易于實現,但是也會存在一些安全隱患,如果第三方的腳本隨意地執行,那么它就可以篡改頁面內容,截獲敏感數據。但是在受信任的雙方傳遞數據,JSONP是非常合適的選擇。
AJAX是不跨域的,而JSONP是一個是跨域的,還有就是二者接收參數形式不一樣!
27.請解釋變量聲明提升。在函數執行時,把變量的聲明提升到了函數頂部,而其值定義依然在原來位置。
28.如何從瀏覽器的URL中獲取查詢字符串參數。以下函數把獲取一個key的參數。
function parseQueryString ( name ){ name = name.replace(/[[]/,"["); var regexS = "[?&]"+name+"=([^]*)"; var regex = new RegExp( regexS ); var results = regex.exec( window.location.href ); if(results == null) { return ""; } else { return results[1]; } }29.arguments是什么?
arguments雖然有一些數組的性質,但其并非真正的數組,只是一個類數組對象。
其并沒有數組的很多方法,不能像真正的數組那樣調用.jion(),.concat(),.pop()等方法。
在代碼中出現表達式-“use strict”; 意味著代碼按照嚴格模式解析,這種模式使得Javascript在更嚴格的條件下運行。
好處:
1.消除Javascript語法的一些不合理、不嚴謹之處,減少一些怪異行為;
2.消除代碼運行的一些不安全之處,保證代碼運行的安全;
3.提高編譯器效率,增加運行速度;
壞處:
1.同樣的代碼,在”嚴格模式”中,可能會有不一樣的運行結果;一些在”正常模式”下可以運行的語句,在”嚴格模式”下將不能運行。
1.就是一個函數的調用過程。那么就從理解這個調用過程開始吧。
函數a有一個參數,這個參數是個函數b,當函數a執行完以后執行函數b。那么這個過程就叫回調。
2.另外種解釋:開發網站的過程中,我們經常遇到某些耗時很長的javascript操作。其中,既有異步的操作(比如ajax讀取服務器數據),也有同步的操作(比如遍歷一個大型數組),它們都不是立即能得到結果的。
通常的做法是,為它們指定回調函數(callback)。即事先規定,一旦它們運行結束,應該調用哪些函數。
let obj = {}; let arr = []; console.log(typeof obj === "object"); //true console.log(typeof arr === "object"); //true
從上面的輸出結果可知,typeof bar === “object” 并不能準確判斷 bar 就是一個 Object。可以通過 Object.prototype.toString.call(bar) === “[object Object]” 來避免這種弊端:
let obj = {}; let arr = []; console.log(Object.prototype.toString.call(obj)); //[object Object] console.log(Object.prototype.toString.call(arr)); //[object Array]33.下面的代碼會輸出什么?為什么?
console.log(1 + "2" + "2"); //122 console.log(1 + +"2" + "2"); //32 console.log(1 + -"1" + "2"); //02 console.log(+"1" + "1" + "2"); //112 console.log( "A" - "B" + "2"); //NaN2 console.log( "A" - "B" + 2); //NaN console.log("3" + 2 + 1);//321 console.log(typeof +"3"); //number console.log(typeof (""+3)); //string console.log("a" * "sd"); //NaN34.邏輯運算
或邏輯時:當0在前面時console.log((0|| 2));則輸出為后面的數,為2;
當除0以為的數在前面時console.log((2|| 0));則輸出為2;
與邏輯時:當只要有0時console.log(0&&2 );則輸出都為0;
當不存在0時,console.log(1&&2 );則輸出都為后面的一個,為2; console.log(2&&1 );則輸出為1;35.在 JavaScript,常見的 false 值:
0, "0", +0, -0, false, "",null,undefined,null,NaN
要注意空數組([])和空對象({}):
console.log([] == false) //true console.log({} == false) //false console.log(Boolean([])) //true36.解釋下面代碼的輸出
var a={}, b={key:"b"}, c={key:"c"}; a[b]=123; a[c]=456; console.log(a[b]);
因為在設置對象屬性時,JS將隱式地stringify參數值。
在本例中,由于b和c都是對象,它們都將被轉換為“[object object]”。
因此,a[b]和[c]都等價于[[object object]],并且可以互換使用。
所以,設置或引用[c]與設置或引用a[b]完全相同。`
(function(x) { return (function(y) { console.log(x); })(2) })(1);
輸出1,閉包能夠訪問外部作用域的變量或參數。
38.請寫出以下輸出結果:function Foo() { getName = function () { alert (1); }; return this; } Foo.getName = function () { alert (2);}; Foo.prototype.getName = function () { alert (3);}; var getName = function () { alert (4);}; function getName() { alert (5);} Foo.getName(); //2 getName(); //4 Foo().getName(); //1 getName(); //1 new Foo.getName(); //2 new Foo().getName(); //3 new new Foo().getName(); //339.談談你對Ajax的理解?(概念、特點、作用)
AJAX全稱為“Asynchronous JavaScript And XML”(異步JavaScript和XML)是指一種創建交互式網頁應用的開發技術、改善用戶體驗,實現無刷新效果。
優點
a、不需要插件支持
b、優秀的用戶體驗
c、提高Web程序的性能
d、減輕服務器和帶寬的負擔
缺點
a、破壞瀏覽器“前進”、“后退”按鈕的正常功能,可以通過簡單的插件彌補
b、對搜索引擎的支持不足
a、什么是deferred對象
在回調函數方面,jQuery的功能非常弱。為了改變這一點,jQuery開發團隊就設計了deferred對象。
簡單說,deferred對象就是jQuery的回調函數解決方案。在英語中,defer的意思是”延遲”,所以deferred對象的含義就是”延遲”到未來某個點再執行。
它解決了如何處理耗時操作的問題,對那些操作提供了更好的控制,以及統一的編程接口。
b、它的主要功能,可以歸結為四點:
(1)、實現鏈式操作
(2)、指定同一操作的多個回調函數
(3)、為多個操作指定回調函數
(4)、普通操作的回調函數接口
跨域是指不同域名之間相互訪問。
JavaScript同源策略的限制,A域名下的JavaScript無法操作B或是C域名下的對象
實現:
(1)、JSONP跨域:利用script腳本允許引用不同域下的js實現的,將回調方法帶入服務器,返回結果時回調。
1 通過jsonp跨域
1.原生實現: 2.document.domain + iframe跨域 此方案僅限主域相同,子域不同的跨域應用場景。 1.父窗口:(http://www.domain.com/a.html) 2.子窗口:(http://child.domain.com/b.html) 弊端:請看下面渲染加載優化 1、 nginx代理跨域 2、 nodejs中間件代理跨域 3、 后端在頭部信息里面設置安全域名
(3)、跨域資源共享(CORS)
跨域資源共享(CORS)是一種網絡瀏覽器的技術規范,它為Web服務器定義了一種方式,允許網頁從不同的域訪問其資源。
CORS與JSONP相比:
a、JSONP只能實現GET請求,而CORS支持所有類型的HTTP請求。
b、使用CORS,開發者可以使用普通的XMLHttpRequest發起請求和獲得數據,比起JSONP有更好的錯誤處理。
c、JSONP主要被老的瀏覽器支持,它們往往不支持CORS,而絕大多數現代瀏覽器都已經支持了CORS。
更多跨域的具體內容請看 https://segmentfault.com/a/11...
a.模板引擎(這里特指用于Web開發的模板引擎)是為了使用戶界面與業務數據(內容)分離而產生的,它可以生成特定格式的文檔,用于網站的模板引擎就會生成一個標準的HTML文檔。
b.在一些示例中javascript有大量的html字符串,html中有一些像onclick樣的javascript,這樣javascript中有html,html中有javascript,代碼的偶合度很高,不便于修改與維護,使用模板引擎可以解決問題。
JavaScript是一種動態、弱類型、基于原型的語言,通過瀏覽器可以直接執行。
當瀏覽器遇到
恢復方法:javascript:alert(document.oncontextmenu="")
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/94264.html
摘要:前端面試題總結持續更新中為什么只需要寫需要來規范瀏覽器的行為讓瀏覽器按照它們應該的方式來運行基于所以需要對進行引用,才能告知瀏覽器文檔所使用的文檔類型。 前端面試題總結——H5(持續更新中) 1.HTML5 為什么只需要寫 ? HTML5 需要doctype來規范瀏覽器的行為,讓瀏覽器按照它們應該的方式來運行; HTML4.01基于SGML,所以需要對DTD進行引用,才能告知瀏覽器文檔...
摘要:獲取的對象范圍方法獲取的是最終應用在元素上的所有屬性對象即使沒有代碼,也會把默認的祖宗八代都顯示出來而只能獲取元素屬性中的樣式。因此對于一個光禿禿的元素,方法返回對象中屬性值如果有就是據我測試不同環境結果可能有差異而就是。 花了很長時間整理的前端面試資源,喜歡請大家不要吝嗇star~ 別只收藏,點個贊,點個star再走哈~ 持續更新中……,可以關注下github 項目地址 https:...
摘要:前言一直混跡社區突然發現自己收藏了不少好文但是管理起來有點混亂所以將前端主流技術做了一個書簽整理不求最多最全但求最實用。 前言 一直混跡社區,突然發現自己收藏了不少好文但是管理起來有點混亂; 所以將前端主流技術做了一個書簽整理,不求最多最全,但求最實用。 書簽源碼 書簽導入瀏覽器效果截圖showImg(https://segmentfault.com/img/bVbg41b?w=107...
摘要:前端面試題總結持續更新中是哪個組件的屬性模塊的組件。都提供合理的鉤子函數,可以讓開發者定制化地去處理需求。 前端面試題總結——VUE(持續更新中) 1.active-class是哪個組件的屬性? vue-router模塊的router-link組件。 2.嵌套路由怎么定義? 在 VueRouter 的參數中使用 children 配置,這樣就可以很好的實現路由嵌套。 //引入兩個組件 ...
閱讀 2681·2023-04-25 18:10
閱讀 1621·2019-08-30 15:53
閱讀 2818·2019-08-30 13:10
閱讀 3232·2019-08-29 18:40
閱讀 1137·2019-08-23 18:31
閱讀 1210·2019-08-23 16:49
閱讀 3410·2019-08-23 16:07
閱讀 885·2019-08-23 15:27