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 相关文章推荐
js实时获取系统当前时间实例代码
Jun 28 Javascript
不同Jquery版本引发的问题解决
Oct 14 Javascript
jqgrid 编辑添加功能详细解析
Nov 08 Javascript
JS简单去除数组中重复项的方法
Sep 13 Javascript
canvas 实现中国象棋
Feb 17 Javascript
Angular.js中ng-include用法及多标签页面的实现方式详解
May 07 Javascript
基于Vue框架vux组件库实现上拉刷新功能
Nov 28 Javascript
ES6 系列之 WeakMap的使用示例
Aug 06 Javascript
解决Layui 表单提交数据为空的问题
Aug 15 Javascript
修改vue+webpack run build的路径方法
Sep 01 Javascript
javascript使用substring实现的展开与收缩文字功能示例
Jun 17 Javascript
推荐几个不错的console调试技巧实现
Dec 20 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
东芝TOSHIBA RP-F11电路分析
2021/03/02 无线电
PHP时间戳 strtotime()使用方法和技巧
2013/10/29 PHP
PHP小教程之实现链表
2014/06/09 PHP
[原创]php逐行读取txt文件写入数组的方法
2015/07/02 PHP
浅谈PHP中类和对象的相关函数
2017/04/26 PHP
Prototype 1.5.0_rc1 及 Prototype 1.5.0 Pre0小抄本
2006/09/22 Javascript
RGB颜色值转HTML十六进制(HEX)代码的JS函数
2009/04/25 Javascript
JQuery 1.4 中的Ajax问题
2010/01/23 Javascript
需要做特殊处理的DOM元素属性的访问
2010/11/05 Javascript
jQuery.getScript加载同域JS的代码
2012/02/13 Javascript
jquery选择器的选择使用及性能介绍
2013/01/16 Javascript
jQuery点击自身以外地方关闭弹出层的简单实例
2013/12/24 Javascript
Javascript学习笔记之 函数篇(二) : this 的工作机制
2014/06/24 Javascript
jquery常用方法及使用示例汇总
2014/11/08 Javascript
js使用split函数按照多个字符对字符串进行分割的方法
2015/03/20 Javascript
举例讲解Node.js中的Writable对象
2015/07/29 Javascript
jquery实现的伪分页效果代码
2015/10/29 Javascript
基于Jquery实现焦点图淡出淡入效果
2015/11/30 Javascript
Angular 1.x个人使用的经验小结
2017/07/19 Javascript
小程序实现授权登陆的解决方案
2018/12/02 Javascript
基于vue-cli、elementUI的Vue超简单入门小例子(推荐)
2019/04/17 Javascript
JavaScript之Blob对象类型的具体使用方法
2019/11/29 Javascript
Python Web框架Flask信号机制(signals)介绍
2015/01/01 Python
python学习笔记之列表(list)与元组(tuple)详解
2017/11/23 Python
Python网络编程使用select实现socket全双工异步通信功能示例
2018/04/09 Python
python实现zabbix发送短信脚本
2018/09/17 Python
Python学习笔记之函数的参数和返回值的使用
2019/11/20 Python
Keras 在fit_generator训练方式中加入图像random_crop操作
2020/07/03 Python
非常震撼的纯CSS3人物行走动画
2016/02/24 HTML / CSS
秘书专业自荐信范文
2013/12/26 职场文书
暑期实践思想汇报
2014/01/06 职场文书
2014新年寄语
2014/01/20 职场文书
车间主任岗位职责
2014/03/16 职场文书
环保倡议书50字
2014/05/15 职场文书
升学宴家长致辞
2015/07/27 职场文书
2016年寒假学习心得体会
2015/10/09 职场文书