前端面試題一

1、下面的輸出結(jié)果是什么?有何不同?why?
var a=10+20+'30';
console.log(a);//3030
var b='10'+20+30;
console.log(b)//102030

從左向右執(zhí)行,數(shù)字和字符串相加,數(shù)字會隱式轉(zhuǎn)換為字符串類型

2、實現(xiàn)以下函數(shù)
 add(2, 5); // 7
 add(2)(5); // 7  

具體實現(xiàn):第一個簡單,第二個考察的是閉包

function add(a, b) {
    return a + b;
}
add(2, 5);

function add(a) {
    return function(b) {
        return a + b;
    }
}
add(2)(5);
3、寫出下面題目的輸出結(jié)果
var foo = '';
console.log(foo||(foo = "bar"));//"bar"

考察點:賦值語句的返回值就是賦的值

4、下面兩個 alert 的結(jié)果分別是什么?
var foo = "Hello";
(function() {
    var bar = " World";
    alert(foo + bar); //hello World
})();
alert(foo + bar);//Uncaught ReferenceError: bar is not defined

考察點:作用域

5、 編碼:input ‘a(chǎn)bcdefg’,output ‘gfedcba’

法一:

var a = 'abcdefg';
var b = a.split('').reverse().join('');
console.log(b);

法二:

var str = 'abcdefg';
Array.prototype.map.call(str, function(x){
    return x;
}).reverse().join();

考察點:
1)split空字符串分割,stringObject 中的每個字符之間都會被分割;
2)reverse() 方法:顛倒數(shù)組中元素的順序,改變原來的數(shù)組,而不會創(chuàng)建新的數(shù)組;
3)join():可以使用空字符串連接,默認逗號連接。

6、console.log(['1','2','3'].map(parseInt)) 輸出值?
[1, NaN, NaN]

考察點:map和parseInt方法
1)map 是ECMAScript 5 的一個內(nèi)置數(shù)值方法,把函數(shù)作為它的參數(shù),遍歷數(shù)組中所有的元素,并且為每個元素調(diào)用一次這個傳入map中的函數(shù),當(dāng)前元素作為參數(shù)傳入該函數(shù)。函數(shù)調(diào)用完畢之后將返回結(jié)果存入一個新數(shù)組中,不會改變原始數(shù)組。不會對空數(shù)組進行檢測。

函數(shù)定義:
arr.map(callback[,thisArg]);

callback函數(shù)需要以下3個值:
??????currentValue:當(dāng)前處理數(shù)值
??????index:處理的數(shù)值的索引值
??????array:map函數(shù)處理的函數(shù)值,即arr
thisArg可選. ,callback函數(shù)里的this值 默認是window對象
2)parseInt函數(shù)定義:parseInt(string, radix)
string: 需要轉(zhuǎn)化的字符,如果不是字符串會被轉(zhuǎn)換,忽視空格符。
radix:數(shù)字2-36之間的整型。默認使用10,表示十進制。如果省略該參數(shù)或其值為 0,則數(shù)字將以 10 為基礎(chǔ)來解析。如果它以 “0x” 或 “0X” 開頭,將以 16 為基數(shù)。如果radix在2-36之外會返回NaN。
那么根據(jù)上面的函數(shù)定義,這道題目即可轉(zhuǎn)化為求下面這個數(shù)組的值:

[parseInt('1', 0),parseInt('2', 1),parseInt('3', 2)]

結(jié)果顯而易見:[1, NaN, NaN]

7、find和filter的區(qū)別

A、find:返回符合測試條件的第一個數(shù)組元素索引值,如果沒有符合條件的則返回 undefined。對于空數(shù)組,函數(shù)是不會執(zhí)行的。沒有改變數(shù)組的原始值。

array.find(function(currentValue, index, arr)[,thisValue])

callback函數(shù)需要以下3個值:
??????currentValue:當(dāng)前處理數(shù)值
??????index:處理的數(shù)值的索引值
??????arr:map函數(shù)處理的函數(shù)值
thisValue:可選
B、filter:創(chuàng)建一個新的數(shù)組,新數(shù)組中的元素是通過檢查指定數(shù)組中符合條件的所有元素。如果沒有符合條件的元素則返回空數(shù)組。不改變數(shù)組的原始值。

array.filter(function(currentValue,index,arr)[, thisValue])

參數(shù)同find

8、出現(xiàn)下圖這種情況的原因以及解決辦法
行內(nèi)div顯示錯位

