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 相关文章推荐
json 入门基础教程 推荐
Oct 31 Javascript
javascript学习笔记(六) Date 日期类型
Jun 19 Javascript
javascript实现文字图片上下滚动的具体实例
Jun 28 Javascript
用JavaScript实现动画效果的方法
Jul 20 Javascript
JavaScript使ifram跨域相互访问及与PHP通信的实例
Mar 03 Javascript
jQuery技巧之让任何组件都支持类似DOM的事件管理
Apr 05 Javascript
JS构造函数与原型prototype的区别介绍
Jul 04 Javascript
浅谈jQuery中的$.extend方法来扩展JSON对象
Feb 12 Javascript
JavaScript hasOwnProperty() 函数实例详解
Aug 04 Javascript
JS/HTML5游戏常用算法之路径搜索算法 随机迷宫算法详解【普里姆算法】
Dec 13 Javascript
Node.js fs模块原理及常见用途
Oct 22 Javascript
Vue 3自定义指令开发的相关总结
Jan 29 Vue.js
锋利的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
非常有用的9个PHP代码片段
2016/04/06 PHP
PHP实现查询手机归属地的方法详解
2017/04/28 PHP
[JS]点出统计器
2020/10/11 Javascript
JavaScript 滚轮事件使用说明
2010/03/07 Javascript
jquery里的each使用方法详解
2010/12/22 Javascript
JS特殊函数(Function()构造函数、函数直接量)区别介绍
2013/05/19 Javascript
判断复选框是否被选中的两种方法
2014/06/04 Javascript
基于JavaScript操作DOM常用的API小结
2015/12/01 Javascript
jQuery中bind(),live(),delegate(),on()绑定事件方法实例详解
2016/01/19 Javascript
js实现网页图片延时加载 提升网页打开速度
2016/01/26 Javascript
再谈Javascript中的基本类型和引用类型(推荐)
2016/07/01 Javascript
AngularJs Managing Service Dependencies详解
2016/09/02 Javascript
基于bootstrap的选择框插件icheck
2016/12/23 Javascript
angular.js和vue.js中实现函数去抖示例(debounce)
2018/01/18 Javascript
antd组件Upload实现自己上传的实现示例
2018/12/18 Javascript
一秒学会微信小程序制作table表格
2019/02/14 Javascript
vue实现手机端省市区区域选择
2019/09/27 Javascript
JavaScript对象原型链原理详解
2020/02/05 Javascript
通过实例了解Nodejs模块系统及require机制
2020/07/16 NodeJs
[02:47]DOTA2亚洲邀请赛 HR战队出场宣传片
2015/02/07 DOTA
Python 的 with 语句详解
2014/06/13 Python
Python使用redis pool的一种单例实现方式
2016/04/16 Python
python中的break、continue、exit()、pass全面解析
2017/08/05 Python
速记Python布尔值
2017/11/09 Python
python编程培训 python培训靠谱吗
2018/01/17 Python
python将回车作为输入内容的实例
2018/06/23 Python
Python 监测文件是否更新的方法
2019/06/10 Python
linux环境下Django的安装配置详解
2019/07/22 Python
python3.x 生成3维随机数组实例
2019/11/28 Python
利用django model save方法对未更改的字段依然进行了保存
2020/03/28 Python
python实现人性化显示金额数字实例详解
2020/09/25 Python
Python之京东商品秒杀的实现示例
2021/01/06 Python
大学生期末自我鉴定
2014/02/01 职场文书
态度决定一切演讲稿
2014/05/20 职场文书
python 实现mysql自动增删分区的方法
2021/04/01 Python
JavaScript数组 几个常用方法总结
2021/11/11 Javascript