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 相关文章推荐
Javacript实现颜色梯度变化和渐变的效果代码
May 31 Javascript
基于socket.io和node.js搭建即时通信系统
Jul 30 Javascript
JS控制伪元素的方法汇总
Apr 06 Javascript
使用jQuery UI库开发Web界面的简单入门指引
Apr 22 Javascript
js控住DOM实现发布微博效果
Aug 30 Javascript
vue loadmore组件上拉加载更多功能示例代码
Jul 19 Javascript
ES6中Class类的静态方法实例小结
Oct 28 Javascript
浅谈VUE-CLI脚手架热更新太慢的原因和解决方法
Sep 28 Javascript
在Vue项目中用fullcalendar制作日程表的示例代码
Aug 04 Javascript
学前端,css与javascript重难点浅析
Jun 11 Javascript
vue-router 控制路由权限的实现
Sep 24 Javascript
vue2.0 watch里面的 deep和immediate用法说明
Oct 30 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中array_merge与array+array的区别
2013/06/21 PHP
php里array_work用法实例分析
2015/07/13 PHP
ThinkPHP实现分页功能
2017/04/28 PHP
phpStudy2016 配置多个域名期间遇到的问题小结
2017/10/19 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
2020/02/21 PHP
Prototype 学习 工具函数学习($A方法)
2009/07/12 Javascript
js实现拉伸拖动iframe的具体代码
2013/08/03 Javascript
jquery 简单应用示例总结
2013/08/09 Javascript
jQuery实现为控件添加水印文字效果(附源码)
2015/12/02 Javascript
jquery+json实现动态商品内容展示的方法
2016/01/14 Javascript
JQuery EasyUI的使用
2016/02/24 Javascript
Thinkjs3新手入门之添加一个新的页面
2017/12/06 Javascript
vue 本地服务不能被外部IP访问的完美解决方法
2018/10/29 Javascript
CKEditor 4.4.1 添加代码高亮显示插件功能教程【使用官方推荐Code Snippet插件】
2019/06/14 Javascript
layui实现鼠标移动到单元格上显示数据的方法
2019/09/11 Javascript
刷新页面后让控制台的js代码继续执行
2019/09/20 Javascript
解决vue bus.$emit触发第一次$on监听不到问题
2020/07/28 Javascript
javascript贪吃蛇游戏设计与实现
2020/09/17 Javascript
10分钟学会js处理json的常用方法
2020/12/06 Javascript
JS中循环遍历数组的四种方式总结
2021/01/23 Javascript
Vue ​v-model相关知识总结
2021/01/28 Vue.js
python使用xmlrpclib模块实现对百度google的ping功能
2015/06/02 Python
python提取字典key列表的方法
2015/07/11 Python
python爬虫入门教程--快速理解HTTP协议(一)
2017/05/25 Python
详解python读取和输出到txt
2019/03/29 Python
python获取响应某个字段值的3种实现方法
2020/04/30 Python
Pytorch高阶OP操作where,gather原理
2020/04/30 Python
python中pandas库中DataFrame对行和列的操作使用方法示例
2020/06/14 Python
python爬虫利用代理池更换IP的方法步骤
2021/02/21 Python
工业学校毕业生自荐信范文
2014/01/03 职场文书
广告传媒专业应届生求职信
2014/03/01 职场文书
2014幼儿园小班工作总结
2014/11/10 职场文书
2014年安全管理工作总结
2014/12/01 职场文书
入党个人总结范文
2015/03/02 职场文书
公司职员入党自传书
2015/06/26 职场文书
2019年自助餐厅创业计划书模板
2019/08/22 职场文书