html及css代碼:


html及css
原因:

1、同一行的行內(nèi)元素對齊方式默認是底部對齊,即vertical-align:baseline;
2、對于內(nèi)容為空的inline-block元素而言,該元素的基線就是它的margin底邊緣,否則就以元素的內(nèi)部最后一行內(nèi)聯(lián)元素為基線,所以你看黃色的div和cxcx那一排字是對齊的。

解決方式:

1.float方式(考慮脫離流后后面元素不易控制,故不首選)
2.增加vertical-align屬性,改成下面醬紫就可以了:

div {
    display: inline-block;
    vertical-align:bottom;//居中,頂部,底部都可以
}
9、使用原生js 實現(xiàn)下圖中所示的input和p標(biāo)簽點擊刪除自己

刪除自己

考察點:document.getelementsByTagName、document.querySelectorAll、onclick、DOM節(jié)點刪除、
可以通過getelementsByTagName一個個獲取標(biāo)簽節(jié)點,但是如果標(biāo)簽很多,還是用querySelectorAll吧。注意子節(jié)點的刪除方式。

 var tags = document.querySelectorAll('input,p');
 for (var i = 0; i < tags.length; i++) {
       tags[i].onclick = function () {
           this.parentNode.removeChild(this);//首先要找到當(dāng)前節(jié)點的父節(jié)點,然后刪除父節(jié)點的子節(jié)點
      }
 }
10、使用原生js給動態(tài)生成的button添加click事件

考察點:委托、監(jiān)聽、冒泡
注意:addEventListener的最后一個參數(shù),默認false,在冒泡階段執(zhí)行;true,捕獲階段執(zhí)行。
具體實現(xiàn):

        var myBody = document.getElementsByTagName("body")[0];
        AddButton();
        function AddButton() {
            var bt = document.createElement("button");           //createElement生成button對象
            bt.innerHTML = '刪除';
            myBody.appendChild(bt);                         //添加到頁面
        }
        function fnHandler(e) {
            e = e || window.event;
            var t = e.target || e.srcElement;  //t:目標(biāo)對象
            var tagName = t.tagName; //tagName標(biāo)簽名稱
            if (tagName == 'BUTTON') {
                console.log('333333333333');
            }
        }
        function addEventHandler(oTarget, sEventType, fnHandler) {
            if (oTarget.addEventListener) {   //監(jiān)聽IE9,谷歌和火狐  
                oTarget.addEventListener(sEventType, fnHandler, false);
            } else if (oTarget.attachEvent) {  //IE  
                oTarget.attachEvent("on" + sEventType, fnHandler);
            } else {
                oTarget["on" + sEventType] = fnHandler;
            }
        }
        addEventHandler(myBody, 'click', fnHandler);
11、禁止瀏覽器回退

A、回退后,產(chǎn)生一個前進事件。
window.history.forward(1);
B、禁用鍵盤的backspace鍵,繁瑣且沒有辦法消除鼠標(biāo)的誤操作。
C、h5新增,可消除后退的所有動作。包括 鍵盤、鼠標(biāo)手勢等產(chǎn)生的后退動作。

history.pushState(null, null, document.URL);//創(chuàng)建(添加)一個新的history實體,消除歷史記錄
window.addEventListener('popstate', function () {//監(jiān)聽
   history.pushState(null, null, document.URL);
});
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • HTML+CSS1.對WEB標(biāo)準以及W3C的理解與認識標(biāo)簽閉合、標(biāo)簽小寫、不亂嵌套、提高搜索機器人搜索幾率、使用外...
    DaveWeiYong閱讀 326評論 0 1
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,627評論 18 399
  • Doctype作用?標(biāo)準模式與兼容模式各有什么區(qū)別? (1)、<!DOCTYPE>聲明位于位于HTML文檔中的第一...
    幺加幺閱讀 1,269評論 2 50
  • 正確本身其實可能沒有什么價值,當(dāng)你是正確的,別人也是,那正確本身價值不大。 你是錯的別人是對的,那就可怕了。 你是...
    愛一茶江泳閱讀 83評論 0 0
  • 從會展地鐵出來,風(fēng)呼呼地吹,熱。 中心城燈都熄了,皇庭剩下廣告牌還在循環(huán),只有四季和coco閃亮地屹立不倒。 這種...
    w00ds閱讀 228評論 0 0

友情鏈接更多精彩內(nèi)容