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 相关文章推荐
跨域表单提交状态的变相判断代码
Nov 12 Javascript
jquery 页面滚动到底部自动加载插件集合
Jan 31 Javascript
JavaScript中常用的六种互动方法示例
Mar 13 Javascript
javascript中if和switch,==和===详解
Jul 30 Javascript
Angular实现购物车计算示例代码
Feb 21 Javascript
bootstrap weebox 支持ajax的模态弹出框
Feb 23 Javascript
jQuery插件FusionCharts绘制的2D帕累托图效果示例【附demo源码】
Mar 28 jQuery
微信小程序之选项卡的实现方法
Sep 29 Javascript
vue使用element-ui的el-input监听不了回车事件的解决方法
Jan 12 Javascript
vue中使用vue-cli接入融云实现即时通信
Apr 19 Javascript
微信小程序用户盒子、宫格列表的实现
Jul 01 Javascript
微信小程序反编译的实现
Dec 10 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
DC四月将推出百页特刊漫画 纪念小丑诞生80周年
2020/04/09 欧美动漫
生成静态页面的PHP类
2006/07/15 PHP
PHP 作用域解析运算符(::)
2010/07/27 PHP
PHP实现简单的新闻发布系统实例
2015/07/28 PHP
关于PHP内置的字符串处理函数详解
2017/02/04 PHP
PHP正则判断一个变量是否为正整数的方法
2019/02/27 PHP
麻雀虽小五脏俱全 Dojo自定义控件应用
2010/09/04 Javascript
jquery中ajax调用json数据的使用说明
2011/03/17 Javascript
js优化针对IE6.0起作用(详细整理)
2012/12/25 Javascript
JavaScript操作DOM元素的childNodes和children区别
2015/04/01 Javascript
Bootstrap轮播图的使用和理解4
2016/12/14 Javascript
nodejs入门教程六:express模块用法示例
2017/04/24 NodeJs
JS实现unicode和UTF-8之间的互相转换互转
2017/07/05 Javascript
基于LayUI实现前端分页功能的方法
2017/07/22 Javascript
Vue.js如何实现路由懒加载浅析
2017/08/14 Javascript
模块化react-router配置方法详解
2019/06/03 Javascript
vue 在服务器端直接修改请求的接口地址
2020/12/19 Vue.js
[38:23]完美世界DOTA2联赛循环赛 FTD vs PXG BO2第二场 11.01
2020/11/02 DOTA
python删除某个字符
2018/03/19 Python
python flask实现分页的示例代码
2018/08/02 Python
python 使用sys.stdin和fileinput读入标准输入的方法
2018/10/17 Python
python实现多进程通信实例分析
2019/09/01 Python
python实现数据清洗(缺失值与异常值处理)
2019/12/02 Python
利用Python脚本批量生成SQL语句
2020/03/04 Python
如何在windows下安装Pycham2020软件(方法步骤详解)
2020/05/03 Python
Python日志器使用方法及原理解析
2020/09/27 Python
pyspark对Mysql数据库进行读写的实现
2020/12/30 Python
css3实现背景图片拉伸效果像桌面壁纸一样
2013/08/19 HTML / CSS
英国、欧洲和全球租车服务:Avis英国
2016/08/29 全球购物
Lookfantastic希腊官网:英国知名美妆购物网站
2018/09/15 全球购物
Booking.com亚太地区:Booking.com APAC
2020/02/07 全球购物
教师优秀党员事迹材料
2014/08/14 职场文书
药店促销活动策划方案
2014/08/24 职场文书
办理房产过户的委托书
2014/09/14 职场文书
Python实现Excel文件的合并(以新冠疫情数据为例)
2022/03/20 Python
MySQL数据库查询进阶之多表查询详解
2022/04/08 MySQL