JavaScript面试题目集锦
2012-09-21 16:44
190 查看
这里是我到处搜集的一些JS题目,看起来比较简单,但对基础知识的考察还是很到位的。
有一些还可能是面试题。 题目的分析肯定会有不足的地方 ,如果能指正出来的话就再好不过了。不断更新中……
这里还有几个前端工程师面试题的文章 也一并推荐给大家
http://www.cnblogs.com/jscode/archive/2012/07/10/2583856.html#2425501
http://blog.jobbole.com/29269/
一.
①f.length是Function f的形参数量 函数声明之后就不会变化了。
②执行时 arguments = [function(){return this.length;} , 33 , 11];
arguments[0]中的this指向的是arguments对象 而arguments.length 得到的是实参的个数(不管函数声明的时候有几个参数)
③a的获得相当于 var a = foo.bar;这时a的调用对象是window 而不是foo 。
④(foo.bar)() === foo.bar()这个就不细说了
⑤通过arguments能够改变实参的值
二.
用(0-9 A-Z a-z)生成任意长度(62位以内)的各个位都不重复的随机字符串
三.
四.
五.
全局变量是window的属性
执行上下文分为进入执行上下文和执行代码两部分。变量声明和函数声明在进入执行上下文阶段就已完成。
要注意的一点是 ①和②答案的不同原因在于 a 声明的是全局变量 而b因为是在函数中,所以是局部变量。
六.
七.
八.
九.
找出某数字数组中的最大元素(使用Math.max函数)
十.
转化一个数字数组为function数组(每个function都弹出相应的数字)
十一.
给object数组进行排序(排序条件是每个元素对象的属性个数)
十三.
实现如下语法的功能:var a = (5).plus(3).minus(6); //5+3-6
十四.
实现如下语法的功能:var a = add(2)(3)(4)(111).....; //2+3+4+111+... 可无限扩展的。
注:以上第五到第十四题的出处 http://dmitry.baranovskiy.com/post/91403200
没有标准答案。 我在这里给出的答案也只是自己觉得不错的答案而已。
十五.
考点:with对作用域的影响
十六
考点:setTimeout的执行时机
如果不清楚setTimeout中function的触发时机的话,这绝对是个大坑
接下来的若干题目整理自http://perfectionkills.com/javascript-quiz/
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
有一些还可能是面试题。 题目的分析肯定会有不足的地方 ,如果能指正出来的话就再好不过了。不断更新中……
这里还有几个前端工程师面试题的文章 也一并推荐给大家
http://www.cnblogs.com/jscode/archive/2012/07/10/2583856.html#2425501
http://blog.jobbole.com/29269/
一.
var length = 9; var foo = { bar: function() { return this.length; }, length: 0 }; (function f(a, b) { f.length = 3; console.log(f.length);//① console.log(arguments[0]());//② console.log(a());//③ console.log((foo.bar)());//④ arguments[1]="XXX"; console.log(b);//⑤ })(foo.bar ,33,11);
①f.length是Function f的形参数量 函数声明之后就不会变化了。
②执行时 arguments = [function(){return this.length;} , 33 , 11];
arguments[0]中的this指向的是arguments对象 而arguments.length 得到的是实参的个数(不管函数声明的时候有几个参数)
③a的获得相当于 var a = foo.bar;这时a的调用对象是window 而不是foo 。
④(foo.bar)() === foo.bar()这个就不细说了
⑤通过arguments能够改变实参的值
二.
用(0-9 A-Z a-z)生成任意长度(62位以内)的各个位都不重复的随机字符串
三.
function A(){ alert(this); eval('alert(this)'); (function(){ alert(this); eval('alert(this)'); })() } new A() 分别弹出什么?
四.
function A(){this.x=1;} function B(){this.y=2;return "OK";} function C(){this.z=3;return Object("OK");} 问: new A(); new B(); new C(); 三者分别是什么类型对象?(即用Object.getPrototypeOf(obj)获得的值) 可参考另一篇文章《JS中用new 创建对象及在构造函数中return的使用》
五.
<script> //① if (!("a" in window)) { var a = 1; } alert(a); //② function f(){ if (!("b" in window)) { var b = 1; } alert(b); } f(); </script>
全局变量是window的属性
执行上下文分为进入执行上下文和执行代码两部分。变量声明和函数声明在进入执行上下文阶段就已完成。
要注意的一点是 ①和②答案的不同原因在于 a 声明的是全局变量 而b因为是在函数中,所以是局部变量。
六.
var a = 1; alert(b); var b = function a(x) { x && a(--x); } alert(a); ①这里的Function b 不是函数声明 而是函数表达式。所以只能在执行到代码的时候才会赋值。 ②Function b 中的 a 只是匿名函数的别名,而且是个只能在 Function b里使用的局部变量。 也就是说跟变量a没有关系,不会发生覆盖。
七.
var a = 1; function a() { } function b() { } var b; console.log(a); console.log(b); //这里考察的是变量声明,变量赋值,函数声明的顺序: //进入执行上下文后先进行函数声明,然后是变量声明,最后进行变量赋值。并且如果函数或变量已经存在,将不会重新声明。 //也就是说,即使把变量声明并赋值写到函数声明前面,也还是会按照上面的顺序进行。
上面的代码等同于 function a() { } function b() { } var a, b; a = 1;
八.
function A() { function m(){ console.log(this); } this.test = function() { m.call(this); m.call(null); }; } (new A()).test(); //this值的定义:当一个方法在对象上调用的时候,this就指向到了该对象上 //m.call(this)的结果肯定是没问题的 //当call和apply的第一个参数是null或undefined时,参数将替换成window对象
九.
找出某数字数组中的最大元素(使用Math.max函数)
var arr = [3,5,2,7,10,8]; ①Math.max.apply([],arr); ②eval("(Math.max("+arr+"))"); 这是目前看到的最好最简洁两种方案了,活用apply和eval 题外话:大家初学的时候都被告诫要“远离”eval,实际上,如果合理使用的话,eval绝对是把利器。
十.
转化一个数字数组为function数组(每个function都弹出相应的数字)
var a = [2,4,6,3]; var b =a.map(function(i,o){ return function(){return console.log(i);}; });
十一.
给object数组进行排序(排序条件是每个元素对象的属性个数)
var arr = [ {A:32,B:2,C:5}, {A:32}, {A:32,B:2,C:5,D:7}, {A:32,B:2,C:5} ]; arr.sort(function(m,n){ function getPropCount(obj){ var i=0; if(typeof obj == "object"){ for(var p in obj){ ++i; } } return i; } return getPropCount(m) - getPropCount(n); });
十三.
实现如下语法的功能:var a = (5).plus(3).minus(6); //5+3-6
Number.prototype.plus = function(num) { return this + num; }; Number.prototype.minus = function(num) { return this - num; }; console.log((5).plus(3).minus(6)); 这里 (5).plus(3).minus(6) 可以用 5..plus(3).minus(6)代替 但不可以用 5.plus(3).minus(6) 数字后面的第一个小数点是属于数字部分的,相当于 5.0.plus(3),第二个才是调用方法。 所以 5.plus()是会出错 而 5..plus()却可以
十四.
实现如下语法的功能:var a = add(2)(3)(4)(111).....; //2+3+4+111+... 可无限扩展的。
function add(x) { function fn(m) { fn.pValue = m + (fn.pValue || 0); return fn; }; fn.pValue = x; fn.toString = fn.valueOf = function() { return fn.pValue; } return fn; } 这里主要考察的是toString的重载。例如下面的例子 var arr = [1,3,5] console.log(arr+""); // "1,3,5" Array.prototype.toString=function(){ return this.join("--"); } console.log(arr+""); // "1--3--5"
注:以上第五到第十四题的出处 http://dmitry.baranovskiy.com/post/91403200
没有标准答案。 我在这里给出的答案也只是自己觉得不错的答案而已。
十五.
考点:with对作用域的影响
var x = 1; (function() { var x = 2; function funcA() { console.log(this.x); } with ({ funcB: function() { console.log(this.x); } , x: 3 }) { function funcC() { console.log(this.x); } funcA();//? funcB();//? funcC();//? }; } ())
十六
考点:setTimeout的执行时机
var A = true; setTimeout(function(){ A = false; },1000); while(A){} alert("End"); //问:大约过多久会alert?
如果不清楚setTimeout中function的触发时机的话,这绝对是个大坑
接下来的若干题目整理自http://perfectionkills.com/javascript-quiz/
17.
(function(){ return typeof arguments; })(); 1.“object” 2.“array” 3.“arguments” 4.“undefined” 考点:arguments是类似于数组的对象,访问方式与数组相同
18.
var f = function g(){ return 23; }; typeof g(); “number” “undefined” “function” Error g是f方法的别用,且只能在f方法的内部使用
19.
(function(x){ delete x; return x; })(3); 3 null undefined Error delete 只用于删除某个对象的属性,如果没有指定对象的话,则默认是window 而这里面的形参x显然不是属性
20.
var y = 1, x = y = typeof x; console.log(x); 1 “number” undefined “undefined” 考点:变量声明与赋值的时机
21.
(function f(f){ return typeof f(); })(function(){ return 1; }); “number” “undefined” “function” Error
22.
var foo = { bar: function() { return this.baz; }, baz: 1 }; (function(){ return typeof arguments[0](); })(foo.bar); “undefined” “object” “number” “function”
23.
var foo = { bar: function(){ return this.baz; }, baz: 1 } typeof (f = foo.bar)(); “undefined” “object” “number” “function”
24.
var f = (function f(){ return "1"; }, function g(){ return 2; })(); typeof f; “string” “number” “function” “undefined”
25.
var x = 1; if (function f(){}) { x += typeof f; } x; 1 “1function” “1undefined” NaN 这个答案在浏览器间存在差异
26.
var x = [typeof x, typeof y][1]; typeof typeof x; “number” “string” “undefined” “object”
27.
(function(foo){ return typeof foo.bar; })({ foo: { bar: 1 } }); “undefined” “object” “number” Error 这个问题是考眼力的。。。 匿名函数的实参相当于 var arg = {foo:{bar:1}}; 所以在函数执行的时候 相当于
var arg = {foo:{bar:1}}; return arg.bar;
28.
(function f(){ function f(){ return 1; } return f(); function f(){ return 2; } })(); 1 2 Error (e.g. “Too much recursion”) undefined 考点:函数的声明与赋值时机
29.
function f(){ return f; } new f() instanceof f; true false 相当于 f instanceof f;
30.
with (function(x, undefined){}) length; 1 2 undefined Error 乍看好像有点蒙 分解一下就好了 var f = function(x,undefined){}; with(f){ length; } //这句再恢复一下就是 with(f){ return f.length;}
31.
console.log(Function instanceof Object); var arr = []; console.log(arr.constructor === Array.prototype.constructor); var num = new Number(2); console.log(typeof num);
相关文章推荐
- c#面试题目集锦
- 史上最全ASP.NET面试题目集锦(1)
- C#和ASP.Net面试题目集锦-找工作-IT求职-职场-招聘经验
- C#和ASP.Net面试题目集锦
- android面试题目大全<完结部分>,android笔试题目集锦
- 最近面试的题目(WEB、Service、SQL、JavaScript)
- 面试题目集锦
- BAT等公司高薪招聘Android开发面试题目集锦
- 2015面试题目集锦
- C#和ASP.Net面试题目集锦[转载]
- JavaScript面试题目
- 前端面试题目汇总(一)HTML、CSS、JavaScript
- 面试题目集锦--二叉树
- 超高难度javascript面试题目
- JavaScript常见面试题目
- Javascript面试题目
- [Javascript面试题]--BAT三年面试集锦之Javascript/JS面试(你一定会遇到)
- 面试题目集锦 -- 排序算法
- C/C++面试题目集锦
- JAVA笔试面试题目集锦