下午一点半到,填了个人资料后HR拿了份笔试题,限时30分钟。
从笔试题来看,确实是招聘前端工程师的。
- JS基础选择题
- JS代码运行结果题
- 重构优化DOM代码题
- 盒模型
- 事件代理代码题
- 数组去重
Q&A
- typeof返回六种类型: string, number, boolean, object, undefined, function
- 因为分组选择符:小括号 console.log((1,2,3)) // 3 走后面的函数,返回2,类型是number
var f = (function f(){return "1";},function g(){return 2;})();typeof f;- 事件代理
// 事件处理工具,跨浏览器兼容性var EventUtil = { // 这两个方法首先都会检测传入的元素是否存在DOM2级方法。 // 如果存在DOM2级方法,则使用该方法: // 传入事件类型、事件处理函数、false(表示冒泡) // 如果存在IE的方法,则使用第二种: // 事件类型必须加上"on"前缀。 // 最后一种使用DOM0方法【基本不会执行】。 // 传入的handler如果是匿名函数的话,无法被移除。 addHandler: function(element, type, handler) { if (element.addEventListener) { element.addEventListener(type, handler, false); } else if (element.attachEvent) { element.attachEvent("on" + type, handler); } else { element["on" + type] = handler; }; }, removeHandler: function(element, type, handler) { if (element.removeEventListener) { element.removeEventListener(type, handler, false); } else if (element.detachEvent) { element.detachEvent("on" + type, handler); } else { element["on" + type] = null; }; }, //取得event对象 getEvent: function(event) { return event ? event : window.event; }, // 只有在事件处理程序期间,event对象才会存在; // 一旦事件处理程序执行完成之后,event对象就会被销毁。 // 返回事件的目标 getTarget: function(event) { return event.target || event.srcElement; }, // 阻止事件的默认行为 preventDefault: function(event) { if (event.preventDefault) { event.preventDefault(); } else { event.returnValue = false; }; }, // 立即停止事件在DOM层次中的传播 // 取消进一步的事件捕获或冒泡 stopPropagation: function(event) { if (event.stopPropagation) { event.stopPropagation(); } else { event.cancelBubble = true; }; }}- 数组去重
function unique(arr){ if(arr && Array.isArray(arr)){ var i, len, map = {}; for(i = arr.length; i >= 0; i--){ if(arr[i] in map){ arr.splice(i, 1); } else { map[arr[i]] = true; } } } return arr;}


