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 相关文章推荐
在textarea文本域中显示HTML代码的方法
Mar 06 Javascript
JS将光标聚焦在文本最后的实现代码
Mar 28 Javascript
js实现div闪烁原理及实现代码
Jun 24 Javascript
详解页面滚动值scrollTop在FireFox与Chrome浏览器间的兼容问题
Dec 03 Javascript
Listloading.js移动端上拉下拉刷新组件
Aug 04 Javascript
js本地图片预览实现代码
Oct 09 Javascript
javascript数组去重常用方法实例分析
Apr 11 Javascript
详解用node搭建简单的静态资源管理器
Aug 09 Javascript
jQuery实现炫丽的3d旋转星空效果
Jul 04 jQuery
小程序自定义单页面、全局导航栏的实现代码
Mar 15 Javascript
Vue3项目打包后部署到服务器 请求不到后台接口解决方法
Feb 06 Javascript
jQuery使用ajax传递json对象到服务端及contentType的用法示例
Mar 12 jQuery
锋利的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基于session实现数据库交互的类实例
2015/08/03 PHP
PHP判断json格式是否正确的实现代码
2017/09/20 PHP
WordPress免插件实现面包屑导航的示例代码
2020/08/20 PHP
js 动态添加标签(新增一行,其实很简单,就是几个函数的应用)
2009/03/26 Javascript
JavaScript页面刷新与弹出窗口问题的解决方法
2010/03/02 Javascript
FF火狐下获取一个元素同类型的相邻元素实现代码
2012/12/15 Javascript
javascript中日期转换成时间戳的小例子
2013/03/21 Javascript
jquery实现炫酷的叠加层自动切换特效
2015/02/01 Javascript
基于jquery实现省市联动效果
2015/11/23 Javascript
通用javascript代码判断版本号是否在版本范围之间
2015/11/29 Javascript
jQuery ajax时间差导致的变量赋值问题分析
2016/01/22 Javascript
easyui form validate总是返回false的原因及解决方法
2016/11/07 Javascript
学习使用bootstrap的modal和carousel
2016/12/09 Javascript
浅谈Angular文字折叠展开组件的原理分析
2017/11/24 Javascript
vue translate peoject实现在线翻译功能【新手必看】
2018/06/07 Javascript
Vue如何实现响应式系统
2018/07/11 Javascript
微信小程序网络封装(简单高效)
2018/08/06 Javascript
JavaScript使用indexOf()实现数组去重的方法分析
2018/09/04 Javascript
js如何实现元素曝光上报
2019/08/07 Javascript
基于纯JS实现多张图片的懒加载Lazy过程解析
2019/10/14 Javascript
vue实现放大镜效果
2020/09/17 Javascript
npm ci命令的基本使用方法
2020/09/20 Javascript
Vue 实现一个简单的鼠标拖拽滚动效果插件
2020/12/10 Vue.js
[10:21]2018DOTA2国际邀请赛寻真——Winstrike
2018/08/11 DOTA
Python中的__new__与__init__魔术方法理解笔记
2014/11/08 Python
Python的time模块中的常用方法整理
2015/06/18 Python
Python中使用插入排序算法的简单分析与代码示例
2016/05/04 Python
Python rstrip()方法实例详解
2018/11/11 Python
详解Python循环作用域与闭包
2019/03/21 Python
kmart凯马特官网:美国最大的打折零售商和全球最大的批发商之一
2016/11/17 全球购物
岗位职责范本
2013/11/23 职场文书
农村产权制度改革实施方案
2014/03/21 职场文书
大学生操行评语大全
2014/12/31 职场文书
杭州西湖英语导游词
2015/02/03 职场文书
背起爸爸上学观后感
2015/06/08 职场文书
VUE解决跨域问题Access to XMLHttpRequest at
2022/05/06 Vue.js