JS面試題:
【點擊這里領取面試題資料】
1.javascript的typeof回傳哪些資料型別
string, boolean,number, undefined, function,object
2.例舉3種強制型別轉換和2種隱式型別轉換?
強制(parseInt, parseFloat, number) 隱式(== === + -)
3.split() 和 join() 的區別
split()是將字串切割成陣列的形式,join()是將陣列轉換成字串,
4.陣列方法pop()、push()、unshift()、shift()
push()尾部添加pop()尾部洗掉unshift()頭部添加shift()頭部洗掉
5.IE和標準下有哪些兼容性的寫法
var ev = ev || window.event
document.documentElement.clientWidth || document.body.clientWidth
Var target = ev.srcElement||ev.target
6.ajax請求的時候get 和 post方式的區別
get是在url后面post放在虛擬載體里面get有大小限制(只能提交少量引數)post比get安全- 應用不同,請求資料和提交資料
7.call 和 apply 的區別
Object.call(this, obj1, obj2, obj3) Object.apply(this, arguments)
apply和call的唯一區別是第二個引數的傳遞方式不同,apply的第二個引數必須是一個陣列,而call允許傳遞一個引數串列,
8.ajax請求時,如何決議json資料
使用JSON.parse
9.事件委托是什么
利用事件冒泡的原理,讓自己的所觸發的事件,讓他的父元素代替執行!
10.閉包是什么,有什么特性,對頁面有什么影響
閉包就是能夠讀取其他函式內部變數的函式,使得函式不被GC機制回收,如果過多使用閉包,容易導致記憶體泄露,
你以為什么是閉包的傳送門
11.如何阻止事件冒泡
- ie:阻止冒泡
ev.cancelBubble = true; - 非IE
ev.stopPropagation();
12.如何阻止默認事件
- 1.
return false - 2.
ev.preventDefault();
13.添加 洗掉 替換 插入到某個接點的方法
1、創建新節點
// 創建一個具體的元素
createElement();
// 創建一個文本節點
createTextNode();
2、添加、移除、替換、插入
appendChild(); //添加
removeChild(); //移除
replaceChild(); //替換
insertBefore(); //插入
3、查找
//通過標簽名稱
getElementsByTagName();
//通過元素的Name屬性的值
getElementsByName();
//通過元素Id,唯一性
getElementById();
14.解釋jsonp的原理,以及為什么不是真正的 ajax
動態創建script標簽,回呼函式
Ajax是頁面無重繪請求資料操作
15.document load 和document ready的區別
document.onload是在結構和樣式,外部js以及圖片加載完才執行js
document.ready是 dom 樹創建完成就執行的方法,原生中沒有這個方法,jquery中有$().ready(function)
16.””和“=”的不同
==會自動轉換型別,再判斷是否相等
===不會自動型別轉換,直接去比較
17.函式宣告與函式運算式的區別?
在Javscript中,決議器在向執行環境中加載資料時,對函式宣告和函式運算式并非是一視同仁的,決議器會率先讀取函式宣告,并使其在執行任何代碼之前可用(可以訪問),至于函式運算式,則必須等到決議器執行到它所在的代碼行,才會真正被決議執行,
18.對作用域背景關系和this的理解,看下列代碼:
var User = {
count: 1,
getCount: function() {
return this.count;
}
};
console.log(User.getCount()); // 1
var func = User.getCount;
console.log(func()); // 是1和undefined
`func`是在`window`的背景關系中被執行的,所以不會訪問到`count`屬性,
19.看下面代碼,給出輸出結果,
for(var i = 1; i <= 3; i++){ //建議使用let 可正常輸出i的值
setTimeout(function(){
console.log(i);
},0);
};
4 4 4,
// 原因:Javascript事件處理器在執行緒空閑之前不會運行,
20.當一個DOM節點被點擊時候,我們希望能夠執行一個函式,應該怎么做?
box.onlick= function(){}
box.addEventListener("click",function(){},false);
<button οnclick="box()"></button>
21.Javascript的事件流模型都有什么?
“事件冒泡”:事件開始由最具體的元素接受,然后逐級向上傳播
“事件捕捉”:事件由最不具體的節點先接收,然后逐級向下,一直到最具體的
“DOM事件流”:三個階段:事件捕捉,目標階段,事件冒泡
22.看下列代碼,輸出什么?解釋原因,
var a = null;
alert(typeof a);
// object
解釋:JavaScript 誕生以來便如此,null是一個只有一個值的資料型別,這個值就是null,表示一個空指標物件,所以用typeof檢測會回傳”object”,
23.判斷字串以字母開頭,后面可以是數字,下劃線,字母,長度為6-30
var reg=/^[a-zA-Z]\w{5,29}$/;
24.回答以下代碼,alert的值分別是多少?
var a = 100;
function test() {
alert(a);
a = 10; //去掉了var 就變成定義了全域變數了
alert(a);
}
test();
alert(a);
// 正確答案是:100, 10, 10
25.javaScript的2種變數范圍有什么不同?
- 全域變數:當前頁面內有效
- 區域變數:函式方法內有效
26.null和undefined的區別?
null是一個表示"無"的物件,轉為數值時為 0;undefined是一個表示"無"的原始值,轉為數值時為NaN,當宣告的變數還未被初始化時,變數的默認值為undefined,null用來表示尚未存在的物件
undefined表示"缺少值",就是此處應該有一個值,但是還沒有定義,典型用法是:
1、變數被宣告了,但沒有賦值時,就等于undefined,
2、呼叫函式時,應該提供的引數沒有提供,該引數等于undefined,
3、物件沒有賦值的屬性,該屬性的值為undefined,
4、函式沒有回傳值時,默認回傳undefined,
null表示"沒有物件",即該處不應該有值,典型用法是:
1、作為函式的引數,表示該函式的引數不是物件,
2、作為物件原型鏈的終點,
27.new運算子具體干了什么呢?
1、創建一個空物件,并且this 變數參考該物件,同時還繼承了該函式的原型,
2、屬性和方法被加入到this 參考的物件中,
3、新創建的物件由this 所參考,并且最后隱式的回傳this ,
28.js延遲加載的方式有哪些?
defer和async- 動態創建
DOM方式(創建script,插入到DOM中,加載完畢后callBack) - 按需異步載入js
29.Flash、Ajax各自的優缺點,在使用中如何取舍?
Flash ajax對比
1、Flash適合處理多媒體、矢量圖形、訪問機器;對CSS、處理文本上不足,不容易被搜索,
2、ajax對CSS、文本支持很好,支持搜索;多媒體、矢量圖形、機器訪問不足,
共同點:與服務器的無重繪傳遞訊息、用戶離線和在線狀態、操作DOM
30.不使用回圈,創建一個長度為100的陣列,并且每個元素的值等于它的小標,
new Array(100).fill(0).map((_, c) => c)
31希望獲取到頁面中所有的checkbox怎么做?(不使用第三方框架)
var inputs = document.getElementsByTagName("input"); // 獲取所有的input標簽物件
var checkboxArray = []; // 初始化空陣列,用來存放checkbox物件,
for(var i=0;i<inputs.length;i++){
var obj = inputs[i];
if(obj.type=='checkbox'){
checkboxArray.push(obj);
}
}
32.寫一個function,清除字串前后的空格,(兼容所有瀏覽器)
String.prototype.trim= function(){
return this.replace(/^\s+/,"").replace(/\s+$/,"");
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/271377.html
標籤:其他
下一篇:高效前端之再探頁面渲染優化
