中高級web前端面試題2


1.IE與標准瀏覽器對事件處理的區別?

1.監聽
標准
element.addEventListener('click',observer, useCapture);
element.removeEventListener('click',observer, useCapture);
IE
element.attachEvent('onclick',observer);
element.detachEvent('onclick',observer);
2.阻止冒泡
標准
event.stopPropagation();
IE
event.cancelBubble = true;
3.阻止默認
標准
event.preventDefault();
IE
event.returnValue = false;
4.event
標准
event
IE8以下
window.event
5.觸發當前事件的源對象
event.target  //Firefox,Chrome
event.srcElement   //IE,Chrome

2.new操作符具體干了什么

三步:

var Person = function(name) {
    this.name = name;
}
var p = new Person();
new操作符的操作是 var p = {}  //創建了一個空對象
p.__proto__ =  Person.prototype  //將這個對象的__proto__成員指向了Person.prototype
Person.call(p)  //將Person函數的this指針指向替換成p,然后再調用Person函數。
var Person = function () { };

var Programmer = function () { };
Programmer.prototype = new Person();

var p = new Programmer();

p.__proto__=Programmer.prototype;
Programmer.prototype.__proto__=Person.prototype;

3.null和undefined區別

null表示一個“無”的對象,typeof為object,轉換為數值是0;undefined表示一個“無”的原始值,typeof為undefined,轉換為數值是NaN。

null目前用法

  • 作為函數的參數,表示該函數的參數不是對象
  • 作為對象原始鏈的終點  //Object.getPrototypeOf(Object.prototype);返回null

undefined目前用法

  • 變量聲明了,但沒有別賦值,就等於undefined
  • 調用函數時,應該提供的參數沒有提供,該參數等於undefined
  • 對象沒有賦值的屬性
  • 函數沒有返回值時,默認返回undefined

4.delete用法

用於對象屬性的刪除
var obj = {
    name: 'Lily'
};
delete obj.name;
obj.name   //undefined
不能刪除變量、原型中的變量、函數

5.reactjs主要方法

render()
getInitialState() //組件掛載之前調用一次
getDefaultProps() //在組件類創建的時候調用一次
propTypes() //對象允許驗證傳入到組件的props
生命周期方法
componentWillMount() //服務器端和客戶端都只調用一次,在初始化渲染執行之前立刻調用
componentDidMount() //在初始化渲染執行之后立刻調用一次,僅客戶端有效(服務器端不會調用)
componentWillReceiveProps(object nextProps) //在組件接收到新的 props 的時候調用
shouldComponentUpdate(object nextProps,object nextState) //在接收到新的props或者state,將要渲染之前調用。返回true或者false
componentWillUpdate(object nextProps,object nextState) //在接收到新的props或者state之前立刻調用。
componentDidUpdate(object prevProps,object prevState) //在組件的更新已經同步到DOM中之后立刻被調用
componentWillUnmount() //在組件從DOM中移除的時候立刻被調用

6.Array()數組函數

pop()  //刪除最后一位並返回刪除的元素
push()  //添加到隊尾元素,並返回數組長度

7.cookie和localstorage、sessionstorage區別

1.cookie數據始終在同源的http請求中攜帶(即使不需要),即cookie在瀏覽器和服務器間來回傳遞。sessionStorage和localStorage不會自動把數據發給服務器,僅在本地保存。
2.HTML5本地存儲中每個域的存儲大小默認是5M,比起Cookie的4K要大的多。 3.數據有效期不同,cookie:只在設置的過期時間之前一直有效,即使窗口或瀏覽器關閉(默認為是到瀏覽器關閉);localStorage:始終有效,窗口或瀏覽器關閉也一直保存,因此用作持久數據;sessionStorage:僅在當前瀏覽器窗口關閉前有效,自然也就不可能持久保持。 4.接口使用:下段顯示獲取cookie方法。Web Storage支持事件通知機制,可以將數據更新的通知發送給監聽者。接口舉例:setItem(key,value)、getItem(key)、removeItem(key)、clear(); 5.cookie更安全:瀏覽器支持使用HTTPONLY來保護Cookie不被XSS攻擊獲取到,而Web Storage沒有任何抵御機制。 6.作用域不同,sessionStorage不在不同的瀏覽器窗口中共享,即使是同一個頁面;localStorage和cookie在所有同源窗口中都是共享的。
var allcookies = document.cookie;
function getCookie(cookie_name){
    var allcookies = document.cookie;
    var cookie_pos = allcookies.indexOf(cookie_name);   //索引的長度  
    if (cookie_pos != -1){
        //把cookie_pos放在值的開始,只要給值加1即可。
        //注indexOf(searchValue,fromIndex),fromIndex開始檢索的位置
        var cookie_end = allcookies.indexOf(";", cookie_pos);  
        if (cookie_end == -1){
            cookie_end = allcookies.length;
        }  
        var value = unescape(allcookies.substring(cookie_pos, cookie_end));         //這里就可以得到你想要的cookie的值了。。。
    }
    return value;
} 
// 調用函數
var cookie_val = getCookie("username");

8.針對json數組,根據某一個值排序 

var arrJson = [
    {flight: "ERWIO",price: 350},
    {flight: "WW250",price: 120},
    {flight: "QQ350",price: 100},
    {flight: "SDJIN",price: 300},
    {flight: "MH370",price: 120}
];
function sortByKey(array, key) {
    return array.sort(function(a, b) {
        var x = a[key]; var y = b[key];
        return ((x < y) ? -1 : ((x > y) ? 1 : 0));
    });
}
arrJson = sortByKey(arrJson, 'price');

 9.ajax是同步還是異步?

可以同步也可以異步,jquery默認為異步,也推薦異步執行。可通過async: true修改。

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM