JavaScript Perfection kill 测试及答案


Posted in Javascript onMarch 23, 2010

下面是选择题:官方地址是 http://perfectionkills.com/javascript-quiz/

1. 
(function(){ 
return typeof arguments; 
})(); 
“object” 
“array” 
“arguments” 
“undefined” 
2. 
var f = function g(){ return 23; }; 
typeof g(); 
“number” 
“undefined” 
“function” 
Error 
3. 
(function(x){ 
delete x; 
return x; 
})(1); 
1 
null 
undefined 
Error 
4. 
var y = 1, x = y = typeof x; 
x; 
1 
“number” 
undefined 
“undefined” 
5. 
(function f(f){ 
return typeof f(); 
})(function(){ return 1; }); 
“number” 
“undefined” 
“function” 
Error 
6. 
var foo = { 
bar: function() { return this.baz; }, 
baz: 1 
}; 
(function(){ 
return typeof arguments[0](); 
})(foo.bar); 
“undefined” 
“object” 
“number” 
“function” 
7. 
var foo = { 
bar: function(){ return this.baz; }, 
baz: 1 
} 
typeof (f = foo.bar)(); 
“undefined” 
“object” 
“number” 
“function” 
8. 
var f = (function f(){ return "1"; }, function g(){ return 2; })(); 
typeof f; 
“string” 
“number” 
“function” 
“undefined” 
9. 
var x = 1; 
if (function f(){}) { 
x += typeof f; 
} 
x; 
1 
“1function” 
“1undefined” 
NaN 
10. 
var x = [typeof x, typeof y][1]; 
typeof typeof x; 
“number” 
“string” 
“undefined” 
“object” 
11. 
(function(foo){ 
return typeof foo.bar; 
})({ foo: { bar: 1 } }); 
“undefined” 
“object” 
“number” 
Error 
12. 
(function f(){ 
function f(){ return 1; } 
return f(); 
function f(){ return 2; } 
})(); Error (e.g. “Too much recursion”) 
undefined 
13. 
function f(){ return f; } 
new f() instanceof f; 
true 
false 
14. 
with (function(x, undefined){}) length; 
undefined 
Error

下面是个人的解答:

// Q1 
(function(){ 
return typeof arguments; //很显然这里应该返回的是 "object" 
})(); 
// Q2 
var f = function g(){ return 23; }; 
typeof g(); //在ie下,这里返回的是 "number",但是在ff下,却是Error(g未定义) 
// Q3 
(function(x){ 
delete x; //应该说局部变量是不能被delete的 
return x; //所以这里返回1 
})(1); 
/* 
赠送: 
delete与变量,有以下关系: 
1、对象预定义的属性是不能被delete的;2、通过prototype指定的属性是不能delete的 
//关于2,可以理解成只能删除动态附加给对象实例的属性? 
3、var定义的(我个人理解是局部变量)是不能被delete的;4、function定义的变量及参数(相当于局变量)是不能被删除的。 
关于delete的介绍,这里有:http://tech.idv2.com/2008/01/09/javascript-variables-and-delete-operator/ 
*/ 
// Q4 
var y = 1, x = y = typeof x; 
x; //很显然,x应该是undefined 
// Q5 
(function f(f){ 
return typeof f(); //这里的f指的是传进来的匿名函数,因此应该是 "number" (也就是1) 
})(function(){ return 1; }); 
// Q6 
var foo = { 
bar: function() { return this.baz; }, 
//但是,调用后,这里的this指向了bar,而bar是没有baz属性的,因此是undefined 
baz: 1 
}; 
(function(){ 
return typeof arguments[0](); //arguments[0]是foo.bar 
})(foo.bar); 
// Q7 
var foo = { 
bar: function(){ return this.baz; }, //同第6题 
baz: 1 
} 
typeof (f = foo.bar)(); 
// Q8 
var f = (function f(){ return "1"; }, function g(){ return 2; })(); 
//js的,号操作符,被调用的是第2个函数,因此返回的是"number" 
typeof f; 
// Q9 
var x = 1; 
if (function f(){}) { 
x += typeof f; //ie下是 1function、ff下是1undefined 
} 
x; 
// Q10 
var x = [typeof x, typeof y][1]; //x="undefined" 
typeof typeof x; //x是字符串,因此应该是 "string" 
// Q11 
(function(foo){ 
return typeof foo.bar; 
//非常隐暗的一道题,参数foo指向的是传进来的json对象,而json对象又有个foo属性。 
//因此,此处如果是 typeof foo.foo.bar的话就是"number" 
//但,参数foo本身是没有bar属性的,因此是 "undefined" 
})({ foo: { bar: 1 } }); 
// Q12 
(function f(){ 
function f(){ return 1; } 
return f(); // 函数定义,后者覆盖前者,因此是 2 
function f(){ return 2; } 
})(); 
// Q13 
function f(){ return f; } 
new f() instanceof f; 
//new f()实际上和f是同一个东西,都是function,因此,两者是==,因此是false 
//如果function f(){return 1;},那么返回的是object 
// Q14 
with (function(x, undefined){}) length; 
//这样写就明白了 with(function(x,undefined){}){length;} 
//而length,指是的function的形参个数,因此是 2
Javascript 相关文章推荐
JQuery入门——用映射方式绑定不同事件应用示例
Feb 05 Javascript
js switch case default 的用法示例介绍
Oct 23 Javascript
jQuery获得子元素个数的方法
Apr 14 Javascript
AngularJS 中使用Swiper制作滚动图不能滑动的解决方法
Nov 15 Javascript
node.js版本管理工具n无效的原理和解决方法
Nov 24 Javascript
select自定义小三角样式代码(实用总结)
Aug 18 Javascript
Cpage.js给组件绑定事件的实现代码
Aug 31 Javascript
webstorm添加*.vue文件支持
May 08 Javascript
JS解析后台返回的JSON格式数据实例
Aug 06 Javascript
在NPM发布自己造的轮子的方法步骤
Mar 09 Javascript
vue自定义switch开关组件,实现样式可自行更改
Nov 01 Javascript
react实现移动端下拉菜单的示例代码
Jan 16 Javascript
锋利的jQuery 第三章章节总结的例子
Mar 23 #Javascript
jQuery 核心函数以及jQuery对象
Mar 23 #Javascript
jquery easyui的tabs使用时的问题
Mar 23 #Javascript
Jquery Ajax学习实例7 Ajax所有过程事件分析示例
Mar 23 #Javascript
jQuery 位置函数offset,innerWidth,innerHeight,outerWidth,outerHeight,scrollTop,scrollLeft
Mar 23 #Javascript
锋利的jQuery 要点归纳(二) jQuery中的DOM操作(下)
Mar 23 #Javascript
javascript 多浏览器 事件大全
Mar 23 #Javascript
You might like
YB217、YB235、YB400浅听
2021/03/02 无线电
CodeIgniter连贯操作的底层原理分析
2016/05/17 PHP
详解php 使用Callable Closure强制指定回调类型
2017/10/26 PHP
PHP给前端返回一个JSON对象的实例讲解
2018/05/31 PHP
IE6图片加载的一个BUG解决方法
2010/07/13 Javascript
jQuery EasyUI API 中文文档 - ProgressBar 进度条
2011/09/29 Javascript
JS实现兼容性好,带缓冲的动感网页右键菜单效果
2015/09/18 Javascript
jQuery模仿京东/天猫商品左侧分类导航菜单效果
2016/06/29 Javascript
Vuex之理解state的用法实例
2017/04/19 Javascript
Vue应用部署到服务器的正确方式
2017/07/15 Javascript
小程序视频或音频自定义可拖拽进度条的示例代码
2018/09/30 Javascript
详解vue.js移动端配置flexible.js及注意事项
2019/04/10 Javascript
通过vue手动封装on、emit、off的代码详解
2019/05/29 Javascript
nodejs log4js 使用详解
2019/05/31 NodeJs
微信小程序静默登录的实现代码
2020/01/08 Javascript
viewer.js一个强大的基于jQuery的图像查看插件(支持旋转、缩放)
2020/04/01 jQuery
Vue.js原理分析之nextTick实现详解
2020/09/07 Javascript
vant自定义二级菜单操作
2020/11/02 Javascript
Python使用logging结合decorator模式实现优化日志输出的方法
2016/04/16 Python
python验证码识别的示例代码
2017/09/21 Python
python编写分类决策树的代码
2017/12/21 Python
详解利用python+opencv识别图片中的圆形(霍夫变换)
2019/07/01 Python
python 实现多维数组转向量
2019/11/30 Python
tensorflow mnist 数据加载实现并画图效果
2020/02/05 Python
pycharm 添加解释器的方法步骤
2020/08/31 Python
详解CSS3新增的背景属性
2019/12/25 HTML / CSS
美国最佳在线航班预订网站:LookupFare
2019/03/26 全球购物
网上蛋糕店创业计划书
2014/01/24 职场文书
高中军训的心得体会
2014/09/01 职场文书
社区四风存在问题及整改措施
2014/10/26 职场文书
2014村书记党建工作汇报材料
2014/11/02 职场文书
寒暑假实习证明书模板
2014/11/29 职场文书
2014年幼儿园老师工作总结
2014/12/05 职场文书
2015教师个人德育工作总结
2015/07/22 职场文书
传单、海报早OUT了,另类传单营销方案送给你!
2019/07/15 职场文书
Win11怎么跳过联网验机 ?Win11跳过联网验机激活教程
2022/04/05 数码科技