Skip to content

Instantly share code, notes, and snippets.

@chemdemo
Last active August 29, 2015 14:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save chemdemo/9cd6e416844c3132c4bb to your computer and use it in GitHub Desktop.
Save chemdemo/9cd6e416844c3132c4bb to your computer and use it in GitHub Desktop.
Interview questions
  • 求值:
var n1 = 10;
var n2 = 5;
var r = n1+++n2;
console.log(n1, n2, r); // => 11, 5, 15
  • 求值:
var s = 'Hello world';
console.log(s.substring(1, 4), s.substr(1, 4)); // => ell, ello
  • 求值:
(function(x) {
    delete x;
    return x;
}(1)); // => 1
  • 求值:
12['toString']['length']; // => 1
  • 求值:
var d1 = new Date(2010, 3, 31);
var d2 = new Date(2010, 3, 0);
console.log(d1.getDate(), d2.getDate()); // => 1, 31
  • 求值:
function fn(x, y) {
    x = 1;
    console.log(arguments[0], arguments[1]);
};
fn(); // => undefined
  • 求值:
var x = 10;
var foo = {
    x: 15,
    bar: function() {
        var x = 20;
        return this.x;
    }
};
console.log(foo.bar()); // => 15
console.log((foo.bar)()); // => 15
console.log((foo.bar = foo.bar)()); // => 10
console.log((foo.bar, foo.bar)()); // => 10
  • 求值:
var b = 10;
var b = (
    10,
    function(x) {return x + 10;},
    function() {return arguments[0];}
);
a = b + c
({x: 10}).x;
// => 20
  • 求值:
var a = (1,5 - 2) * 2; // => 6
  • 求值:
function x() {};
var x;
console.log(x); // => function x() {}
function y() {};
var y = 1;
console.log(y); // => 1
  • 求值:
function a() {console.log(this);}; // => window
a.call(null);
  • 求值:
alert(undefined == null); // true
alert(undefined === null); // false
alert(null === null); // true
  • 求值:
typeof typeof(null); // => string
  • 求值:
if(!('x' in window)) {var x = 1;};
alert(x); // => undefined
  • 求值:
var s = [1,2,3,5,4];
alert(s.slice(-3, -1)); // => [3,5]
  • 求值:
var o = {1: 1, 2: 2};
console.log(o['1']); // chrome? 1 firefox? 1 ie6? 语法错误
  • 求值:
var o = {
    x: 10,
    valueOf: function() {
        return this.x + 2;
    },
    toString: function() {
        return this.x.toString();
    }
};
var r = o < '11';
alert(o); // => 10
alert(o < '11'); // => false
  • 求值:
var x = 1;
var o = {
    x: 2,
    run: function() {
        var x = 3;
        setTimeout(function() {
            alert(this.x);
        }, 100);
    }
};
o.run(); // => 1

创建一个跨浏览器的XHR对象

function createXhr() {
    return window.ActiveXObject ? new ActiveXObject('Microsoft.XMLHTTP') : new XMLHttpRequest();
};

实现DOM事件的绑定、解绑,跨浏览器+正确处理this的指向

function on(el, type, fn) {
    if(el.addEventListener) {
        el.addEventListener(type, fn, false);
        return true;
    }
    
    if(el.attachEvent) {
        el['_e' + type + fn.name] = fn;
        el[type + fn.name] = function() {
            el['_e' + type + fn.name](window.event);
        };
        el.attachEvent('on' + type, el[type + fn.name]);
        return true;
    }
    
    return false;
};

function off(el, type, fn) {
    if(el.removeEventListener) {
        el.removeEventListener(type, fn, false);
        return true;
    }
    
    if(el.detachEvent) {
        el.detachEvent('on' + type, el[type + fn.name]);
        el['_e' + type + fn.name] = null;
        el[type + fn.name] = null;
        return true;
    }
    
    return false;
};

常用的web性能优化有哪些?

Gzip压缩文件、web缓存、避免css表达式、减少cookie、CSS Sprite、CDN加速、开启长连接

js跨域的方法,举出至少4种。

server proxy,jsonp、iframe、window.name、postMessage

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment