JavaScript Perfection kill 测试及答案

 更新时间:2010年03月23日 16:42:45   作者:  
近日,在Perfection kill上看到有关javascript quiz。并做了一下,最终错了2个(#2,#9),但是,这2道题,在Ie和ff下的答案是不一样的?!
下面是选择题:官方地址是 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常用工具函数大全

    JavaScript常用工具函数大全

    这篇文章主要介绍了JavaScript常用工具函数,汇总整理了各种JavaScript常用工具函数,包括获取、判断、转换、设置等相关功能函数的定义与使用方法,需要的朋友可以参考下
    2020-05-05
  • 微信小程序中this.data与this.setData的区别详解

    微信小程序中this.data与this.setData的区别详解

    这篇文章主要给大家介绍了关于微信小程序中this.data与this.setData区别的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧
    2018-09-09
  • Javascript数组及类数组相关原理详解

    Javascript数组及类数组相关原理详解

    这篇文章主要介绍了Javascript数组及类数组相关原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • tsc性能优化Project References使用详解

    tsc性能优化Project References使用详解

    这篇文章主要为大家介绍了tsc性能优化Project References使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • JavaScript中undefined和null的区别

    JavaScript中undefined和null的区别

    这篇文章主要介绍了 JavaScript中undefined和null的区别的相关资料,需要的朋友可以参考下
    2017-05-05
  • 给easyui的datebox控件添加清空按钮的实现方法

    给easyui的datebox控件添加清空按钮的实现方法

    下面小编就为大家带来一篇给easyui的datebox控件添加清空按钮的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • Javascript加载速度慢的解决方案

    Javascript加载速度慢的解决方案

    在网站里面会加载一些js代码,统计啊,百度广告等等,结果弄得页面加载速度很慢,下面有个不错的解决方法,大家可以参考下
    2014-03-03
  • 微信小程序缓存支持二次开发封装实现解析

    微信小程序缓存支持二次开发封装实现解析

    这篇文章主要介绍了微信小程序缓存支持二次开发封装实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • javascript触发模拟鼠标点击事件

    javascript触发模拟鼠标点击事件

    这篇文章主要介绍了javascript触发模拟鼠标点击事件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-06-06
  • 原生JS版和jquery版实现checkbox的全选/全不选/点选/行内点选(Mr.Think)

    原生JS版和jquery版实现checkbox的全选/全不选/点选/行内点选(Mr.Think)

    脚本之家小编之前整理不少checkbox全选全不选这方便的文章,但看了这篇以后发现实现方法更好
    2016-10-10

最新评论