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 相关文章推荐
javascript div 弹出可拖动窗口
Feb 26 Javascript
js删除所有的cookie的代码
Nov 25 Javascript
jquery post方式传递多个参数值后台以数组的方式进行接收
Jan 11 Javascript
动态的绑定事件addEventListener方法的使用
Jan 24 Javascript
JQuery插入DOM节点的方法
Jun 11 Javascript
jQuery+php实时获取及响应文本框输入内容的方法
May 24 Javascript
js鼠标跟随运动效果
Mar 11 Javascript
实例讲解DataTables固定表格宽度(设置横向滚动条)
Jul 11 Javascript
微信小程序分享功能之按钮button 边框隐藏和点击隐藏
Jun 14 Javascript
jQuery实现网页拼图游戏
Apr 22 jQuery
ES6 Set结构的应用实例分析
Jun 26 Javascript
vue使用axios实现excel文件下载的功能
Jul 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
PHP 常见郁闷问题答解
2006/11/25 PHP
php中jpgraph类库的使用介绍
2013/08/08 PHP
php导出生成word的方法
2015/12/25 PHP
PHP基于简单递归函数求一个数阶乘的方法示例
2017/04/26 PHP
PHP实现生成推广海报的方法详解
2018/03/14 PHP
PHP调用其他文件中的类
2018/04/02 PHP
encode脚本和normal脚本混用的问题与解决方法
2007/03/08 Javascript
动态添加js事件实现代码
2009/03/12 Javascript
javscript对象原型的一些看法
2010/09/19 Javascript
js中将HTMLCollection/NodeList/伪数组转换成数组的代码
2011/07/31 Javascript
javascript验证上传文件的类型限制必须为某些格式
2013/11/14 Javascript
基于jQuery实现的文字按钮表单特效整理
2014/12/07 Javascript
Javascript基础教程之JavaScript语法
2015/01/18 Javascript
SWFObject基本用法实例分析
2015/07/20 Javascript
js实现点击按钮弹出上传文件的窗口
2016/12/23 Javascript
微信小程序 devtool隐藏的秘密
2017/01/21 Javascript
Vue.js移动端左滑删除组件的实现代码
2017/09/08 Javascript
详解React Native顶|底部导航使用小技巧
2017/09/14 Javascript
浅谈vue的几种绑定变量的值 防止其改变的方法
2018/03/01 Javascript
用Javascript实现发送短信验证码间隔功能
2021/02/08 Javascript
Windows下用py2exe将Python程序打包成exe程序的教程
2015/04/08 Python
基于Python对数据shape的常见操作详解
2018/12/25 Python
python在回调函数中获取返回值的方法
2019/02/22 Python
使用python制作一个为hex文件增加版本号的脚本实例
2019/06/12 Python
Python中pymysql 模块的使用详解
2019/08/12 Python
python同步windows和linux文件
2019/08/29 Python
Python selenium抓取虎牙短视频代码实例
2020/03/02 Python
牵手50新加坡:专为黄金岁月的单身人士而设的交友网站
2020/08/16 全球购物
Linux开机引导的步骤是什么
2015/10/19 面试题
开办加工厂创业计划书
2014/01/03 职场文书
心得体会范文
2014/01/04 职场文书
学生喝酒检讨书
2014/02/06 职场文书
小学国庆节活动方案
2014/02/11 职场文书
大学运动会加油稿200字(5篇)
2014/09/27 职场文书
庆七一活动简报
2015/07/20 职场文书
小学总务工作总结
2015/08/13 职场文书