1.獲取一堆name名相同的div猖辫,點(diǎn)擊彈出顯示第幾個(gè)div
(本題主要考察閉包的用法森瘪,是在面試中常被問的題目托启,不難但是比較容易上當(dāng)?shù)念}目)
var boxes = document.getElementsByTagName("div");
for(var i = 0; i < boxes.length; i++) {
boxes[i].index = i+1;
boxes[i].onclick = function() {
alert(this.index);
}
}
答案二
var boxes = document.getElementsByTagName("div");
for(var i = 0; i < boxes.length; i++) {
(function(i){
boxes[i].onclick = function() {
alert(i+1);
}
})(i);
}
2.abcdefgsdds 獲取里面字面最多的字母(答案有很多)
var str = “abcdefgsdds”;
var obj = {};
var arr = [];
var letter;
for(var i = 0,len = str.length;i
letter = str[i];
if(!obj[letter]){
obj[letter] = 1;
}else{
obj[letter]++;
}
}
var max_key,max_num=0;
for(key in obj){
if(max_num
max_num = obj[key];
max_key = key;
}
}
document.write(“字母:”+max_key+” 次數(shù):”+max_num);
3.abcdefghi 獲取ghi怎么實(shí)現(xiàn)
答:”abcdefghi".substring(6)
答:”asdjhklzxc".substring(3,-1)
答:”asd".split("").reverse().join("")
答:arr.shift()
7.[1,2,1,3,2,3,5,6,5]? 去除重復(fù)元素
var arr = [1,2,1,3,2,3,5,6,5] ;
var newArr = [];
for(var i = 0; i < arr.length; i++) {
if(newArr.indexOf(arr[i]) == -1) {
newArr.push(arr[i]);
}
}
alert(newArr)
7.JS中有幾種數(shù)據(jù)類型分別是哪幾種肋殴?
答:Number,String,Boolean,Object,Null,Undefined
mousedown,mousermove,mouseup事件
e.clientX,e.clientY 鼠標(biāo)位置
碰撞檢測(cè)
9.用JS創(chuàng)建一個(gè)a標(biāo)簽裆操,在body中顯示怒详,點(diǎn)擊在新窗口打開
var alink = document.createElement("a");
alink.innerHTML = "google";
alink.;
alink.target = "_blank";
document.body.appendChild(alink);
function mousewheel(element,up,down) {
element.onmousewheel = fn;
if(window.addEventListener) {
element.addEventListener("DOMMouseScroll",fn,false)
}
function fn(e) {
var e = e || window.event;
console.log(e);
if(e.wheelDelta > 0 || e.detail < 0) {
up();
}else {
down();
}
e.cancelBubble = true;
e.stopPropagation();
}
}
mousewheel(document,function(){},function(){})//函數(shù)調(diào)用
12.定位右下角廣告
答:使用css position:fixed
13.鼠標(biāo)經(jīng)過A? A變大其他的位置不動(dòng)
答:A絕對(duì)定位,脫離文檔流即可
14.JS中避免命名沖突的三個(gè)方法(有些同學(xué)或許會(huì)想不到這些概念)
答:命名空間踪区,閉包昆烁,匿名函數(shù)
15.JS在HTML中的引入方式有哪些?又有什么優(yōu)缺點(diǎn)缎岗?
答:a外部引入b內(nèi)部嵌套c行內(nèi)代碼例:按鈕 對(duì)比css引入
16.寫出5條標(biāo)識(shí)符的命名規(guī)范()
答:1.區(qū)分大小寫静尼;
2.第一個(gè)字符必須是一個(gè)字母、下劃線(_)或一個(gè)美元符號(hào)($)
3..不能含有空格
4.不能以關(guān)鍵字或保留字命名,不能以數(shù)字開頭
17.從JS的角度传泊,寫出8條以上優(yōu)化代碼的方法鼠渺?
答:參考http://www.haorooms.com/post/web_xnyh_jscss
18.按優(yōu)先級(jí),對(duì)這幾種運(yùn)算符進(jìn)行排序:眷细!&&? *? =? >
答:拦盹!&& *> =
19.在循環(huán)中,break和continue語(yǔ)句的功能有何不同
答:break 終止整個(gè)循環(huán)溪椎,continue終止當(dāng)次循環(huán)
答:事件流解釋即可
21.說說什么叫做事件委托
答:利用事件冒泡的原理,子元素的事件會(huì)冒泡到父元素池磁,可以只給父元素添加事件奔害,通過事件目標(biāo)判斷元素。優(yōu)點(diǎn):節(jié)省內(nèi)存地熄,動(dòng)態(tài)添加的子元素也包含事件
22.列舉不少于6條的IE與FF腳本兼容性問題华临,需要寫出命令(也許同學(xué)們?nèi)狈偨Y(jié),看著簡(jiǎn)單端考,實(shí)際很難答全)
(1) window.event:
表示當(dāng)前的事件對(duì)象雅潭,IE有這個(gè)對(duì)象揭厚,F(xiàn)F沒有,F(xiàn)F通過給事件處理函數(shù)傳遞事件對(duì)象
(2) 獲取事件源
IE用srcElement獲取事件源扶供,而FF用target獲取事件源
(3) 添加筛圆,去除事件
IE:element.attachEvent(“onclick”, function) element.detachEvent(“onclick”, function)
FF:element.addEventListener(“click”, function, true) element.removeEventListener(“click”, function, true)
(4) 獲取標(biāo)簽的自定義屬性
IE:div1.value或div1[“value”]
FF:可用div1.getAttribute(“value”)
(5) document.getElementByName()和document.all[name]
IE;document.getElementByName()和document.all[name]均不能獲取div元素
FF:可以
(6) input.type的屬性
IE:input.type只讀
FF:input.type可讀寫
(7) innerText textContent outerHTML
IE:支持innerText, outerHTML
FF:支持textContent
(8) 是否可用id代替HTML元素
IE:可以用id來代替HTML元素
FF:不可以
23.構(gòu)造函數(shù)有何優(yōu)缺點(diǎn)椿浓?
答:構(gòu)造函數(shù)可以創(chuàng)建多個(gè)對(duì)象太援,
缺點(diǎn):容易跟普通函數(shù)一樣調(diào)用
答:函數(shù)內(nèi)部又定義了一個(gè)函數(shù),內(nèi)部函數(shù)引用外部函數(shù)的變量扳碍,就構(gòu)成了閉包
25.用自己的話描述一下對(duì)“異步“和”同步“的理解
同步:按順序執(zhí)行提岔,同一時(shí)刻只能執(zhí)行一個(gè)事件
異步:不按順序執(zhí)行,同一時(shí)刻可以執(zhí)行多個(gè)任務(wù)
26.寫倒計(jì)時(shí)距離2018年還有多少天多少小時(shí)多少分鐘多少秒
var time = document.getElementById("time");
function clock() {
//設(shè)置目標(biāo)日期
var targetDate = new Date(2018,0,1);
var currentDate = new Date();
var remainTime = targetDate - currentDate;
//天數(shù)
remainDay = parseInt(remainTime/1000/60/60/24);
//小時(shí)數(shù)
remainHours = parseInt(remainTime/1000/60/60%24);
//分鐘
remainMinutes = parseInt(remainTime/1000/60%60);
//秒
remainSeconds = parseInt(remainTime/1000%60);
time.innerHTML = remainDay + "天"+remainHours+"小時(shí)"+remainMinutes+"分鐘"+remainSeconds+"秒";
}
setInterval(clock,1000);
27.alert怎樣換行
答:轉(zhuǎn)義字符,換行符\n
alert("大家好\n大家好")
28.左側(cè)內(nèi)容可上下滾動(dòng)笋敞,右側(cè)是滾動(dòng)條碱蒙,如何實(shí)現(xiàn)布局
答:固定高度,overflow-y:scroll
29.向上滾動(dòng)動(dòng)畫如何實(shí)現(xiàn)
document.body.scrollTop = "xxx";
document.documentElement.scrollTop = "xxx";
30.form表單提交
答:默認(rèn)提交夯巷,form.onsubmit = function(){}可在表單數(shù)據(jù)提交之前驗(yàn)證
31.javaScript與ECMAScript的區(qū)別赛惩?
答:javascript是具體實(shí)現(xiàn),ECMAScript是標(biāo)準(zhǔn)趁餐,大綱
==等于,判斷值是否相等后雷,會(huì)有類型轉(zhuǎn)換
===全等褒搔,判斷類型跟值是否相等,類型不會(huì)轉(zhuǎn)換
33.什么是DOM喷面?
答:文檔對(duì)象模型
答:Undefined無定義走孽,null空
35.有兩個(gè)對(duì)象惧辈,var o = {num:1};var p = {num:2};要求書寫一段代碼,使得o+p===3為true磕瓷。
Object.prototype.toString = function(){
return this.num;
}
this的指向:普通函數(shù)內(nèi)的this指向全局變量
構(gòu)造函數(shù)內(nèi)部this指向新創(chuàng)建出來的對(duì)象
對(duì)象方法內(nèi)的this指向的是調(diào)用該方法的對(duì)象
call,apply,bind可以改變this的指向
答:new關(guān)鍵字后緊接的函數(shù)即為構(gòu)造函數(shù)啊胶,約定首字母大寫
39.原型甸各,原型鏈的理解
答:ECMA5之前沒有類的概念,js的繼承是基于原型鏈的
40.說說前端優(yōu)化從哪方面著手焰坪,具體說明有哪些趣倾?
html 語(yǔ)義化,符合標(biāo)準(zhǔn)某饰,減少嵌套層數(shù)儒恋,加快瀏覽器DOM解析速度
css 合并,壓縮少寫冗余css代碼黔漂,使用精靈圖...
js 減少DOM操作诫尽,使用變量緩存數(shù)據(jù),少用全局變量瘟仿,做動(dòng)畫的元素都絕對(duì)定位...