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 实现图片预加载(js操作 Image对象属性complete ,事件onload 异步加载图片)
Mar 25 Javascript
JSON为什么那样红为什么要用json(另有洞天)
Dec 26 Javascript
javascript模拟枚举的简单实例
Mar 06 Javascript
jQuery中dequeue()方法用法实例
Dec 29 Javascript
jQuery中appendTo()方法用法实例
Jan 08 Javascript
JavaScript之AOP编程实例
Jul 17 Javascript
利用VUE框架,实现列表分页功能示例代码
Jan 12 Javascript
ES6中Math对象的部分扩展
Feb 20 Javascript
jquery插件开发之选项卡制作详解
Aug 30 jQuery
JS计算输出100元钱买100只鸡问题的解决方法
Jan 04 Javascript
vue项目部署到Apache服务器中遇到的问题解决
Aug 24 Javascript
vue解决跨域问题(推荐)
Nov 10 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
文件上传类
2006/10/09 PHP
php调用mysql存储过程
2007/02/14 PHP
codeigniter中测试通过的分页类示例
2014/04/17 PHP
PHP数据库连接mysql与mysqli对比分析
2016/01/04 PHP
PHP简单实现解析xml为数组的方法
2018/05/02 PHP
js 得到文件后缀(通过正则实现)
2013/07/08 Javascript
JavaScript类属性的访问方式详解
2014/02/11 Javascript
JQuery实现网页右侧随动广告特效
2016/01/17 Javascript
JavaScript 浏览器兼容性总结及常用浏览器兼容性分析
2016/03/30 Javascript
AngularJS入门教程之表格实例详解
2016/07/27 Javascript
浅谈Javascript事件对象
2017/02/05 Javascript
Vue中img的src属性绑定与static文件夹实例
2017/05/18 Javascript
Angular2.0/4.0 使用Echarts图表的示例代码
2017/12/07 Javascript
微信小程序功能之全屏滚动效果的实现代码
2018/11/22 Javascript
vue-cli配置全局sass、less变量的方法
2019/06/06 Javascript
js实现3D旋转效果
2020/08/18 Javascript
jquery实现广告上下滚动效果
2021/03/04 jQuery
[01:38]DOTA2 2015国际邀请赛中国区预选赛 Showopen
2015/06/01 DOTA
[00:12]DAC SOLO赛卫冕冠军 VG.Paparazi灬展现SOLO技巧
2018/04/06 DOTA
Python学习笔记之解析json的方法分析
2017/04/21 Python
python中的内置函数max()和min()及mas()函数的高级用法
2018/03/29 Python
Python 使用Numpy对矩阵进行转置的方法
2019/01/28 Python
Python学习笔记之文件的读写操作实例分析
2019/08/07 Python
numpy求平均值的维度设定的例子
2019/08/24 Python
python实现指定ip端口扫描方式
2019/12/17 Python
马克华菲官方商城:Mark Fairwhale
2016/09/04 全球购物
口腔工艺技术专业毕业生自荐信
2013/09/27 职场文书
文员的职业生涯规划发展方向
2014/02/08 职场文书
不打扫卫生检讨书
2014/02/12 职场文书
物业管理工作方案
2014/05/10 职场文书
联片教研活动总结
2014/07/01 职场文书
开学第一天的感想
2015/08/10 职场文书
《乌鸦喝水》教学反思
2016/02/19 职场文书
自己搭建resnet18网络并加载torchvision自带权重的操作
2021/05/13 Python
Html5同时支持多端sdk的小技巧
2021/11/17 HTML / CSS
SQL中的连接查询详解
2022/06/21 SQL Server