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 相关文章推荐
jQuery Study Notes学习笔记 (二)
Aug 04 Javascript
模拟select的代码
Oct 19 Javascript
判断ie的两种简单方法
Aug 12 Javascript
jQuery实现拖拽页面元素并将其保存到cookie的方法
Jun 12 Javascript
vue组件初学_弹射小球(实例讲解)
Sep 06 Javascript
浅谈Webpack 持久化缓存实践
Mar 22 Javascript
详解vue填坑之解决部分浏览器不支持pushState方法
Jul 12 Javascript
微信小程序有旋转动画效果的音乐组件实例代码
Aug 22 Javascript
layer.confirm点击第一个按钮关闭弹出框的方法
Sep 09 Javascript
Vue 实现对quill-editor组件中的工具栏添加title
Aug 03 Javascript
jQuery实现朋友圈查看图片
Sep 11 jQuery
antd配置config-overrides.js文件的操作
Oct 31 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 magic_quotes_gpc的使用方法详解
2013/06/24 PHP
ThinkPHP水印功能实现修复PNG透明水印并增加JPEG图片质量可调整
2014/11/05 PHP
PHP验证终端类型是否为手机的简单实例
2017/02/07 PHP
tp5框架使用composer实现日志记录功能示例
2019/01/10 PHP
PHP利用pdo_odbc实现连接数据库示例【基于ThinkPHP5.1搭建的项目】
2019/05/13 PHP
JS判断浏览器是否支持某一个CSS3属性的方法
2014/10/17 Javascript
JS实现的数组全排列输出算法
2015/03/19 Javascript
jQuery判断浏览器并动态调整select宽度的方法
2016/03/02 Javascript
Angular4自制一个市县二级联动组件示例
2017/11/21 Javascript
bootstrap treeview 扩展addNode方法动态添加子节点的方法
2017/11/21 Javascript
纯js实现隔行变色效果
2017/11/29 Javascript
vue使用iframe嵌入网页的示例代码
2020/06/09 Javascript
浅谈Webpack打包优化技巧
2018/06/12 Javascript
vue实现点击隐藏与显示实例分享
2019/02/13 Javascript
浅谈小程序 setData学问多
2019/02/20 Javascript
layer弹出层扩展主题的方法
2019/09/11 Javascript
Vue 路由间跳转和新开窗口的方式(query、params)
2019/12/25 Javascript
用Python编写一个基于终端的实现翻译的脚本
2015/04/24 Python
浅谈function(函数)中的动态参数
2017/04/30 Python
LRUCache的实现原理及利用python实现的方法
2017/11/21 Python
Python设计模式之门面模式简单示例
2018/01/09 Python
使用Template格式化Python字符串的方法
2019/01/22 Python
python自制包并用pip免提交到pypi仅安装到本机【推荐】
2019/06/03 Python
Python爬虫之urllib基础用法教程
2019/10/12 Python
Python TCPServer 多线程多客户端通信的实现
2019/12/31 Python
基于python实现把json数据转换成Excel表格
2020/05/07 Python
python求numpy中array按列非零元素的平均值案例
2020/06/08 Python
Django ORM判断查询结果是否为空,判断django中的orm为空实例
2020/07/09 Python
关于pycharm 切换 python3.9 报错 ‘HTMLParser‘ object has no attribute ‘unescape‘ 的问题
2020/11/24 Python
CSS3,线性渐变(linear-gradient)的使用总结
2017/01/09 HTML / CSS
html5模拟平抛运动(模拟小球平抛运动过程)
2013/07/25 HTML / CSS
岗位职责的含义
2013/11/17 职场文书
社团活动总结范文
2014/04/26 职场文书
《鲁班和橹板》教学反思
2014/04/27 职场文书
慈善募捐倡议书
2015/04/27 职场文书
入党群众意见范文
2015/06/02 职场文书