说明:
这个测试不是玩一些奇淫技巧来让你颇费思量,而是用来方便招聘人员筛选前端开发人员,其主要目的就是为了pass掉那些只会用jQuery而不懂javaScript底层的应聘者。
-
两个变量比较时,在什么情况下会发生变量类型的强制转换? 如何去避免这种强制转换呢? 如何将一个变量值转换为布尔值(如
null
、0
转换false、1
转换为true)呢? -
描述下变量作用域是怎么工作的,如何用匿名函数去创建一个能立即执行的闭包。
-
简要介绍下原型继承和传统的类继承的区别。
-
描述下什么是“模块化模式”(module pattern),以及基于其之上的“揭示模块化模式”(revealing module pattern)。
-
浏览器端的MVC(或者MVVM)工作机制是什么?你用过哪些MVC(MVVM) JS框架?
-
以下计算结果为啥不同?
'1' + 2 + 3 ; // 等于 '123' 3 + 2 + '1'; // 等于 '51' 3 + 2 + 1 ; // 等于 6
-
为什么
0.3
不是 预期的计算结果,如何得到正确的计算结果呢?0.1 + 0.2; // 结果为 0.30000000000000004
-
描述下什么是变量声明提升(variable hoisting),如何避免变量生命提升可能导致的问题?
-
如下的代码有什么区别?
function foo() {} // 另外一种写法 var foo = function() {};
-
什么时候用call函数,什么时候用apply函数,它们有啥区别?
-
如何判断一个变量是对象还是数组. (提示:
typeof
返回结果不一定准确!) -
在下面的代码中,foo代表什么? (提示: 需要弄清楚
this
代表什么。)(function(foo) { // 'foo'指代什么? })(this);
-
在Javascript(和DOM)中,一些诸如
window
、document
、undefined
的全局变量并不是一成不变的,用户可能会对它们重新赋值,如何保证我们用的这些内置变量是最原始的值而不是用户修改过的(提示: 参考上一个问题 ),如下面的代码所示:var window = ''; var document = 0; var undefined = true;
-
请用一句代码来复制一个数组
-
What is the difference between
setInterval
andsetTimeout
? Bonus: What is the lowest cross-browser increment that each can accurately use?setInterval
和setTimeout
有啥区别? -
解释下
delete
是如何工作的,什么类型的变量不可删除? -
解释下事件委托是如何工作的,在UI交互时,什么情况下该用事件委托呢?如下面的例子所示…
<ul id="special"> <li> <a href="#">Special link 1</a> </li> <li> <a href="#">Special link 2</a> </li> <li> <a href="#">Special link 3</a> </li> </ul>
-
下面代码的作用是什么?
var foo = bar ? bar : 0;
-
你在什么情况下会写下面的代码?这样的代码可能存在什么问题?
foo && foo.bar();
-
parseInt
和parseFloat
有啥区别? 什么时候需要调用数字的toFixed()
方法? 下面的代码在什么情况下会有用处?var my_number = my_string - 0;
-
写一个名为
sum
的函数,它能返回所有参数的总和. 使用如下所示…// 结果为15 sum(1, 2, 3, 4, 5); // 结果为0 sum(5, null, -5); // 结果为10 sum('1.0', false, 1, true, 1, 'A', 1, 'B', 1, 'C', 1, 'D', 1, 'E', 1, 'F', 1, 'G', 1); // 结果为 0.3, 而不是 0.30000000000000004 sum(0.1, 0.2);