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 相关文章推荐
Maps Javascript
Jan 22 Javascript
Expandable "Detail" Table Rows
Aug 29 Javascript
JS中如何设置readOnly的值
Dec 25 Javascript
jQuery setTimeout传递字符串参数报错的解决方法
Jun 09 Javascript
js添加事件的通用方法推荐
May 15 Javascript
jquery+css实现简单的图片轮播效果
Aug 07 jQuery
react-router4 配合webpack require.ensure 实现异步加载的示例
Jan 18 Javascript
Vuex 使用及简单实例(计数器)
Aug 29 Javascript
从源码里了解vue中的nextTick的使用
Nov 22 Javascript
微信小程序获取用户信息的两种方法wx.getUserInfo与open-data实例分析
May 03 Javascript
微信小程序如何使用云开发
May 17 Javascript
Vue学习笔记之计算属性与侦听器用法
Dec 07 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
上海地方志办公室-上海电子仪表工业志
2021/03/04 无线电
PHP输出控制功能在简繁体转换中的应用
2006/10/09 PHP
PHP常用开发函数解析之数组篇[未完结]
2012/07/30 PHP
PHP中读取文件的8种方法和代码实例
2014/08/05 PHP
浅谈本地WAMP环境的搭建
2015/05/13 PHP
PHP实现补齐关闭的HTML标签
2016/03/22 PHP
Google Map API更新实现用户自定义标注坐标
2009/07/29 Javascript
对xmlHttp对象方法和属性的理解
2011/01/17 Javascript
情人节之礼 js项链效果
2012/02/13 Javascript
原生js实现改变随意改变div属性style的名称和值的结果
2013/09/26 Javascript
Javascript中数组sort和reverse用法分析
2014/12/30 Javascript
JS实现很酷的EMAIL地址添加功能实例
2015/02/28 Javascript
js选择器全面解析
2016/06/27 Javascript
JavaScript蒙板(model)功能的简单实现代码
2016/08/04 Javascript
浅谈toLowerCase和toLocaleLowerCase的区别
2016/08/15 Javascript
浅谈Express异步进化史
2017/09/09 Javascript
JavaScript this绑定过程深入详解
2018/12/07 Javascript
JavaScript Array对象基本方法详解
2019/09/03 Javascript
原生js实现文件上传、下载、封装等实例方法
2020/01/05 Javascript
JavaScript中CreateTextFile函数
2020/08/30 Javascript
[01:02:03]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS VG
2014/05/26 DOTA
在Python中使用元类的教程
2015/04/28 Python
Python实现定时备份mysql数据库并把备份数据库邮件发送
2018/03/08 Python
Python 实现在文件中的每一行添加一个逗号
2018/04/29 Python
python获取磁盘号下盘符步骤详解
2019/06/19 Python
Pandas中Series和DataFrame的索引实现
2019/06/27 Python
Python web如何在IIS发布应用过程解析
2020/05/27 Python
python中uuid模块实例浅析
2020/12/29 Python
详解Python中的文件操作
2021/01/14 Python
英国知名衬衫品牌美国网站:Charles Tyrwhitt美国
2016/08/28 全球购物
欧洲顶级体育电子商务网站:SportsShoes.com
2018/03/27 全球购物
Etam俄罗斯:法国女士内衣和家居服网上商店
2019/10/30 全球购物
一道Delphi上机题
2012/06/04 面试题
应用化学专业职业生涯规划书
2013/12/31 职场文书
在职证明格式样本
2015/06/15 职场文书
三星 3nm 芯片将于第二季度开始量产
2022/04/29 数码科技