2015年10月丁香园Web前端面试题

匿名网友 匿名网友 发布于: 2015-10-29 00:00:00
阅读 182 收藏 0 点赞 0 评论 0

下午一点半到,填了个人资料后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;
}

评论列表
文章目录